Android 性能分析学习(CPU Profiler)

应用开发过程中大部分时间都是在进行需求开发,而性能分析却进行的很少。
这里将介绍通过CPU Profiler工具来进行app的性能分析。

关于 CPU Profiler

  1. 可以使用 CPU Profiler 在与应用交互时实时检查应用的 CPU 使用率和线程活动,也可以检查记录的方法跟踪数据、函数跟踪数据和系统跟踪数据的详细信息。
  2. 优化应用的 CPU 使用率能带来诸多好处,如提供更快、更顺畅的用户体验,以及延长设备电池续航时间

如何 使用 CPU Profiler

可以按照以下步骤打开 CPU Profiler:
1.依次选择 View > Tool Windows > Profiler 或 点击工具栏中的 Profile 图标 或 点击Android Studio最下方的 Profile 图标.
2.点击 CPU 时间轴上的任意位置以打开 CPU Profiler

如何 查看 CPU Profiler(预览)

CPU Profiler(预览)

1.事件时间轴:显示应用中的 Activity 在其生命周期内不断转换而经历各种不同状态的过程,并指示用户与设备的交互,包括屏幕旋转事件。

2. CPU 时间轴:显示应用的实时 CPU 使用率(以占总可用 CPU 时间的百分比表示)以及应用当前使用的线程总数。 此时间轴还会显示其他进程(如系统进程或其他应用)的 CPU 使用率,以便您可以将其与您应用的 CPU 使用率进行对比。您可以通过沿时间轴的横轴方向移动鼠标来检查历史 CPU 使用率数据

3.线程活动时间轴:列出属于应用进程的每个线程,并使用下面列出的颜色在时间轴上指示它们的活动。记录跟踪数据后,您可以从此时间轴上选择一个线程,以在跟踪数据窗格中检查其数据
绿色:表示线程处于活动状态或准备使用 CPU
黄色:表示线程处于活动状态,但它正在等待一项 I/O 操作(如磁盘或网络 I/O),然后才能完成它的工作
灰色:表示线程处于休眠状态并且没有占用任何 CPU 时间

使用CPU Profiler 记录分析数据

为进一步分析程序的方法耗时等数据,可以通过记录跟踪数据来进行分析。
如下图正在进行跟踪记录


记录跟踪数据

记录完成之后,点击 Stop,然后可以查看跟踪到到数据, 如下图:

数据记录跟踪

1.选定的时间范围:确定要在跟踪数据窗格中检查所记录时间的哪一部分。当您首次记录跟踪数据时,CPU Profiler 会自动在 CPU 时间轴上选择记录的完整长度。 要仅检查已记录的时间范围中的一部分的跟踪数据,请拖动突出显示区域的边缘。

2.时间戳:指示所记录跟踪数据的开始和结束时间(相对于分析器开始收集 CPU 使用率信息的时间), 点击时间戳可以查看到完整的记录。

3.跟踪数据窗格: 在至少有一条数据的时候,这个窗口才会显示。

4.跟踪数据窗格标签页: 包含Call ChartFlame ChartTop DownBottom Up

5.时间参考菜单: 有下列两个选项
5.1 Wall clock time: 该时间信息表示实际经过的时间
5.2 Thread time: 该时间信息表示实际经过的时间减去线程没有占用 CPU 资源的那部分时间。对于任何给定的调用,其线程时间始终小于或等于其挂钟时间。使用线程时间可以让您更好地了解线程的实际 CPU 使用率中有多少是给定方法或函数占用的

5.过滤器:按 Ctrl + F(在 Mac 上,按 Command + F 键)可以进行搜索

Call Chart 窗口检测跟踪数据

Call Chartg

Call Chart 标签页会以图形来呈现方法跟踪数据或函数跟踪数据,其中调用的时间段和时间在横轴上表示,而其被调用方则在纵轴上显示。其中:
橙色:对系统 API 的调用显示为橙色
蓝色: 对第三方 API(包括 Java 语言 API)的调用显示为蓝色
绿色: 对应用自有方法的调用显示为绿色

tips:
要跳转到某个方法或函数的源代码,请右键点击该方法或函数,然后选择 Jump to Source。在跟踪数据窗格的任意标签页中都可以执行此操作。
*
如下图是一个实际的数据分析例子:

image.png

Flame Chart 窗口检测跟踪数据

image.png

Flame Chart 标签页提供一个倒置的调用图表,用来汇总完全相同的调用堆栈。也就是说,将具有相同调用方顺序的完全相同的方法或函数收集起来,并在火焰图中将它们表示为一个较长的横条(而不是将它们显示为多个较短的横条,如调用图表中所示)。这样更方便您查看哪些方法或函数消耗的时间最多

** “Top Down”和“Bottom Up” 窗口检测跟踪数据

image.png

Top DowBottom Up 显示的是一个调用列表, 函数的调用方 和 被调用方在树的节点位置不同(如图中所示:A 调用 B, A 调用 D, B调用C , D调用D、B, B调用C)

跟踪数据窗格标签页中具体的详细介绍也可以查看:
CPU Profiler 检查跟踪数据

使用 Debug API 记录 CPU 活动

使用 Debug API,可以让应用能够在 CPU Profiler 中开始和停止记录 CPU 活动。
Debug.startMethodTracingSampling(): 开始记录CPU活动
Debug.stopMethodTracing(): 停止记录CPU活动
数据跟踪结束后,*.trace 文件会保存在 ~/sdcard/ Android/data/[包名]/files 目录下。

可将文件放入Android Studio中进行分析。

在应用启动过程中记录 CPU 活动

请执行以下操作:

- 1.依次选择 Run > Edit Configurations。
- 2.在 Profiling 标签中,勾选 Start recording a method trace on startup 旁边的复选框。
- 3.从菜单中选择 CPU 记录配置。
- 4.点击 Apply。
- 5.依次选择 Run > Profile,将您的应用部署到搭载 Android 8.0(API 级别 26)或更高版本的设备上。

END!

参考:
Inspect CPU activity with CPU Profiler

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容