Systrace的使用及应用启动分析

Systrace介绍

Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统(如surfaceflinger、WindowManagerService等Framework部分关键模块、服务)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。

Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。

在Android平台中,它主要由3部分组成:

内核部分:Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用Systrace的话,必须开启kernel中和ftrace相关的模块。

数据采集部分:Android定义了一个Trace类。应用程序可利用该类把统计信息输出给ftrace。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。

数据分析工具:

Android提供一个systrace.py(python脚本文件,位于Android SDK目录/tools/systrace中,其内部将调用atrace程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集ftrace统计数据并生成一个结果网页文件供用户查看。

从本质上说,Systrace是对Linux Kernel中ftrace的封装。应用进程需要利用Android提供的Trace类来使用Systrace。Android 4.1为系统中的几个关键进程和模块都添加了Systrace功能

Systrace生成

  • 打开Android Studio下的Android Device Monitor

Systrace的使用及应用启动分析01

  • 在Android Device Monitor界面,点击Systrace

Systrace的使用及应用启动分析02

  • 选择要勾选的Tags

Systrace的使用及应用启动分析03

说明:

Destination File: 存放产生的trace文件,是一个网页文件可通过浏览器打开,使用Chrome浏览器打开

Trace duration(seconds): 设置抓取trace的时长,默认是5s

Trace Buffer Size(kb): 设置Trace缓存大小,默认是2048,默认值有时抓取不了,可增加到4096

Enable Application Traces from: 选择使能trace的应用,保持默认即可

Commonly Used Tags: 设置常用Tag,抓取相应Tag信息,保持全部勾选

Advanced Options: 高级选项,根据自己所需勾选相应模块

  • 设置完,点击OK,用户操作要抓取的场景,开始收集,收集进度框结束,抓取的trace文件保存到Destination File中

Systrace的使用及应用启动分析04

  • 用Chrome浏览器打开trace文件,在Chrome地址栏输入:chrome://tracing,然后打开

Systrace的使用及应用启动分析05

注:直接点击trace.html,会显示空白,不能显示,使用以下方式打开
  • 点击左上角load按钮进行加载,选择要加载的trace文件如下图所示

Systrace的使用及应用启动分析06

Systrace分析

以设置冷启动为例来分析

  • 打开trace文件

Systrace的使用及应用启动分析07

注:快捷键:W:放大 S:缩小 D:左移 A:右移
  • 在view option内搜索AppLaunch_dispatchPtr:up,对应在system server进程的InputDispatcher定位到点击设置APK事件的时间点,表示起始部分录到了。点击事件可能有多次,找到应用 activityStart之前的那一次为准

Systrace的使用及应用启动分析08

  • 在设置进程中找到activityStart之后的finish draw

Systrace的使用及应用启动分析09

  • 再找到这个时间点之后最近的applaunch,在system service进程的android.display定位,表示设置 launch结束。

Systrace的使用及应用启动分析10