• 性能优化-卡顿优化-tarce抓取及分析


    性能优化(卡顿分析)

    一、抓取trace的方法

    1.使用systrace抓取trace

    使用Android sdk目录下的systrace抓取tarce,路径为:Sdk\platform-tools\systrace

    :Android sdk plotform需要小于34 ,api34删除了systrace 默认使用Perfetto

    在这里插入图片描述

    需要安装python2.x版本。python环境安装完成后还需要安装pywin32和six库解决

    pip install win32com
    pip install six
    
    • 1
    • 2

    安装完成后运行

    python systrace.py -a com.test.demo:demo --time=10 -b 48000 -o systrace.html gfx view wm am freq idle binder_driver
    
    • 1

    参数解释:

    • -a 应用包名
    • –time 抓trace的时长
    • -o 生成的trace文件路径
    • -b buffer大小
    • -categories: 抓trace的模块 可以使用python systrace --list查看支持的模块

    在这里插入图片描述

    2.使用atrace抓取

    adb connect ip
    adb root
    adb remount
    adb shell 
    执行如下命令
    atrace -z -b 8000  -t 10 -a com.tcl.vod -o ./trace1 sched freq gfx irq input view wm am pm res dalvik idle ss rs workq  binder_driver binder_lock disk mmc memreclaim
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • -z 压缩
    • -b buffer大小
    • -t 抓取时长
    • -a 包名
    • -catecategories 抓trace的模块

    复现问题后,输入

    adb shell ps -A | grep atrace
    
    • 1

    确认atrace进程是否结束

    抓取完成后,取出生成的trace文件,并转换成html

    adb pull /data/local/tmp/trace_output
    systrace.py --from-file trace_output -o output.html
    
    • 1
    • 2

    需要获取root权限。

    3.使用Perfetto抓取trace

    Perfetto在Android9以上默认预制,需要开启

    开启trace

    setprop persist.traced.enable 1
    perfetto -o /data/misc/perfetto-traces/trace_log -t 120s -b 100mb -s 150mb sched freq idle am wm gfx view input
    
    • 1
    • 2
    • -o trace文件输出路径
    • -t 抓取trace的时间
    • -b buffer大小
    • -catecategories 抓trace的模块

    二、trace文件的分析

    抓取trace文件后最终都需要转为html文件后,利用工具进行分析。目前分析的工具有chrome://tracing/ 和Perfetto

    1.快捷操作

    1.1 导航操作
    导航操作作用
    w放大,[+shift]速度更快
    s缩小,[+shift]速度更快
    a左移,[+shift]速度更快
    d右移,[+shift]速度更快
    1.2 快捷操作
    常用操作作用
    f放大当前选定区域
    m标记当前选定区域
    v高亮VSync
    g切换是否显示60hz的网格线
    0恢复trace到初始态,这里是数字0而非字母o
    一般操作作用
    h切换是否显示详情
    /搜索关键字
    enter显示搜索结果,可通过← →定位搜索结果
    `显示/隐藏脚本控制台
    ?显示帮助功能

    2.chrome trace工具分析trace文件

    在这里插入图片描述

    chrome://tracing/ 打开该链接,加载第一步中抓到的trace文件,可以看到图形化加载的文件,横坐标以时间为单位,纵坐标以进程-线程的方式划分。同一进程的线程为一组放在一起。

    每个app进程,都有一个Frams行,绿色的圆点代表正常帧,即在16.6ms内完成绘制的帧。当圆点颜色为黄色或者红色,意味着该帧的绘制超过了16.6ms,即发生了丢帧。此时需要通过放大该帧分析问题。

    针对上图圈住的红帧进行分析

    在这里插入图片描述

    选中该帧按w放大后,按M可以标记该帧,可以看到该帧耗时113ms,严重超过16.6ms。

    在这里插入图片描述

    主要耗时发生在layout阶段。layout中包含了每个item的inflate(recyclerview),卡顿就发生在这儿。优化主要针对这几个耗时较长的进行优化。

    3.Prefetto分析trace文件

    https://ui.perfetto.dev/ 打开该链接打开抓到的trace文件。

    在这里插入图片描述

    基本操作步骤与上述与chorme类似

  • 相关阅读:
    戏说领域驱动设计(十)——杂谈
    Python中print函数的八重境界
    C++ 模板和 C# 泛型之间的区别【示例语法说明】
    web系统安全设计原则
    React:构建Web应用的未来
    终结痛点!超级素材中转站,轻松实现素材跨设备使用
    React组件之间的通信方式总结(下)
    聊聊 从源码来看ChatGLM-6B的模型结构
    秋招面经第八弹:网易二面-数据开发工程师
    国庆出游必看!全国5A景区最详细数据分析来啦
  • 原文地址:https://blog.csdn.net/qq_36390114/article/details/133908333