APP性能优化-流畅度

APP性能优化-Memory
APP性能优化-稳定性(crash率)
APP性能优化-包体压缩
APP性能优化-CPU
APP性能优化-UI
APP性能优化-流畅度

APP流畅度是给用户最直观的体验,用户体验下降轻则吐槽、投诉,重则直接卸载。最直观的方式体现流畅度就是在开发者选项->GPU呈现模式->显示条形图

image.png

APP在运行过程中如果柱状图基本都在临界线以下说明基本流畅能。部分公司在KPI考核时总需要一些数据来说明自己的APP比竞品好,好多少?需要具体的数据来支撑,总不能贴几张条形图吧...如果能获取到条形图的原始数据再做成报表上报给老板岂不美哉。

dumpsys gfxinfo

获取条形图原始数据需要将GPU呈现模式改为adb shell dumpsys gfxinfo

image.png

cmd中运行 adb shell dumpsys gfxinfo < PACKAGE_NAME >将得到以下原始数据

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
数据字段说明
  • Total frames rendered: 缓存中收集的帧数
  • Janky frames: 所有统计帧中耗时超过了16ms的帧数以及卡顿比例
  • Number Missed Vsync: 垂直同步失败的帧
  • Number High input latency: 处理input时间超时的帧数
  • Number Slow UI thread: 因UI线程上的工作导致超时的帧数
  • Number Slow bitmap uploads: 因bitmap的加载耗时的帧数
  • Number Slow issue draw commands: 因绘制导致耗时的帧数
  • HISTOGRAM: 5ms=128270 6ms=38516,条形图原始数据

Draw、Prepare 、Process 、Execute为每帧在绘制各个阶段(如准备、构建list、绘制)的耗时,这4个值相加小于16ms表明这一帧是符合标准的。还有更具体的数据可以通过adb shell dumpsys gfxinfo < PACKAGE_NAME > framestats获取,具体可参考:https://blog.csdn.net/cxq234843654/article/details/79914535

获取竞品对比数据

比如说我们有一款阅读APP需要和腾讯阅读做流畅度性能对比,通过以下步骤获取对比数据
1.使用google自动化框架UiAutomator或者其他自动化测试框架编写测试用例脚本
2.运行adb shell dumpsys gfxinfo < PACKAGE_NAME > reset,清空条形图缓存数据,确保得到的数据是当前测试页面的
3.执行测试脚本,执行结束后运行 adb shell dumpsys gfxinfo < PACKAGE_NAME > 获取原始数据,保存
4.在同等环境下将测试对象换位腾讯阅读,重复1、2、3步骤,获取竞原始数据保存
5.重复多次执行,获取均值,降低误差,出报表

以上只是粗略的实现方案,可以依葫芦画瓢对竞品CPU、电量等进行比较(https://www.cnblogs.com/ailiailan/p/6397663.html);也可以借助一些第三方开源工具来测试性能指标,如# Tencent/GT

流畅度优化方案

流畅度是多方面综合优化的最终产物,可参考文章开头APP优化系列逐一进行优化

APP性能优化-Memory
APP性能优化-稳定性(crash率)
APP性能优化-包体压缩
APP性能优化-CPU
APP性能优化-UI
APP性能优化-流畅度
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354