Android 性能优化 Systrace使用

前言

汇总System trace使用,学习下音视频如何用Systrace查看,有心得了会贴上来。

Systrace使用

最新版本sdkplatform不包含system trace了,在这里下载旧版即可: https://dl.google.com/android/repository/platform-tools_r33.0.0-darwin.zip

下载完成后即可使用如下命令执行:
./systrace.py -t 10 sched freq idle am wm gfx view sync binder_driver irq workq input -a <package_name>

Options选项

  • -a <package_name>:
    这个选项可以开启指定包名App中自定义Trace Label的Trace功能。也就是说,如果你在代码中使用了Trace.beginSection("tag"), Trace.endSection;默认情况下,你的这些代码是不会生效的,因此,这个选项一定要开启!
  • -t N:用来指定Trace运行的时间,取决于你需要分析过程的时间;还是那句话,在需要的时候尽可能缩小时间;当然,绝对不要把时间设的太短导致你操作没完Trace就跑完了,这样会出现Did not finish 的标签,分析数据就基本无效了。
    -b : 指定 buffer 大小 (一般情况下,默认的 Buffer 是够用的,如果你要抓很长的 Trae , 那么建议调大 Buffer )
  • -o FILE:指定trace数据文件的输出路径,如果不指定就是当前目录的trace.html

查看支持的模块

systrace.py -l 可以输出手机能支持的Trace模块,而且输出还给出了此模块的用途;-l这个用来列出你分析的那个手机系统支持的Trace模块;也就是上面命令中 [category1]能使用的部分;不同版本的系统能支持的模块是不同的,一般来说,高版本的支持的模块更多。常用的模块如下:

  • sched: CPU调度的信息,非常重要;你能看到CPU在每个时间段在运行什么线程;线程调度情况,比如锁信息。
  • gfx:Graphic系统的相关信息,包括SerfaceFlinger,VSYNC消息,Texture,RenderThread等;分析卡顿非常依赖这个。
  • view: View绘制系统的相关信息,比如onMeasure,onLayout等;对分析卡顿比较有帮助。
  • am:ActivityManager调用的相关信息;用来分析Activity的启动过程比较有效。
  • dalvik: 虚拟机相关信息,比如GC停顿等。
  • binder_driver: Binder驱动的相关信息,如果你怀疑是Binder IPC的问题,不妨打开这个。
  • core_services: SystemServer中系统核心Service的相关信息,分析特定问题用。

也可以使用adb shell atrace --list_categories列出

adb shell atrace --list_categories
       gfx - Graphics
       input - Input
       view - View System
       wm - Window Manager
       am - Activity Manager
       sm - Sync Manager
       audio - Audio
       video - Video
       camera - Camera
       dalvik - Dalvik VM
       power - Power Management
       pm - Package Manager
       ss - System Server
       disk - Disk I/O
       sync - Synchronization
       binder_driver - Binder Kernel driver
       ...

代码打Lable

  • 在代码中输入Lable,开启 -a 选项后就能在html看到该Lable:
try {
    
    
    Trace.beginSection("Fragement_onCreateView");
} finally {
    
    
    Trace. endSection()
}

颜色

界面线程所在行在不同的时间显示为不同的颜色。柱形表示线程的不同状态:

灰色:正在休眠。
蓝色:可运行(它可以运行,但是调度程序尚未选择让它运行)。
绿色:正在运行(调度程序认为它正在运行)。
红色:不可中断休眠(通常在内核中处于休眠锁定状态)。可以指示 I/O 负载,在调试性能问题时非常有用。
橙色:由于 I/O 负载而不可中断休眠。

参考:
官方文档
System trace使用教程
手把手教你使用Systrace(一)

猜你喜欢

转载自blog.csdn.net/u014099894/article/details/127236492