文章目录

  • 1.systrace介绍
  • 2.systrace使用
  • 3.systrace 添加flag
  • 3.1收集应用启动的systrace数据
  • 3.2在Fragment的onViewCreate方法的前后添加flag,可以方便分析fragment的view加载耗时。
  • 3.3如果RecyclerView的滑动卡顿,在onBindViewHolder方便前后添加编辑,可以方便分析item的绘制耗时。
  • 4.分析systrace报告
  • 5.UI绘制分析


1.systrace介绍

  • systrace是一款UI性能数据采样和分析工具,它可以帮助开发者收集Android关键子系统(如surfaceflingerWindowManagerService等Framework部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观地分析系统瓶颈,改进性能。
  • Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载等在UI显示性能分析上提供很好的数据,特别是在动画播放不流畅、渲染卡等问题上。
  • Systrace工具可以跟踪、收集、检查定时信息,可以很直观地查看CPU周期消耗的具体时间,显示每个线程和进程的跟踪信息,使用不同颜色来突出问题的严重性,并提供如何解决这些问题的建议。

2.systrace使用

  • systrace这个工具在android-sdk\platform-tools\systrace 存在这个路径下面
  • systrace工具是一个python的可执行文件,所以需要使用到python的环境,本地使用的python版本2.7的版本,高版本可能有兼容问题。
在命令函执行这个就可以手机systrace数据
python systrace.py -a com.meishe.sdkdemo -b 16384 -t 10  gfx input view webview  sm freq idle sched  -o test_trace.html
  • -a :执行应用程序包名
  • -b :buffer 单位是kb 占用多少缓存
  • -t :时间,单位是毫秒
  • gfx、input、view、webview、sm、freq、idle、sched 表示手机信息的维度。在官网可以查看具体的介绍http://developer.android.com/intl/zh-cn/tools/help/systrace.html
  • -o 输出的文件名
  • 生成trace文件之后,打开google浏览器,输入:chrome://tracing,选择Perfetto_UI 这个工具很强大,需要使用新版本的google浏览器才可以,如果打不开升级浏览器,直接输入这个https://ui.perfetto.dev/是一样的。
  • Open with legacy UI 这个是老版本,直接选择生成的trace文件就可以查看。
  • Open trace file :这个是新版本,推荐使用这个。

3.systrace 添加flag

3.1收集应用启动的systrace数据

在Application的attachBaseContext方法添加ms_init flag

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(base);
    Trace.beginSection("ms_init");
}

在MainActivity onWindowFocusChanged方法结束

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus){
        Trace.endSection();
    }
}

通过筛选ms_init标记,就可以得到启动过程的systrace数据了。

3.2在Fragment的onViewCreate方法的前后添加flag,可以方便分析fragment的view加载耗时。
3.3如果RecyclerView的滑动卡顿,在onBindViewHolder方便前后添加编辑,可以方便分析item的绘制耗时。

打上标记之后,可以通过FlowEvent来找到点来计算时间。

4.分析systrace报告

  • 快捷键W-放大、S-缩小、A-左移、D-右移
  • Alerts一栏标记了性能有问题的点,单击该点可以查看详细信息,在右边侧边栏还有一个Alerts框,单击可以查看每个类型的Alerts的数量,单击某一个Alert可以看到问题的详细描述。
  • 每个应用都有一行专门显示frame,每一帧就显示为一个绿色的圆圈。当显示为黄色或者红色时,它的渲染时间超过了16.6ms(即达不到60fps的水准)。使用W键放大,看看这一帧的渲染过程中系统到底做了什么,同时它会将任何它认为性能有问题的东西都高亮警告,并提示要怎么优化
  • Choreographer 会有一帧的回调onFrame 有三次的回调:traggle double 回调的时间长还是加载的问题。这是一个性能瓶颈点的查找点。

systrace的时候 Frame、alert、时间分片、具体app的Cpu和Gpu

线上的app 反射来操作 ,反射android.os.trace 执行setAppTracingAllow 设置这个方法设置为true

5.UI绘制分析

使用systrace工具很简单,但是看懂里边的内容就需要了解view的绘制过程

android分析oom工具 安卓ui分析工具_systrace

  • Choreographer 会发送垂直同步信号 onFrame,两个信号之前是16.6毫秒。
  • 两次垂直信号之间需要处理的内容包含:
  • UI线程的输入、动画、测量、摆放、绘制、sync同步给GPU
  • RenderThread绘制线程 sync同步、execute执行一些操作、获取缓冲区、交换缓冲区
  • SurfaceFlinger Graphics 交换缓冲区的数据,进行合成展现到设备中去