gstreamer 获取帧数据_Android App卡顿率(顺滑度、顺滑度)并整理数据
概要
測試一個Android App的卡頓率(流暢性、順滑度)的方法有很多,不同的廠和團隊有他們不同的玩法,有的用高速攝像機去評估,有的用肉眼主觀感受,有的通過獲取獲取底層數據的去評估,也有的像本文章一樣,通過Android官方推薦的方法來測試界面性能。本文將會通過一個例子,閉環從數據采集到圖表結果生成。
數據準備
設置準備
本方法僅僅適用于Android 6.0(API 級別)或以上的機器使用。首先我們打開手機的【開發者選項】,從里面找到【GPU呈現模式分析】或者【HWUI呈現模式分析】,點擊它,并選擇如下圖提示的選項。
這樣我們就可以從adb shell dumpsys gfxinfoframestats 中獲取我們需要分析卡頓的具體詳細信息,如果你沒打開上圖的選項,那么你將無法獲得具體的Draw、Prepare、Process、Execute信息。
數據提取
確認手機已經已經連接上你的電腦打開終端(或命令提示符)
打開任意你想測試的App
手動或者用錄制好的腳本移動你想測試的界面(腳本操作穩定,更準確)
活動過程中輸入命令行,把最近操作的120幀的監測數據寫入C:\datas.csv 里面。adb shell dumpsys gfxinfo com.tencent.qq framestats>c:\datas.csv
數據定義解釋
用Excel打開datas.csv,我們可以看到一坨數據,大家不要慌,我會給大家解釋重要字段的含義。
首先我們看看這組數據
很亂的感覺,不明覺厲吧?看看下表解釋:
| Total frames rendered * | 本次dump搜集了幀信息的數量 |
| Janky frames * | 上個字段中耗時超過16ms的數量(卡頓率%) |
| XX th percentile | 消耗多少毫秒歸類的百分比 |
| Number Missed Vsync | 垂直同步失敗的幀數量 |
| Number High input latency * | 高輸入延遲數-評估主線程負擔大小 |
| Number Slow UI thread * | 因UI線程上的工作導致超時的幀數 |
| Number Slow bitmap uploads * | 因bitmap的加載耗時的幀數 |
| Number Slow issue draw commands* | 因繪制導致耗時的幀數 |
| Number Frame deadline missed | 錯過截止日期的幀數 |
| 有“*”的標識重點關注對象 |
圖表制作
制作耗時分布直方圖表
對應datas.csv中“HISTOGRAM” 這個字段,可以制作耗時分布直方圖表還是使用Excel去實現,先把上圖這樣的東西分列,按照空格分列,得到如下格式:然后復制分列后的產物,找個空表,點擊鼠標郵件選擇性粘貼中的轉置粘貼,完成如下圖效果:選中這些數據,按上面提到的方法制作圖表,選擇堆積條形圖即可:通過這個圖表,我們可以分析出這個過程中和丟幀率相關的分布。
制作Draw、Prepare、Process、Execute圖表
先看看這四兄弟的含義:
Draw:表示在Java中創建顯示列表部分中,OnDraw()方法占用的時間。
Prepare:準備時間
Process:表示渲染引擎執行顯示列表所花的時間,view越多,時間就越長
Execute:表示把一幀數據發送到屏幕上排版顯示實際花費的時間。其實是實際顯示幀數據的后臺緩存區與前臺緩沖區交換后并將前臺緩沖區的內容顯示到屏幕上的時間。將上面四個時間加起來就是繪制一幀需要的時間,如果超過16ms就有掉幀了。
這里我們可以整理一下datas.csv中的Draw、Prepare、Process、Execute信息。我們使用Excel來整理,操作如下圖:分列完畢后,我們開始做Draw、Prepare、Process、Execute的圖表,如下圖:好了,我們這樣就擁有了關于Draw、Prepare、Process、Execute的圖表了。
通過這個圖表,我們可以分析出4個過程中最耗時是哪個過程,針對性去優化。
總結
做這些圖,一是希望可以幫助我們分析問題,更直觀找到問題的點,其次是可以幫我們歸納總結和成果展示,對程序員的積累成長事關重要。
參考
Android 渲染機制 Android系統每隔16ms發出VSYNC(Vertical Synchronization 垂直同步)信號,觸發對UI進行渲染。如果系統發出VSYNC信號,而此時無法進行渲染,還在做別的操作,那么就會導致丟幀的現象,即屏幕的刷新速率大于幀率。之所以是16ms,是因為人眼與大腦之間的協作無法感知超過60fps(1000ms/60=16.6ms)的畫面更新,超過60fps也是無意義的。
關注我大木老濕【碼蟻翻身】,認真做事 歡迎私信我文章的改進點,也可以交流技術。
總結
以上是生活随笔為你收集整理的gstreamer 获取帧数据_Android App卡顿率(顺滑度、顺滑度)并整理数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复杂存储过程学习_对象存储在无人驾驶高精
- 下一篇: as安装过程中gradle_重新认识An