Chromium on Android: Android L平臺上WebView的變化及其對瀏覽器廠商的影響分析

摘要:Android L平臺在圖形渲染方面有一項重要的改進,它引入瞭一個專門的線程用於執行渲染工作,UI線程負責生成的顯示列表(DisplayList),渲染線程負責重放(playback)這個顯示列表繪制最終的內容,因此Chromium WebView在圖形棧的實現方面也作瞭相應的調整,以支持Android L系統上新的渲染線程模型。本文將深度分析Chromium WebView的渲染流水線是如何無縫整合到Android L系統的渲染模型中,以及對目前市場主流瀏覽器廠商將會產生什麼樣影響等問題。此外,本文對Chrome
on Android瀏覽器的渲染模型和流水線工作也做瞭相應的介紹。

最新AndroidL平臺的新特性 –Render線程

在Android L產品發佈會上,Google向外界宣佈瞭諸多AndroidL系統的新特性,引起瞭開發者的廣泛關註。除瞭大力倡導的Material設計理念之外,還有一個非常值得關註的亮點就是,AndroidL這次有瞭獨立的渲染線程。

長期以來,Android平臺一直被人詬病的就是系統流暢度問題,用過Android 的人總感覺應用程序在來回切換或者執行動畫時,總是感覺到有些卡頓或者在處理觸摸事件時動畫會停止,就是達不到iOS系統的流暢度。從直覺上來說,Davilk虛擬機似乎是問題的罪魁禍首,因為GC總是不可預測,隨時都有可能發生,令人難以捉摸,而且一旦GC是以阻塞UI線程的方式運行的,但現實可能是Davilk的GC背瞭黑鍋。問題的根源可能是阻塞式的渲染模型導致,UI線程實在太忙瞭,要做的事情太多瞭,例如,既要處理觸摸事件,遍歷View層次結構給每個需要更新的View逐一派發onDraw事件,還要與GPU設備打交道,執行GPU命令渲染。Android團隊正在著手解決這個問題,提高系統UI的流暢度。

自Android 3.0開始就啟用硬件加速渲染機制,繪制View分為更新/記錄顯示列表(DisplayList)和重放(playback)顯示列表兩個步驟,解決瞭軟件繪制方式性能低下的問題,然而仍沒有將界面的渲染工作從UI線程中解放出來。AndroidL系統為此引入專門的渲染線程,將重放顯示列表的任務從UI線程中獨立出來,例如動畫可以以off-main-thread的方式運行,隻要動畫的時間線設置好瞭,渲染線程負責更新每一幀的動畫,而UI線程可以騰出手去處理更加緊急的事情。

大道至簡,大多設計原理念都是相通的。類似的渲染線程模型其實在Chromium圖形棧中早就采用瞭, Chrome瀏覽器中,就有一個專門的GPU進程(或線程)和GPU設備進行交互,保證圖形的渲染不會阻塞Blink線程,也不會阻塞瀏覽器線程,而且為瞭保證Web頁面中對用戶輸入事件的及時響應,Chromium還會將用戶輸入事件首先派發給頁面的Compositing線程,並由Compositing線程決定如何處理這個事件,例如當快速滑動頁面時,Compositing線程會先於Blink線程將緩存好的Tile繪制出來,然後再請求Blink線程根據滑動距離去繪制新的曝光區域的Tile內容(註:為瞭與Android系統渲染線程做出區分,這裡提到的Blink線程指的是ChromiumRenderer線程,在Web世界裡,Blink線程類同於UI線程,負責頁面的佈局和JavaScript代碼的執行,而Compositing線程負責將Web頁面中多個層的合成,從而使頁面的佈局和層合成能夠並行)。

Android L系統中UI線程根據View層次結構和更新區域,向需要重繪的View發送onDraw事件請求更新顯示列表,然後再由渲染線程上重新繪制更新過的顯示列表。如下圖所示:

