APP性能優(yōu)化-流暢度

APP性能優(yōu)化-Memory
APP性能優(yōu)化-穩(wěn)定性(crash率)
APP性能優(yōu)化-包體壓縮
APP性能優(yōu)化-CPU
APP性能優(yōu)化-UI
APP性能優(yōu)化-流暢度

APP流暢度是給用戶(hù)最直觀的體驗(yàn),用戶(hù)體驗(yàn)下降輕則吐槽、投訴,重則直接卸載。最直觀的方式體現(xiàn)流暢度就是在開(kāi)發(fā)者選項(xiàng)->GPU呈現(xiàn)模式->顯示條形圖

image.png

APP在運(yùn)行過(guò)程中如果柱狀圖基本都在臨界線以下說(shuō)明基本流暢能。部分公司在KPI考核時(shí)總需要一些數(shù)據(jù)來(lái)說(shuō)明自己的APP比競(jìng)品好,好多少?需要具體的數(shù)據(jù)來(lái)支撐,總不能貼幾張條形圖吧...如果能獲取到條形圖的原始數(shù)據(jù)再做成報(bào)表上報(bào)給老板豈不美哉。

dumpsys gfxinfo

獲取條形圖原始數(shù)據(jù)需要將GPU呈現(xiàn)模式改為adb shell dumpsys gfxinfo

image.png

cmd中運(yùn)行 adb shell dumpsys gfxinfo < PACKAGE_NAME >將得到以下原始數(shù)據(jù)

Total frames rendered: 203073
Janky frames: 3995 (1.97%)
50th percentile: 5ms
90th percentile: 7ms
95th percentile: 8ms
99th percentile: 21ms
Number Missed Vsync: 239
Number High input latency: 101
Number Slow UI thread: 2351
Number Slow bitmap uploads: 113
Number Slow issue draw commands: 1329
HISTOGRAM: 5ms=128270 6ms=38516 7ms=20516 8ms=5660 9ms=2053 10ms=1047 11ms=658 12ms=515 13ms=520 14ms=535 15ms=465 16ms=463 17ms=504 18ms=452 19ms=406 20ms=425 21ms=348 22ms=209 23ms=169 24ms=156 25ms=111 26ms=87 27ms=54 28ms=46 29ms=50 30ms=40 31ms=37 32ms=64 34ms=65 36ms=67 38ms=45 40ms=40 42ms=30 44ms=30 46ms=21 48ms=34 53ms=24 57ms=25 61ms=14 65ms=16 69ms=14 73ms=11 77ms=11 81ms=17 85ms=9 89ms=17 93ms=26 97ms=22 101ms=30 105ms=26 109ms=26 113ms=22 117ms=14 121ms=7 125ms=4 129ms=2 133ms=1 150ms=14 200ms=5 250ms=5 300ms=1 350ms=1 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0 1050ms=0 1100ms=0 1150ms=0 1200ms=0 1250ms=0 1300ms=0 1350ms=0 1400ms=0 1450ms=0 1500ms=0 1550ms=0 1600ms=0 1650ms=0 1700ms=0 1750ms=0 1800ms=0 1850ms=0 1900ms=0 1950ms=0 2000ms=0 2050ms=0 2100ms=0 2150ms=0 2200ms=0 2250ms=0 2300ms=0 2350ms=0 2400ms=0 2450ms=0 2500ms=0 2550ms=0 2600ms=0 2650ms=0 2700ms=0 2750ms=1 2800ms=0 2850ms=0 2900ms=0 2950ms=0 3000ms=0 3050ms=0 3100ms=0 3150ms=0 3200ms=0 3250ms=0 3300ms=0 3350ms=0 3400ms=0 3450ms=0 3500ms=0 3550ms=0 3600ms=0 3650ms=0 3700ms=0 3750ms=0 3800ms=0 3850ms=0 3900ms=0 3950ms=0 4000ms=0 4050ms=0 4100ms=0 4150ms=0 4200ms=0 4250ms=0 4300ms=0 4350ms=0 4400ms=0 4450ms=0 4500ms=0 4550ms=0 4600ms=0 4650ms=0 4700ms=0 4750ms=0 4800ms=0 4850ms=0 4900ms=0 4950ms=0
Caches:
Current memory usage / total memory usage (bytes):
  TextureCache          5617568 / 49766400
  Layers total          0 (numLayers = 0)
  RenderBufferCache           0 /  4147200
  GradientCache           24576 /  1048576
  PathCache                   0 /  8294400
  TessellationCache           0 /  1048576
  TextDropShadowCache         0 /  4147200
  PatchCache               5056 /   131072
  FontRenderer A8       1277663 /  1478656
    A8   texture 0      1277663 /  1478656
  FontRenderer RGBA       91020 /  5914624
    RGBA texture 0        91020 /  5914624
  FontRenderer total    1368683 /  7393280
