Android 性能分析记录
TraceView界面信息介绍。
TraceView界面包括时间面板和方法面板
(1) 时间面板(Timeline Panel)
时间面板展示了每个线程的执行情况,其中的[1]main即为ui主线程。
移动到某个位置可以查看该点对应的方法的执行信息,点击方法面板则会选中相应的方法。
可以左键按住不放选中区域放大局部精细查看,不同方法用不同颜色标注
(2) 方法面板(Profile Panel)
方法面板展示了所有方法的执行情况,点击某个方法可以查看在对应线程上的执行时间区域,并会显示其父方法及子方法。
每个方法包括如下信息列,可点击某列进行排序,从而确定产生性能问题的函数:
Systrace 性能分析的工具
Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等
你可以通过python systrace.py -h 来查看systrace 的使用帮助
- Usage: systrace.py [options] [category1 [category2 ...]]
- Example: systrace.py -b 32768 -t 15 gfx input view sched freq
- Options:
- -h, --help show this help message and exit
- -o FILE write HTML to FILE
- -t N, --time=N trace for N seconds
- -b N, --buf-size=N use a trace buffer size of N KB
- -k KFUNCS, --ktrace=KFUNCS
- specify a comma-separated list of kernel functions to
- trace
- -l, --list-categories
- list the available categories and exit
- -a APP_NAME, --app=APP_NAME
- enable application-level tracing for comma-separated
- list of app cmdlines
- --link-assets link to original CSS or JS resources instead of
- embedding them
- --from-file=FROM_FILE
- read the trace from a file (compressed) rather than
- running a live trace
- --asset-dir=ASSET_DIR
- -e DEVICE_SERIAL, --serial=DEVICE_SERIAL
- adb device serial number
图中所示的trace.html页面内容和Traceview的Timeline Panel非常类似。图中包含的内容如下:
(1). 由于在systrace.py中指定了-f -l和-i参数,Systrace将生成CPU频率、负载和状态相关的信息。它们为图中第一个红框所示。由于笔者所测手机CPU为双核,故图中有CPU0和CPU1之分。为行文方便,用CPU N来指代CPU的某个核。
“CPU N“所示行对应于整个测试时间内,某个核上运行的进程信息。
“CPU N C-State“所示行为整个测试时间内,某个CPU状态的变化。C-State取值见下表。
“CPU N Clock Frequency”所示行展示了某个CPU运行的频率。通过点击这一行的色块可以查看某个时间点上CPU N的运行频率。
“cpufreq”:该行所示内容和CPU交互式频率调节器(Interactive Governor)的工作有关。交互式CPU调节器驱动添加了对CPU频率调节事件的跟踪。感兴趣的读者不妨阅读kernel中的 include/trace/events/cpufreq_interactive.h文件以了解更多的信息。
(1). 由于在systrace.py中指定了-f -l和-i参数,Systrace将生成CPU频率、负载和状态相关的信息。它们为图中第一个红框所示。由于笔者所测手机CPU为双核,故图中有CPU0和CPU1之分。为行文方便,用CPU N来指代CPU的某个核。
“CPU N“所示行对应于整个测试时间内,某个核上运行的进程信息。
“CPU N C-State“所示行为整个测试时间内,某个CPU状态的变化。C-State取值见下表。
“CPU N Clock Frequency”所示行展示了某个CPU运行的频率。通过点击这一行的色块可以查看某个时间点上CPU N的运行频率。
“cpufreq”:该行所示内容和CPU交互式频率调节器(Interactive Governor)的工作有关。交互式CPU调节器驱动添加了对CPU频率调节事件的跟踪。感兴趣的读者不妨阅读kernel中的 include/trace/events/cpufreq_interactive.h文件以了解更多的信息。
(2). VSYNC:显示了每次Tick Tack的时间大概都在16ms左右
(3). 图中 com.example.systracedemo/com.example.systracedemo.MainActivity所示为应用程序占用显示Buffer的Tick-Tack情况。如果使用时间超过16ms,将导致界面显示迟滞等现象。
(4). 图中SurfaceFlinger行展示了其函数调用的CPU耗时情况(如箭头1所指,SurfaceFlinger中的onMessageReceived函数的运行信息)。
(5). 图中最下部的方框中,详细显示了当前鼠标在时间线中选择的部分(即SurfaceFlinger中的onMessageReceived)的详细信息。