?? 復制“下方鏈接”,提升測試核心競爭力!
>>更多技術文章分享和免費資料領取
https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=souhu×tamp=1650421400
玩游戲的時候最怕的就是卡頓。排位賽的緊急關頭,明明馬上就能上一段位,卻因為卡頓導致給對方送人頭。還把對手送上了王者。引起隊友罵聲一片。作為測試工程師的你,可以忍?
卡頓測試也是專項測試里的一種,更多精彩測試內容,可下方關注公眾號
霍格沃茲測試學院
霍格沃茲測試學院致力于培養專業的測試人才,推動測試行業的技術更新和發展,我們本著此宗旨,為您提供最新的測試技術培訓和實戰,讓您真正的可以在測試能力上獲得提升。
491篇原創內容
公眾號
卡頓分析
Android系統每隔16ms會發出VSYNC信號重繪我們的界面(Activity)。App需要在16ms內完成下一次要刷新的界面的相關運算,以便界面刷新更新,如果無法在16ms內完成運算,就會發生卡頓,影響用戶體驗。
下面的這些內容可能會造成卡頓:
內存問題:內存抖動、full gc cpu:計算耗時 gpu:布局復雜、overdraw內存
就是執行GC操作時,需要暫停線程的任何操作,GC操作完成,其他操作才能繼續,頻繁的GC會導致界面卡頓,頻繁GC有兩個原因:
內存抖動(Memory Churn),創建大量的對象,在短時間內馬上釋放。 產生大量對象會占用Young Generation的內存區域, 如果剩余空間不足,就會觸發GC。同時,大量對象的疊加也會增加Heap的壓力,從而觸發更多的GC操作。CPU
UI渲染由CPU和GPU分工完成,CPU負責布局元素的運算(比如Measure, Layout)。GPU負責柵格化處理(將UI元素繪制到屏幕上)。
UI布局層次太深, 或者自定義控件的onDraw函數中存在復雜運算, 就需要CPU負荷工作,從而影響整個繪制過程。
GPU
過度繪制會導致gpu負荷,每屏的每一幀,像素點應該只被繪制一次,如果重復繪制像素點,就是過度繪制。
Android可以查看過度繪制:“設置”→“開發者選項”→“調試GPU過度繪制(toggle GPU overdraw)”,打開后再訪問App會出現下圖:
此時界面可能會有五種顏色標識:
原色:沒有overdraw 藍色:1次overdraw 綠色:2次overdraw 粉色:3次overdraw 紅色:4次及4次以上的overdraw卡頓的關鍵因素是無法在16ms內繪制一幀,sdk自帶的systrace工具可以分析每一幀的繪制情況,并且給出補救措施和建議。
環境安裝
需要安裝sdk,在sdk目錄下存在systrace.py:
python{sdk目錄}/platform-tools/systrace
注意:運行此工具需要python2.7。
如果運行中出現如下錯誤,安裝對應的依賴即可:
No module win32con
pip2 install pypiwin32
No module six
pip2 install six
使用
首先連接一個Android設備:192.168.181.102:5555
在命令行輸入:
python systrace.py -e 192.168.181.102:5555
在設備上進行操作在命令行:按下enter,完成錄制。此時會生成一份html報告,整個過程如下:
點擊生成的html報告:
參數解析:
幀點:綠色表示16.6ms內,黃、紅色超過16.6ms 任務狀態灰:休眠;藍色:可運行;綠色:運行;橙色:不響應信號 函數調用在報告的頁面有快捷鍵操作:
w:放大 s:縮小 m:找到下一幀,顯示時間幀分析
如果一個幀的繪制時間超過0.7s,用戶會明顯感覺到卡頓,稱之為冰凍幀,比如上面紅色的幀點。如果幀的繪制時間剛好超過0.6ms,稱之為掉幀,比如上面黃色的幀點,但部分掉幀影響不大,主要危險來自于冰凍幀。
也可以用adb自帶的工具對幀進行分析,但數據不如systrace精準:
adb -s devicesname shell dumpsys gfxinfo |less
?? 復制“下方鏈接”,提升測試核心競爭力!
>>更多技術文章分享和免費資料領取
https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=souhu×tamp=1650421400
責任編輯:Rex_08