android性能跟蹤分析工具系列 - GPU 呈現模式分析

文集目錄

ps:喜歡的點贊哦 android性能跟蹤分析工具系列 - 目錄

找到一篇GPU 呈現模式中基礎概念解釋最淺顯易懂的,大家看完這篇再看下面的內容會好很多


GPU 呈現模式分析這是 android 手機自帶的工具,先來看看這個工具:

device-2017-09-14-211441.png

上圖中下面的紅線,綠線就是我們想要的了,先別著急,下面就會細細說來

如何使用

這個使用起來很簡單的,打開 Android 手機 設置 - 開發者選項 - GPU呈現模式分析,然后我們想分析哪個 app,哪個頁面直接打開就好了,下面直接就會我們想要的數據圖標,是不是很方便,嗯嗯,簡單的才是最好的


可以監控到哪些信息

每種分析工具為外乎監控和分析數據,GPU 呈現模式分析工具又可以獲取什么信息呢:

  • 可以查看android 手機每一幀的渲染情況,每一幀的總耗時,是否超過16ms,中間綠色橫線表示16ms
  • 指定計算區域的耗時情況,圖片里每種顏色代表不同的數據計算階段

這個工具其實是最好用的了,很早就出現了,而且google一直在維護,更新,增強。仔細看這個工具有點如下優勢:

  • 一是數據是試試刷新的
  • 二是查看效果直觀,數據直接在我們需要的頁面下面展示
  • 三是數據量豐富,圖標不同顏色代表不同的任務,那個任務耗時一眼就可以查看出來,總之是這個工具是結合數據獲取/展示/分析的一個很優秀的工具

經驗豐富的程序員通過這個工具就可以大前提查看出 app 哪里跑的慢了,看顏色條就知道,結合狀況就可以有的放矢的結合其他工具去仔細查找了。


使用詳解

GPU 呈現模式分析工具最核心的就是了解每種顏色代表什么任務,android 6.0之后,改工具得到加強,顏色條變得更多,其實我們查看起來還是看原來那些任務

4.x - 5.x 版本

  • 藍色Update
    這部分代表View創建和更新DisplayList的時間,如果這部分很高,那么表示我們有很多自定義的View,或者在 View.onDraw(Canvas) 當中進行了過于復雜的操作

  • 紫色XFer
    這部分在Android 4.0之后才有,表示將資源傳遞到渲染線程所花的時間

  • 紅色Execute
    這部分代表Android 2D渲染器向OpenGL發送命令來繪制和重繪的時間,這些命令就是來自于前面生成的Display List,如果這部分很高,那么說明執行Display Lists中的命令花費了很多的時間

  • 黃色Process
    是指將一幀圖像交給合成器(compositor)的時間,如果這部分很高,那么說明GPU當前很忙碌

我在本系列文章的理論簡介中說到了渲染一幀的過程 :

  • cpu測量,布局界面上變動的視圖對象,然后繪制這些 view(onDraw方法) 生成界面一幀數據
  • 然后 cpu 把這計算出的這一幀數據傳遞給 gpu,這一幀數據也叫紋理,具體的去看 OpenGL的內容
  • gpu 根據cpu 傳遞過來的紋理數據,去具體的繪制出2D 圖形來
  • cpu 等待 pgu 通知繪制完成,cpu 才可以去干別的事,要不 cpu 會一直等著。。。這才算是完成了一幀的渲染

我們現在再來看數據圖,從下往上看,先是藍色的 update 部分,藍色執行的內容說白了就是執行有變動 view 的 measu / layout / onDraw 方法,然后生成一幀新的紋理。然后是紫色的 XFer 部分,傳遞 cpu 剛剛計算出來的這一幀給 GPU。然后紅色的 Execute 部分是 android 的2D渲染器通知 GPU 去繪制圖形。最后黃色的 Process 部分是 CPU 等待 GPU通知繪制完成

更詳細或者英文好的可以去看官方的文檔

http://android.xsoftlab.net/tools/performance/profile-gpu-rendering/index.html

6.X

哈哈,我的手機就是6.0的,我就偷懶用最上面個的效果圖啦

這是官方給的顏色解釋

  • Swap Buffers:表示處理任務的時間,也可以說是CPU等待GPU完成任務的時間,線條越高,表示GPU做的事情越多;

  • Command Issue:表示執行任務的時間,這部分主要是Android進行2D渲染顯示列表的時間,為了將內容繪制到屏幕上,Android需要使用Open GL ES的API接口來繪制顯示列表,紅色線條越高表示需要繪制的視圖更多;

  • Sync & Upload:表示的是準備當前界面上有待繪制的圖片所耗費的時間,為了減少該段區域的執行時間,我們可以減少屏幕上的圖片數量或者是縮小圖片的大小;

  • Draw:表示測量和繪制視圖列表所需要的時間,藍色線條越高表示每一幀需要更新很多視圖,或者View的onDraw方法中做了耗時操作;

  • Measure/Layout:表示布局的onMeasure與onLayout所花費的時間,一旦時間過長,就需要仔細檢查自己的布局是不是存在嚴重的性能問題;

  • Animation:表示計算執行動畫所需要花費的時間,包含的動畫有ObjectAnimator,ViewPropertyAnimator,Transition等等。一旦這里的執行時間過長,就需要檢查是不是使用了非官方的動畫工具或者是檢查動畫執行的過程中是不是觸發了讀寫操作等等;

  • Input Handling:表示系統處理輸入事件所耗費的時間,粗略等于對事件處理方法所執行的時間。一旦執行時間過長,意味著在處理用戶的輸入事件的地方執行了復雜的操作;

  • Misc Time/Vsync Delay:表示在主線程執行了太多的任務,導致UI渲染跟不上vSync的信號而出現掉幀的情況;出現該線條的時候,可以在Log中看到這樣的日志:

6.x 中的圖中,把顏色分的更新了,頁更能表現出更多的任務來,仔細看最底下的深綠色新添加的,是我們需要仔關注的,表示 UI線程因為任務多,造成渲染界面延遲。其他的都是 4.x - 5.x 版本的東西。


分析經驗

關于紅色和黃色部分,這2部分的任務都不是在 UI 線程執行的,都是在渲染線程或是 GPU了來干的,所以紅的和黃的耗時不一定就是表示界面卡頓了,我們要根據情況區別分析:比如列表中有大量的網絡圖片需要加載顯示,因為這些網絡圖片都是使用單獨線程來加載顯示的,所以這個 UI 線程并不卡頓,但是要是我們加載大量 app 內部的 png 靜態圖片的話,那么肯定會卡的。

舉個例子,我們有100個東西需求顯示,我們在初始幀時只顯示10個,然后1S 內顯示剩下的90個,這就相當于把100個東西放寬在1S 內顯示完。要是我們要求這100個東西一定要在初始幀顯示完,那么這么大的計算和渲染量肯定會卡幀的。

所以我們在面臨有大量 app 內靜態 png 圖片顯示時,可以對 imageview 做一下延遲顯示,在頁面顯示之后,再去顯示圖片。

藍色和綠色部分是我們需要重點關注的,這是因為布局層級多,效率低,過度繪制,造成的。另外圖片量大,體積大也會造成淺藍色耗時。

深綠色也是我們關注的重點,我在上面說了,這是新增的內容,反應的是 UI 線程渲染界面出現延遲,要是發現這里耗時了,肯定是 cpu 在這個時間段干的事多了,卡了,我們可以使用 Trace View 去最終下在頁面的生命周期函數內有耗時操作。


參考資料

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

推薦閱讀更多精彩內容