Other:
  FboCache                    0 /        0
Total memory usage:
  13040480 bytes, 12.44 MB


Pipeline=FrameBuilder
Profile data in ms:
        Draw    Prepare Process Execute
        7.63    0.88    7.05    2.64
        8.67    0.55    5.25    1.44
        5.96    0.74    5.66    2.24
        20.69   0.48    3.29    1.34
        4.22    0.45    2.90    1.04
        3.33    0.27    2.42    1.03
數(shù)據(jù)字段說(shuō)明
  • Total frames rendered: 緩存中收集的幀數(shù)
  • Janky frames: 所有統(tǒng)計(jì)幀中耗時(shí)超過(guò)了16ms的幀數(shù)以及卡頓比例
  • Number Missed Vsync: 垂直同步失敗的幀
  • Number High input latency: 處理input時(shí)間超時(shí)的幀數(shù)
  • Number Slow UI thread: 因UI線程上的工作導(dǎo)致超時(shí)的幀數(shù)
  • Number Slow bitmap uploads: 因bitmap的加載耗時(shí)的幀數(shù)
  • Number Slow issue draw commands: 因繪制導(dǎo)致耗時(shí)的幀數(shù)
  • HISTOGRAM: 5ms=128270 6ms=38516,條形圖原始數(shù)據(jù)

Draw、Prepare 、Process 、Execute為每幀在繪制各個(gè)階段(如準(zhǔn)備、構(gòu)建list、繪制)的耗時(shí),這4個(gè)值相加小于16ms表明這一幀是符合標(biāo)準(zhǔn)的。還有更具體的數(shù)據(jù)可以通過(guò)adb shell dumpsys gfxinfo < PACKAGE_NAME > framestats獲取,具體可參考:https://blog.csdn.net/cxq234843654/article/details/79914535

獲取競(jìng)品對(duì)比數(shù)據(jù)

比如說(shuō)我們有一款閱讀APP需要和騰訊閱讀做流暢度性能對(duì)比,通過(guò)以下步驟獲取對(duì)比數(shù)據(jù)
1.使用google自動(dòng)化框架UiAutomator或者其他自動(dòng)化測(cè)試框架編寫(xiě)測(cè)試用例腳本
2.運(yùn)行adb shell dumpsys gfxinfo < PACKAGE_NAME > reset,清空條形圖緩存數(shù)據(jù),確保得到的數(shù)據(jù)是當(dāng)前測(cè)試頁(yè)面的
3.執(zhí)行測(cè)試腳本,執(zhí)行結(jié)束后運(yùn)行 adb shell dumpsys gfxinfo < PACKAGE_NAME > 獲取原始數(shù)據(jù),保存
4.在同等環(huán)境下將測(cè)試對(duì)象換位騰訊閱讀,重復(fù)1、2、3步驟,獲取競(jìng)原始數(shù)據(jù)保存
5.重復(fù)多次執(zhí)行,獲取均值,降低誤差,出報(bào)表

以上只是粗略的實(shí)現(xiàn)方案,可以依葫蘆畫(huà)瓢對(duì)競(jìng)品CPU、電量等進(jìn)行比較(https://www.cnblogs.com/ailiailan/p/6397663.html);也可以借助一些第三方開(kāi)源工具來(lái)測(cè)試性能指標(biāo),如# Tencent/GT;

流暢度優(yōu)化方案

流暢度是多方面綜合優(yōu)化的最終產(chǎn)物,可參考文章開(kāi)頭APP優(yōu)化系列逐一進(jìn)行優(yōu)化

APP性能優(yōu)化-Memory
APP性能優(yōu)化-穩(wěn)定性(crash率)
APP性能優(yōu)化-包體壓縮
APP性能優(yōu)化-CPU
APP性能優(yōu)化-UI
APP性能優(yōu)化-流暢度
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容