UI優(yōu)化之-GPU Rendering Profile

序言

app的性能優(yōu)化可分為 流暢,穩(wěn)定性,耗電量,流量節(jié)省 幾個大類,其中與流暢掛鉤的就是UI界面的優(yōu)化程度,在17年的開發(fā)中接觸過一些UI界面卡頓的問題,在開發(fā)代碼的過程中也應(yīng)用到一些技巧,UI優(yōu)化的文章也接觸了很多,但一直沒有做一個系統(tǒng)的歸納總結(jié)。這篇歸納總結(jié)就從比較常用的GPU-RENDERING-PROFILE 開始總結(jié).


GPU RENDERING PROFILE

Android在開發(fā)者工具選項中提供了一些列性能調(diào)優(yōu)的輔助工具,其中就包括 過度繪制顯示GPU渲染分析(這個翻譯不知道對不對)

GPU-RENDERING-PROFILE是什么

GPU-RENDERING-PROFILE(后面簡稱GRP)可以通過在屏幕上繪制滾動的柱狀圖來顯示繪制每一幀所消耗的時間,每根柱子由不同的顏色構(gòu)成,分別代表UI繪制的不同階段,并且在柱狀圖的中間還有一根綠色的橫線代表16ms的繪制時間基準(zhǔn).GRP會統(tǒng)計并顯示app最近運行的128幀.


image.png

android是如何將view繪制到屏幕

要理解柱狀圖不同顏色的含義,就有必要先了解android繪制view到屏幕上的大致流程.
總體來說,代碼中的view控件轉(zhuǎn)化為屏幕上可見的圖像就是轉(zhuǎn)換成為屏幕上一個一個像素點的過程,這個過程叫做柵格化(rasterization).

image.png

image.png

上圖直接用了鏈接中文章中的貼圖:
http://hukai.me/android-performance-patterns/
這張圖很清晰地展示了整個柵格化的大致過程(缺少將view轉(zhuǎn)化為紋理的一步),如果加上這一步,整個過程為:

  • TextView,Button等等控件通過cpu計算轉(zhuǎn)換為內(nèi)存中的polygons(多邊圖形)和texture(紋理)
  • cpu通過OpenGL|ES的接口將紋理數(shù)據(jù)傳遞給GPU渲染處理,在這個過程中,由DisplayList這個結(jié)構(gòu)負(fù)責(zé)保存繪制用到的所有信息,在Displaylist無需重新創(chuàng)建或改變的情況下,GPU可以直接使用這里的數(shù)據(jù)進(jìn)行渲染.通過第二張圖我們可以看出invalidate()這個操作會導(dǎo)致displaylist的刷新和重新執(zhí)行.(這里的過程有些復(fù)雜,有篇文章講解得不錯)
    http://djt.qq.com/article/view/987
  • GPU將渲染圖形顯示到屏幕
    為了保證不掉幀,整個所有過程加起來需要在16ms內(nèi)完成。了解了圖形顯示的大致流程,再回頭看柱狀圖的含義就容易理解了.

柱狀圖不同顏色的不同含義

color name meaning
墨綠色 MiscTime/VSync Delay 代表在連續(xù)兩幀間的時間間隔,可能是因為子線程執(zhí)行時間過長搶占了UI線程被cpu執(zhí)行的機會.
深綠色 Input Handing 代表app在用戶輸入事件回調(diào)中花費的時間,這部分過高可能意味著app處理用戶輸入事件時間過長,建議將操作分流到工作線程.
綠色 Animation 代表為該幀內(nèi)所有animator求值(屬性動畫中代表通過估值器計算屬性的具體值)所花費的時間.如果這部分過高,代表自定義animator性能不佳或者更新view屬性引發(fā)了某些意外操作.
淡綠色 Measure/Layout 代表了onLayoutonMeasure方法消耗的總時間,這段很高代表遍歷整個view樹結(jié)構(gòu)花費了太多時間.
深藍(lán)色 draw 代表創(chuàng)建更新DisplayList的時間,過高代表在onDraw中花費過多時間,可能是自定義畫圖操作太多或執(zhí)行了其它操作.
淺藍(lán)色 sync&upload 向CPU傳輸Bitmap花費的時間,過高代表了加載了大量圖形.
紅色 command Issue Android 2D渲染器OpenGL發(fā)出命令繪制或重繪display lists 花費的時間,柱子的高度等于所有Display list繪制時間的總和.
橘色 swap buffers 代表cpu在等待gpu完成工作,如果過高代表GPU需要完成的工作過多.
image.png

來看下每種顏色代表的是整個顯示流程的哪一步

color name meaning
墨綠色 MiscTime/VSync Delay 代表在連續(xù)兩幀間的時間間隔,可能是因為子線程執(zhí)行時間過長搶占了UI線程被cpu執(zhí)行的機會.
深綠色 Input Handing 代表app在用戶輸入事件回調(diào)中花費的時間,這部分過高可能意味著app處理用戶輸入事件時間過長,建議將操作分流到工作線程.
綠色 Animation 代表為該幀內(nèi)所有animator求值(屬性動畫中代表通過估值器計算屬性的具體值)所花費的時間.如果這部分過高,代表自定義animator性能不佳或者更新view屬性引發(fā)了某些意外操作.
淡綠色 Measure/Layout 代表了onLayoutonMeasure方法消耗的總時間,這段很高代表遍歷整個view樹結(jié)構(gòu)花費了太多時間.
深藍(lán)色 draw 代表創(chuàng)建更新DisplayList的時間,過高代表在onDraw中花費過多時間,可能是自定義畫圖操作太多或執(zhí)行了其它操作.
淺藍(lán)色 sync&upload 向CPU傳輸Bitmap花費的時間,過高代表了加載了大量圖形.
紅色 command Issue Android 2D渲染器OpenGL發(fā)出命令繪制或重繪display lists 花費的時間,柱子的高度等于所有Display list繪制時間的總和.
橘色 swap buffers 代表cpu在等待gpu完成工作,如果過高代表GPU需要完成的工作過多.

https://developer.android.com/studio/profile/inspect-gpu-rendering.html
上面的表格是對各種顏色含義的簡單的介紹,官方文檔中有更詳細(xì)的介紹,針對每一點都鋪開來講,這里暫時先不完整記錄,只先附上鏈接.
https://developer.android.com/topic/performance/rendering/profile-gpu.html

這篇總結(jié)簡單記錄了 GRP的使用和含義,over.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容