Android 性能优化 Systrace使用
Posted baiiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 负载而不可中断休眠。
以上是关于Android 性能优化 Systrace使用的主要内容,如果未能解决你的问题,请参考以下文章
Android性能优化之Systrace工具介绍 _&& Systrace生成的trace.html打开空白或者打不开的解决办法
Systrace for Linux-使用 systrace 分析 linux & android 的调度问题
Systrace for Linux-使用 systrace 分析 linux & android 的调度问题
我正在使用 systrace 对其 GPU 的 android 应用程序进行性能调查。 systrace 中的“GPU 完成”线程是啥意思