vcPmu7nQ6NKqvMzQ+MWswaahozwvcD4KPHA+19S000FuZHJvaWQ0LjQgKEtpdEthdCnPtc2zv6rKvMirw+ayydPDu/nT2kNocm9taXVtxNq6y7XEV2ViVmlld8q1z9ajqLv509pDaHJvbWl1bSBNMzCjqdLUwLSjrENocm9taXVtIFdlYlZpZXfU2sq1z9bJz9Ky0rvWsbj6y+bXxUFuZHJvaWTPtc2z1Nqyu7bP0d29+KOsQW5kcm9pZCBMz7XNs7XEV2ViVmlld8q1z9bWwcnZtPjAtMHLwb249iYjMjA1NDA7tcPM2LHwudjXorXEseS7r6GjIDwvcD4KPGgzPjxzdHJvbmc+seS7r9K7o7rSs8Pm5NbIvrXEuaTX98H3s8y6zc/fs8zEo9DNPC9zdHJvbmc+PC9oMz4KPHA+QW5kcm9pZCA0LjTPtc2zyc+1xFdlYlZpZXfU2rmmxNy6zdDUxNzJz7a8srvN6snGo6zA/cjnsrvWp7PWV2ViR0y6zVdlYlJUQ9LUvLDSu9Cpx+HBv7y2tcRIVE1MNUFQSaOsyfXWwcGsQ2FudmFzMkS1xNOyvP6808vZtryyu9ans9ajrLWr1/fOqrXa0ru49rv509pDaHJvbWl1bcTausu1xFdlYlZpZXejrMv80OjSqtbYteO94r72tcTOysziysfT677JsOaxvrXEV2ViVmlld7XEvObI3dDUzsrM4qOs08jG5MrH0OjSqs2syrHI7bz+5NbIvsSjyr26zdOyvP7k1si+xKPKvaGjPC9wPgo8cD5XZWJWaWV3tcTI7bz+5NbIvsSjyr2+zcrHvavSs8PmtcTE2sjd5NbIvrW9Qml0bWFw1tCjrNLUuam/zbuntsu0+sLry/nTw6OstvjH0sjtvP7k1si+xKPKvdKqx/Ox2NDr1qez1rXEo6zJ9dbB1NrTsrz+5NbIvsSjyr3PwqOsyO28/uTWyL63vcq90rKx2NDry+bKscvmtdi1xMTcubuxu8q508OjrNLUzfnT0LrctuC7+dPaV2ViVmlld7XE06bTw7vhtffTw1dlYlZpZXcuZHJhd7LZ1/fKtc/WzfjSs6Gwv+zV1aGxstnX96GjudjT2kNocm9taXVtV2ViVmlld8rHyOe6zsq1z9bI7bz+5NbIvsSjyr2jrMfrss7UxENocm9taXVtCiBvbkFuZHJvaWQ6ILfWzvZDaHJvbWl1bVdlYlZpZXe1xMjtvP7k1si+t73KvdK7zsShozwvcD4KPHA+07K8/uTWyL7Eo8q91tCjrNfuudi8/LXEzsrM4srHyOe6zsq1z9ZDaHJvbWl1bc+1zbO6zUFuZHJvaWTPtc2zwb3V37XE07K8/rzTy9m7+tbGtcTO3rfs1fu6z6OsvatDaHJvbWl1bc280M7Vu7XEstnX97Sutb1BbmRyb2lkz7XNs7vm1sZWaWV3tcTk1si+wre+tsnPoaOxvs7EvdPPwsC0tcTE2sjd1vfSqsy9zNbTsrz+5NbIvsSjyr2hozwvcD4KPGg0PjxzdHJvbmc+Q2hyb21lIG9uIEFuZHJvaWS1xOTWyL7B98uuz988L3N0cm9uZz48L2g0Pgo8cD7OqsHL0tSxyL3PtcS3vcq9y7XD91dlYlZpZXfM2LaotcTk1si+xKPQzaOsz8jAtL+0v7RDaHJvbWUgb24gQW5kcm9pZMrHyOe6zuTWyL5XZWJHTM340rO1xKGjttTT2tLGtq9DaHJvbWXkr8DAxvfAtMu1o6zL/MrHtuC9+LPMvNy5ubXEo6zV4rj2ttTk1si+xKPQzdKytObU2tK7tqi1xNOwz+yjrLWrsrvKx9fu1tjSqqOs0rPD5sTayN21xLj80MLKx9PJz7XNs1ZTWU5D0MW6xbSlt6KjrNK7talCcm93c2VyvfizzMrVtb3Ptc2ztcRWU1lOQ9DFusWjrNX7uPZDaHJvbWl1bc280M7Vu7XEwffLrs/fuaTX98GivLS74bG7xvS2r6OsytfPyMv8u+HP8lJlbmRlcmVyvfizzLeiy81JUEPP+8+ix+vH87+qyrzJ+rPJ0MK1xNK71qGjrFJlbmRlcmVyvfizzMrVtb3P+8+i1q6686Os1vfP37PMyc+/qsq8QmVnaW5NYWluRnJhbWW1xMLfvK2jrNa00NByZXF1ZXN0QW5pbWF0aW9uRnJhbWW4/NDCV2ViR0y1xOTWyL6y46OsyOe5+8bky/vk1si+suPS8kRPTcr3seS7r7vy1d9DU1O2r7utt6LJ+sHLuMSx5KOsxMfDtNb3z9+zzLu5u+HWtNDQsdjSqrXE1tjQwsXFsOa6zeTWyL6y47XEu+bWxsjOzvGjqDxlbT7XoqO6Q2hyb21pdW3G9NPDwctJbXBsUGFpbnRpbmfM2NDUuvPW98/fs8zJz7vm1sbIzs7x1ri1xMrHzai5/bzHwry75tbGw/zB7sn6s8lTa1BpY3R1cmWjrNTZ08lSYXN0ZXJpemF0aW9uz9+zzNTL0NDV4tCpu+bWxsP8we7J+rPJ1+7W1bXEzbzP8aOs1+6688nPtKu1vUdQVbXEdGV4dHVyZdbQPC9lbT6jqaOsuPzQwsO/uPbk1si+suO1xLvm1sbQxc+io6jI59f4seqjrGNsaXDH+NPyo6yx5Lu7vtjV87XIo6mjrLWxy/nT0OTWyL6y483qs8nQxc+iuPzQwrrzo6zW98/fs8zU2bvhvavV4tCpsuO1xNDFz6LNrLK9uPhSZW5kZXJlcr34s8zW0ENvbXBvc2l0aW5nz9+zzKOoPGVtPteio7pDaHJvbWl1bbLJ08PBy8/fs8y7r7XEus+zyby8yvWjrLy00rPD5uTWyL6y47XEus+zybLZ1/fU2tK7uPbXqMPFtcTP37PM1tDWtNDQo6y2+LK7ysdSZW5kZXJlcr34s8y1xNb3z9+zzDwvZW0+o6mho0NvbXBvc2l0aW5nz9+zzLj5vt3Tydb3z9+zzMzhvbu1xNe0zKzQxc+ivavL+dPQ5NbIvrLjsLTV1Xotb3JkZXK0ztDy0sC0zrX+vNOjrLvm1sbQwrXE0rvWoaOoRHJhd0ZyYW1lo6mjrL2rxuS08rD8tb3Su7j2Q29tcG9zaXRvckZyYW1lveG5uczl1tCjrNTZzai5/UlQQ7eiy824+EJyb3dzZXK9+LPMo6zH68fzQnJvd3Nlcr34s8y2y7XEus+zycb3vatDb21wb3NpdG9yRnJhbWXE2sjd0+vG5Mv75K/AwMb31KrL2KOoyOe5+9PQo6m9+NDQ1+7W1cTayN21xLrPs8mjqENvbXBvc2l0aW9uo6mjrNfuuvNHUFXP37PM1rTQ0FN3YXBCdWZmZXKy2df3vavE2sjdz9TKvrW9U3VyZmFjZVZpZXfJz6Gj1sG0y6Os0MK1xNK71qHE2sjd5NbIvs3qsc+jrEJyb3dzZXK9+LPMytW1vVZTWU5D0MW6xbrz09a9q7+qyrzPwtK71qHE2sjdoaM8L3A+CjxwPjxpbWcgc3JjPQ==”/uploadfile/Collfiles/20141105/2014110508571531.png” alt=”n塊噵-畨?鋩+嬲夓?糙铻徠悺畨⒑e瀖X灷*&櫓?邕z?兟錱沄’?wk?U夓夓澸鑹援渰鷌瀖X灹B(?諑壝j{詒g沄’癒)軉?㈦h?h瑽”壝I傿P€?娯g沄’?棟?
夗z{l棟啊畨⒑`’v?uX灹g沄’阿p雓殲霈wk?RΗv?v鵀纕玾玿&Ы?j穚j穫j{詘b罎阼壵b{
ek&趓Eb{?wk?E灺婁聯?╋j翄聯?╋j請jg浌鬢琤?v玾玿&Ы?瀗邕z哭殶槨 莓垵銋b{Y嬲夓(?誒:誒b莏穚j穫j{詒By礲{Ы゜u玘V’癋?V’癡’阿p雓瀖X灺壝j穚j穫j{詘:誒b鉚?,b莏穚j穫j{詘b濦e妝???Hb濫
墿⑷瓓xy礲{Ы゜u玘雓槨 莓垵銋瀖X灷c??Y嫫-g??Y嫫-B?‘墷篹瀖X灷 莓垵/鷌wk?Kz`’v?t(k畼b濷迾(k畼 莓垵.薻y礲{於?凓iWBh?h瑽?銹?棟Y嬲夓?]
墿⑷皚殮,娳+鼎x 莓垵
*&”秺跐阼壾n鵀?杪謙V’癊檁z帆=炐?娳+跰監(k 莓垵?標罎阼壵棟啊奧Bh?h?&”秺怒聯?╋j泌?墿⑷錠v?w浘’?聯轊檁z?’v?w?澸鑹抑y礲{
‘棟?]
墿⑷皚殮,娳+鼎x 莓垵棟半k婸埀僵bu玘V’癗辤诐E檁z帆wk?U夓=Eb{雓?炐?娳+P佢殲霈iz`雓?wk?@澸鑹陰覧聯?╋j離k?棟穔k?聯?╋j鄰殲霈棟哭淂iwk?KY嬲夓澸鑹?wk?K?饄燴{!畨⒑k(wk?x泮a匏ky眿 ╋j蛢k?噝Vy眿Y嬲夓y眿?y眿禐lb迋W爼g沄’?wk?U夓,叒迋??k畾萙+㈥B喓&婇啳猘壦7 莓垵V’?棟壁殲霈Y嫫,v玾玿&Ы?y眿wk?U夓-{n,墯侂^欺玿(k畾妝蛾迿ēn宮{n^欺玿脾暫1奠m悍瓄n傅靘悍妝蛾迿ēn宮{n潤ēn宮{n澆珃
韜熼??,墯侀殜V杵妝蛾?鋩+嫫-欐題鳙奠m悍?E瀕b韠n殜V梘?
窔碘&j?^欺珃’D?j€澸鑹誦{雓嫏ēn孎=A,墯侂^欺珁g?籢欺珃妝蛾薜靘悍儹?-g?眿
鋩+Τ)堞埀?k畼*&櫓?邕z眿F,媃嫫,:誒b罎阼壵b{瀕b?c訷嫫-g?半k?鋩+?訂?,??於?€ 莓垵Y嬲夓呴ek?噝Vy礲{Y@?’甸戇^炢澸鑹?nH璝嬲夓喓&婇屵E瀖X灹(^朠‘墷篶7駁沄’癑b液汾q錬{雓婸亱J貲i菚夓??繃jB喓&婇杫礲{‘墷簅楗 莓垵Y媸娦’v?w?澸鑹諡mX灷(k畼 莓垵Y媸娧?継澸鑹諡lō
鋩+?3琥a?k疀鴚噣拽??鉶?wk?v觨8?)
夗z{@<€軔閊伀^
鋩+€'v?uBd娦'v?ug沄'?夗z{@<厼mX灹+珆?V'癑貲i菚夓夓夓悍趒錬{鰷x 莓垵V'癑貲i菕悍趒錬{J貲i菚夓枠Z跱x?珆?V'剝歊悍趒錬{趍6泜T^i逾砰l??歵z[喓&x(k?c訨貲i菚夓.m貺h?h瑽h?h蘄?"秺聠?y6汳βh?h琧緣靘悍璱眿奠m悍倖?y7倍贄V'癑貲i菚夓{nb{廞+珆?V'剝欶=D鰷yX灹B??喓&婇杫礲{0
夗z{lY嬲夓?噴B喓&婅嬲夓y礲{瀖X灺壝娰殼&Ы?!By礲{OH(k畽g沄'剝榳
鋩+?鋩+?3?k疀鷌糙铻b潽蟒薻喓&婇仏)?夗z{Vy礲{Y@<瓆0(k畾瘸{m逤5釁猟l逗'凔-畨?鋩+?鋩+??鋩+嬲夓=@'v?ug沄'癹?-畨?wk?糙铻wk?B喓&婇€澸鑹?wk?@澸鑹?驧逮欱喓&婇倖?婇倖?婇倖?婇小畨⒑a?継JavaScript允許用JavaScript開發新的DOMAPI,還有Oilpan自動垃圾回收框架試圖從架構上解決DOM中難以定位的內存泄露問題,以及PromiseAPI的實現等等。

所以,從這個角度看,Chromium內核是瀏覽器內核升級的一個方向,但如果瀏覽器產品隻是定位在滿足大多數用戶最基本的使用場景,例如看看小說,上上網等,確實沒有必要將一個龐然大物 內嵌到產品中,但如果存有將瀏覽器打造成為Android系統上Web應用的運行平臺這樣的野心,升級到Chromium內核隻是一個時間問題,再配合目前已有的雲端加速能力和視頻支持等,完全可以使Chromium內核更加完善。QQ瀏覽器,百度瀏覽器和UC瀏覽器,誰將會是第一吃螃蟹的人,拭目以待吧!

(全文完)

原創文章,轉載請註明來自https://blog.csdn.net/hongbomin/article/details/40799167,謝謝!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *