測試人生 安卓FPS測試詳解

2021-09-25 06:26:59 字數 2146 閱讀 9577

安卓的fps測試,是我開啟測試開發大門的一把鑰匙。兩年前的現在,安卓效能測試的相關資料甚少,以fps為例在網上也只有寥寥幾篇文章講述,但到了今年,已經有許多資料在各大技術論壇上供大家看到了。對於自己,一直想找乙個機會把這一段技術探索寫出來。所以,心動不如行動。

fps(frames per second),通常表示我們螢幕每秒展現的(幀)數,反映了一款應用在當前硬體下的效能消耗。比如我們抽cs的時候,就經常關注fps是否高,在高的情況下,就會有較好的流暢度。因此fps是應用效能測試中乙個重要指標。

那麼我們該如何通過su***ceflinger獲得fps資料呢?大體上,我們可以參考《android效能測試之fps獲取》一文。這種方式成功率高(雖然我家手機行不通),且不用root,較為方便

首先,通過adb,我們可以匯出su***ceflinger服務的執行時資訊。

adb shell dumpsys su***ceflinger
dump出的資訊包含了每個圖層經過su***ceflinger加工後的資訊,以及在硬體顯示層上的層次,例子如下:

region transparentregion (this=0x796c18eb90, count=1)

[ 0, 0, 1080, 2240]

region visibleregion (this=0x796c18e810, count=1)

[ 0, 0, 0, 0]

region su***cedamageregion (this=0x796c18e888, count=1)

[ 0, 0, 0, 0]

layerstack= 0, z= 21015, pos=(0,0), size=(1080,2240), crop=( 0, 0,1080,2240), finalcrop=( 0, 0, -1, -1), isopaque=0, invalidate=0, dataspace=(deprecated) srgb linear full range, pixelformat=rgba_8888 alpha=1.000, flags=0x00000000, tr=[1.00, 0.00][0.00, 1.00]

client=0x796fb03ec0

得到圖層後,我們可以輸入以下命令,匯出該圖層渲染的時間資料:

adb shell dumpsys su***ceflinger --latency 《圖層名》
如果成功的話,會顯示出三列資料,大概是這樣:

// 摳圖 from chromium android pylib

16954612

...7657467895508 7657482691352 7657493499756

7657484466553 7657499645964 7657511077881

7657500793457 7657516600576 7657527404780

...

所有資料以納秒為單位。第一行表示顯示器重新整理頻率(16.95ms),一般為固定值。剩下每一行代表乙個幀的時刻資料,三個時刻資料分別表示:

垂直同步訊號來臨時刻(b)

su***ceflinger把幀全部提交給硬體的時刻(c)

所謂垂直同步(vsync),玩競技遊戲的同學應該都非常了解,它是與顯示器重新整理率掛鉤的。通常情況下,顯示器有多個快取,顯示卡在其中乙個快取繪圖,而顯示器在另外的快取讀取幀資料顯示在螢幕上,然而由於顯示卡繪圖的速度總是會比顯示器重新整理的速度快,如果顯示卡實在沒地方,最後跑到顯示器讀取幀的快取寫入資料的話,那顯示器可能上半部是乙個幀的,下半部分成另乙個幀的樣子了,造成畫面撕裂。因此,顯示器通過這個機制阻塞顯示卡繪圖至其它的快取,從而保證顯示畫面的流暢執行。

但除此之外,我們還要考慮繪圖掉幀(jank)的因素。所謂掉幀正好與前面的畫面撕裂相反,是由於系統排程問題,導致下乙個vsync訊號來了時,下乙個資料沒準備好,這樣顯示器就又把上一幀資料給顯示了一次。通過統計ceil((c - a) / refresh-period),我們就可以看到每一次垂直同步下繪圖~硬體顯示的標準值(jankflag),理論上這個標準值是定值。而實際情況下,只要這個標準值有變動,就說明有掉幀的情況了。

這樣一來,我們通過fps原始值,減去時間差變動的次數(掉幀次數),就能獲得真實的fps值了。

monkey測試 安卓測試之monkey

安卓手機最簡單的隨機壓力測試工具monkey真的是測試的福星,人人都可以用,只需要敲一串命令即可 舉例 adb shell monkey p com.android.camera ignore crashes ignore timeouts throttle 300 s 10 v 1000 各引數說...

安卓測試資料分享

android開發入門到精通,全方位學習路線 收集整理android開發所需的android sdk 開發中用到的工具 android開發教程 android設計規範,免費的設計素材等。fiddler簡介 cgi ieej transactions on electronics,informatio...

安卓效能測試(六) 溫度

獲取手機溫度的命令如下 temperature 的單位是0.1度,所以當前的手機溫度是44.4度 其中每行的定義如下 ac powered false 交流電供電 usb powered true usb供電 wireless powered false 無線供電 status 2 狀態 int型別...