转自:https://www.jianshu.com/p/38fbf61c48c5
和你一起终身学习,这里是程序员 Android
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
一、CPU Profiler 概述
二、CPU Profiler 使用方法
三、使用CPU Profiler 记录 traces
四、CPU Profiler 记录Trace 配置方法
五、CPU Profiler 创建、编辑 、查看Trace 配置方法
六、使用 Debug API 记录CPU 活动
七、记录 app 启动时候的CPU信息
八、导出 Trace
九、导入Trace文件
十、分析 Trace
一、CPU Profiler 概述
优化应用程序的CPU使用率具有许多优势,例如,提供更快,更流畅的用户体验以及节省设备电池寿命。
您可以在与应用程序交互时使用CPU Profiler 实时检查应用程序的CPU使用率和线程使用情况,或者也可以记录的method traces,function traces, 或者 system traces的详细信息。
1.CPU Profiler 配置使用方法:
- System Trace
主要捕获应用程序与系统资源交互的trace信息。
- Method and function traces
对于应用程序进程中的每个线程,您可以找出在一段时间内执行了哪些方法(Java)或函数(C / C ++),以及每个方法或函数在执行过程中消耗的CPU资源。您还可以使用方法和函数跟踪来识别调用方 和被调用方。调用者是调用另一个方法或功能的方法或函数,被调用者是被另一个方法或功能调用的对象。您可以使用此信息来确定哪些方法或函数负责过多地调用特定的资源繁重的任务,并优化应用程序的代码以避免不必要的工作。
记录方法轨迹时,可以选择采样 记录或仪器记录。记录功能轨迹时,只能使用采样记录。
二、CPU Profiler 使用方法
1.CPU Profiler 打开方法
1.打开 Android Studio,选择 View > Tool Windows > Profiler。
打开 Profiler
或者直接点击Profiler 图标即可
直接点击Profiler 图标也可以
如果在“ 选择部署目标”对话框中出现提示,请选择将应用程序进行概要分析的设备。如果您已经通过USB连接了设备,但未在其中列出设备,请确保已 启用USB调试。
2.单击CPU时间轴中的任意位置以打开CPU Profiler
当您打开CPU Profiler时,它将立即开始显示您的应用程序的CPU使用率和线程活动。您应该看到类似于图1的内容。
图1. CPU Profiler中的时间线
如图1所示,CPU Profiler的默认视图包括以下时间轴:
-
事件时间轴:显示应用程序中的活动在其生命周期中通过不同状态过渡时的活动,并指示用户与设备的交互,包括屏幕旋转事件。有关在运行Android 7.1(API级别25)及更低版本的设备上启用事件时间轴的信息,请参阅 启用高级配置。
-
CPU时间轴:显示应用程序的实时CPU使用率(占总可用CPU时间的百分比)以及应用程序正在使用的线程总数。时间线还显示了其他进程(例如系统进程或其他应用程序)的CPU使用率,因此您可以将其与应用程序的使用率进行比较。您可以通过沿时间轴的水平轴移动鼠标来检查历史CPU使用率数据。
3.线程活动时间轴:列出属于您的应用进程的每个线程,并使用以下列出的颜色沿时间轴指示其活动。记录跟踪后,可以从该时间轴中选择一个线程以在跟踪窗格中检查其数据。
绿色:线程处于活动状态或准备使用CPU。也就是说,它处于运行或可运行状态。
黄色:线程处于活动状态,但是在完成工作之前,它正在等待I / O操作(例如磁盘或网络I / O)。
灰色:线程正在休眠,不占用任何CPU时间。当线程需要访问尚不可用的资源时,有时会发生这种情况。线程要么进入自愿睡眠状态,要么内核使线程进入睡眠状态,直到所需的资源可用为止。
该CPU还探查报告线程的CPU使用的是Android的工作室和Android平台添加到您的应用程序,如 JDWP,Profile Saver, Studio:VMStats,Studio:Perfa,和 Studio:Heartbeat(虽然,确切的名称显示在线程活动时间表可能会有所不同)。Android Studio报告此数据,以便您可以确定何时线程活动和CPU使用率实际上是由您的应用程序代码引起的。
三、使用CPU Profiler 记录 traces
要开始记录跟踪,请 从CPU Profiler顶部的下拉菜单中选择一个记录配置,然后单击Record。
图2. CPU事件探查器显示正在记录的状态,持续时间和类型。
与您的应用进行交互,然后在完成后单击“ 停止”。探查器自动选择记录的时间范围,并在跟踪窗格中显示其跟踪信息,如图3所示。如果要检查跟踪是否有其他线程,请从线程活动时间轴中选择它。
图3.记录方法跟踪后的CPU Profiler。
-
选定范围:确定要在跟踪窗格中检查的记录时间部分。首次记录跟踪时,CPU Profiler会自动在CPU时间轴中选择记录的整个长度。要仅在记录的时间范围的一部分中检查跟踪数据,请拖动突出显示区域的边缘。
-
时间戳记:指示记录的跟踪的开始和结束时间,相对于探查器开始收集CPU使用率信息的时间。要选择整个记录,请单击时间戳。
-
跟踪窗格:显示所选时间范围和线程的跟踪数据。仅在您记录了至少一条跟踪之后,才会显示此窗格。在此窗格中,您可以选择如何查看每个堆栈跟踪(使用跟踪选项卡)以及如何测量执行时间(使用时间参考下拉菜单)。
-
跟踪窗格选项卡:选择如何显示跟踪详细信息。有关每个选项的详细信息,请参阅检查跟踪。
-
时间参考菜单:选择以下一项以确定如何测量每个呼叫的时间信息:
- 挂钟时间:时间信息表示实际经过的时间。
- 线程时间:当线程不消耗CPU资源时,时序信息表示实际经过的时间减去该时间的任何部分。对于任何给定的调用,其线程时间始终小于或等于其挂钟时间。使用线程时间可以使您更好地了解给定方法或函数消耗了多少线程的实际CPU使用率。
-
过滤器:按功能,方法,类或程序包名称过滤跟踪数据。例如,如果要快速识别与特定呼叫相关的跟踪数据,请单击“ 过滤器”
或按Ctrl + F(在Mac上为Command + F),然后在搜索字段中键入名称。在“ 调用图”和“ 火焰图”选项卡中,强调包含与搜索查询匹配的调用,程序包或类的调用堆栈。在“ 自上而下”和“ 自下而上”选项卡中,这些调用堆栈的优先级高于其他跟踪结果。您还可以通过选中搜索字段旁边的相应框来启用以下选项:
- 正则表达式:要在搜索中包括正则表达式,请使用此选项。
- 区分大小写:如果您的搜索区分大小写,请使用此选项。
四、CPU Profiler 记录Trace 配置方法
在开始记录跟踪信息之前,请为要捕获的概要信息选择适当的记录配置:
-
示例Java方法:在应用程序基于Java的代码执行过程中,频繁捕获应用程序的调用堆栈。探查器比较捕获的数据集,以获取有关应用程序基于Java的代码执行的时间和资源使用情况信息。
基于采样的跟踪的一个固有问题是,如果您的应用在捕获调用堆栈之后进入一个方法,而在下一次捕获之前退出该方法,则探查器不会记录该方法调用。如果您对具有如此短生命周期的跟踪方法感兴趣,则应使用检测跟踪。
-
跟踪Java方法:在运行时对应用程序进行检测,以在每个方法调用的开始和结束时记录时间戳。收集时间戳并进行比较以生成方法跟踪数据,包括时序信息和CPU使用率。
请注意,与检测每种方法相关的开销会影响运行时性能,并可能影响性能分析数据。对于生命周期相对较短的方法,这一点甚至更为明显。此外,如果您的应用在短时间内执行大量方法,则探查器可能会很快超过其文件大小限制,并且可能无法记录任何进一步的跟踪数据。
-
示例C / C ++函数:捕获应用程序本机线程的示例跟踪。要使用此配置,您必须将应用程序部署到运行Android 8.0(API级别26)或更高版本的设备。
在内部,此配置用于
[simpleperf](https://developer.android.google.cn/ndk/guides/simpleperf.html)
跟踪应用程序的本机代码。如果要指定其他选项simpleperf
,例如对特定的设备CPU进行采样或以高精度指定采样持续时间,则可以 从命令行使用simpleperf
。 -
跟踪系统调用:捕获细粒度的详细信息,使您可以检查应用程序与系统资源的交互方式。您可以检查线程状态的确切时间和持续时间,可视化CPU瓶颈在所有内核中的位置,并添加自定义跟踪事件进行分析。在对性能问题进行故障排除时,此类信息可能至关重要。要使用此配置,您必须将应用程序部署到运行Android 7.0(API级别24)或更高版本的设备。
使用此跟踪配置时,您可以通过检测代码来在分析器时间轴中直观地标记重要的代码例程。到仪器C / C ++代码,使用 天然的跟踪API提供
trace.h
。要检测Java代码,请使用Trace
类。有关更多信息,请参阅检测 您的应用程序代码。此跟踪配置基于
systrace
。您可以 使用systrace
命令行实用程序来指定CPU Profiler中提供的选项之外的选项。所提供的其他系统级数据systrace
可以帮助您检查本机系统进程并排除丢失或延迟的帧。在运行Android 9(API级别28)或更高版本的设备上,您可以使用称为系统跟踪的系统应用来 记录设备上的系统跟踪。
五、PU Profiler 创建、编辑 、查看Trace 配置方法
您可以在“ CPU记录配置”对话框中创建,编辑和查看记录配置,可通过 从CPU Profiler顶部的记录配置下拉菜单中选择“ 编辑配置”来打开该对话框。
编辑配置 profiler
要查看现有记录配置的设置,请在“ CPU记录配置”对话框的左窗格中选择它。
要创建新的录制配置,请执行以下操作:
-
单击 对话框左上方的添加 。这将创建具有某些默认设置的新配置。
-
命名您的配置。
-
选择一种跟踪技术。
-
对于采样的记录配置,请指定采样间隔(以微秒(μs)为单位)。此值表示应用程序调用堆栈的每个样本之间的时间。您指定的间隔越短,则越快达到记录数据的文件大小限制。
-
为写入连接的设备的记录数据指定文件大小限制(以兆字节(MB)为单位)。当您停止记录时,Android Studio会解析此数据并将其显示在事件探查器窗口中。因此,如果您增加限制并记录大量数据,则Android Studio解析文件所花费的时间会更长,并且可能会变得无响应。
注意:如果您使用的是运行Android 8.0(API级别26)或更高版本的已连接设备,则跟踪数据的文件大小没有限制,并且该值将被忽略。但是,您仍然需要注意每次录制后设备会收集多少数据-Android Studio可能难以解析大型跟踪文件。例如,如果您正在记录采样间隔较短的采样跟踪,或者在应用程序在短时间内调用许多方法的同时记录检测跟踪,则将快速生成大型跟踪文件。 -
要接受更改并继续更改其他配置,请单击“ 应用”。要接受所有应用的更改并关闭对话框,请单击 确定。
六、使用 Debug API 记录CPU 活动
您可以使用Debug
API使您的应用能够启动和停止在CPU Profiler中记录CPU活动。
当您调用应用程序时,CPU Profiler开始记录,而当您调用应用程序时startMethodTracing(String tracePath)
,CPU Profiler停止记录stopMethodTracing()
。在记录使用此API触发的CPU活动时,CPU Profiler将Debug API显示 为活动的CPU记录配置。
要使用Debug
API 控制对CPU活动的记录,请将您检测的应用程序部署到运行Android 8.0(API级别26)或更高版本的设备。
重要说明:该DebugAPI旨在与其他用于启动和停止CPU活动记录的方式分开使用,例如CPU Profiler图形用户界面中的按钮以及用于在应用程序启动时自动记录的记录配置中的设置。
有关更多信息,请参阅 通过检测您的应用程序生成跟踪日志。
七、记录 app 启动时候的CPU信息
要在应用启动期间自动开始自动记录CPU活动,请执行以下操作:
选择运行>编辑配置。
在“ 分析”选项卡中,选中“ 启动时开始记录方法跟踪 ”旁边的框。
从菜单中选择一个CPU记录配置。
点击应用。
选择“运行”>“配置文件”,将您的应用程序部署到运行Android 8.0(API级别26)或更高版本的设备。
八、导出 Trace
使用CPU事件探查器记录CPU活动后,可以将数据导出为.trace文件以与他人共享或以后检查。
要从CPU时间轴导出跟踪文件,请执行以下操作:
在CPU时间轴中,右键单击要导出的记录的方法跟踪或系统跟踪。
从菜单中选择“ 导出跟踪 ”。
浏览到要保存文件的位置,指定文件名,然后单击“ 确定”。
要从“ 会话”窗格中导出跟踪文件,请执行以下操作:
在“ 会话”窗格中,右键单击要导出的记录的跟踪。
单击会话条目右侧的“ 导出方法跟踪”或“ 导出系统跟踪”按钮。
浏览到要保存文件的位置,指定文件名,然后单击“ 确定”。
导出 Trace
九、导入Trace文件
您可以导入.trace
使用Debug
API或CPU Profiler 创建的文件 。
通过单击“探查器”的“ 会话”窗格中的“ ****启动新探查器会话 ”,然后选择“ 从文件加载”,导入跟踪文件。
您可以像直接在CPU Profiler中捕获的跟踪一样,在CPU Profiler中检查导入的跟踪,但以下情况除外:
- CPU活动未沿CPU时间轴表示。
- 线程活动时间线仅指示每个线程在何处可以使用跟踪数据,而不指示实际的线程状态(例如运行,等待或休眠)。
十、分析 Trace
CPU Profiler中的跟踪窗格提供了几个选项卡,使您可以选择如何从记录的跟踪中查看信息。
对于方法迹线和功能迹线,可以从“ 调用图”,“ 火焰图”,“自上而下 ”和“ 自下而上”选项卡中进行选择。对于系统跟踪,可以从“ 跟踪事件”,“ 火焰图”,“自上而下 ”和“ 自下而上”选项卡中进行选择。
“ 调用图”,“ 火焰图”,“自上而下 ”和“ 自下而上”选项卡
提示:检查“ 呼叫图”或“ 火焰图”时,请按住Control键(在Mac上为Command)并滚动鼠标滚轮来放大和缩小。
作者:程序员Android1
链接:https://www.jianshu.com/p/38fbf61c48c5
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。