OpenHarmony DevEco Studio使用指南-性能分析
Profiler性能分析器介绍
应用或服务的性能较差时,可能表现为响应速度慢、动画播放不流畅、卡顿、崩溃或极其耗电。为了避免出现这些性能问题,需要通过一系列性能分析工具来确定应用或服务对哪方面资源(例如 CPU、内存)的使用率比较高,时间耗在什么地方。DevEco Studio集成Profiler性能分析器,通过Profiler性能分析器提供实时性能分析数据,并通过图表形式进行呈现,方便开发者及时了解应用/服务的CPU占用、内存的分配占用的具体数据。
在DevEco Studio菜单栏上单击View > Tool Windows >Profiler,或者在DevEco Studio底部工具栏单击
,打开Profiler性能分析器,如下图所示:
- 会话窗格,单击查看会话窗格的会话。或单击+按钮,在弹出的下拉菜单中,选择一个进程创建一个新的会话。或选择导入文件,查看历史记录,请注意,导入的历史记录只能导入OpenHarmony设备的跟踪记录。
- 缩放按钮用于对时间轴进行缩放。
- CPU、内存数据实时变化视图,单击对应的区域,可进入详情视图。
分析OpenHarmony应用/服务的CPU活动性能
CPU Profiler 性能分析是用来分析CPU性能瓶颈的工具,可以实时查看应用/服务的 CPU 使用率和线程活动,也可以查看记录应用跟踪数据和系统跟踪数据的详情。基于CPU性能分析,您可以了解在一段时间内执行了哪些方法,以及每个方法在其执行期间消耗的 CPU 资源,可以有针对性的优化应用/服务的 CPU 使用率,提供更快、更顺畅的用户体验,以及延长设备电池续航时间。
录制CPU活动数据
录制OpenHarmony应用或服务的CPU活动数据,需要将待分析的应用或服务在设备上运行起来。
- 在DevEco Studio菜单栏上单击View>Tool Windows>Profiler,或者在DevEco Studio底部工具栏单击Profiler按钮,打开Profiler分析器。在Profiler分析器的SESSIONS窗口,单击+按钮,在弹出下拉列表中先选择设备,然后选择待分析的进程。
- 在实时变化视图,单击CPU区域,进入CPU详情页面。
- 在CPU详情页面选择CPU数据的录制模式,然后单击Record按钮,开始录制CPU活动数据。开始录制后,会在SESSIONS窗口的当前会话下生成应用/服务的数据记录。CPU数据的录制模式分为以下几种:
- 对Perf数据采样(Sample Perf Data):在应用/服务代码执行期间,定期捕获应用/服务的调用堆栈。分析器会比较捕获的数据集,以推导与应用/服务的代码执行有关的时间和资源使用信息。
- 跟踪APP调用(Trace APP Calls):在运行时检测应用/服务,在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和 CPU 使用率。
- 要结束录制,单击CPU详情页面的Stop结束当前录制。CPU录制完成后,可以在SESSIONS窗口选中该数据记录,单击导出按钮将数据记录导出,方便分享和以后的查看。
查看CPU跟踪数据
CPU活动数据录制后,可以在SESSIONS窗口单击要查看的数据记录,或单击+按钮,在下拉列表中选择Load from file,导入数据记录文件。
- 单击数据记录,可查看数据详情。
- Threads:线程活动状态,可以查看线程是处于运行状态还是休眠状态,选择具体的线程,可以在右侧的Analysis窗口查看线程的详细信息。
- Analysis窗口,选择All threads可以看到全部线程的信息。选择具体的某个线程,可以查看该线程或方法调用的详细数据。
使用Flame Chart检查跟踪数据
Flame Chart 标签页提供一个调用图表,用来汇总完全相同的调用堆栈。
使用Top Down检查跟踪数据
Top Down 标签显示一个调用列表,在该列表中展开方法或函数节点会显示它的被调用方。与 Flame chart 标签页类似,“Top Down”树也汇总了具有相同调用堆栈的完全相同的方法的跟踪信息。也就是说,Flame chart 标签页提供了 Top down 标签页的图形表示方式。
Top Down 标签提供以下信息来帮助说明在每个调用上所花的 CPU 时间(时间也可表示为在选定范围内占线程总时间的百分比):
Self:方法或函数调用在执行自己的代码(而非被调用方的代码)上所花的时间。
Children:方法或函数调用在执行它的被调用方(而非自己的代码)上所花的时间。
Total:方法的 Self 时间和 Children 时间的总和。这表示应用/服务在执行调用时所用的总时间。
使用Bottom Up检查跟踪数据
Bottom Up 标签页显示一个调用列表,在该列表中展开函数或方法的节点会显示它的调用方。Bottom Up 标签页用于按照占用的 CPU 时间由多到少(或由少到多)的顺序对方法或函数排序。您可以检查每个节点以确定哪些调用方在调用这些方法或函数上所花的 CPU 时间最多。与“Top Down”树相比,“Bottom Up”树中每个方法或函数的时间信息参照的是每个树顶部的方法(顶部节点)。CPU 时间也可表示为在该记录期间占线程总时间的百分比。下表说明了如何解读顶部节点及其调用方(子节点)的时间信息。
Item | Self | Children | Total |
“Bottom Up”树顶部的方法或函数(顶部节点) | 表示方法或函数在执行自己的代码(而非被调用方的代码)上所花的总时间。与“Top Down”树相比,此时间信息表示在记录的持续时间内对此方法或函数的所有调用时间的总和。 | 表示方法或函数在执行它的被调用方(而非自己的代码)上所花的总时间。与“Top Down”树相比,此时间信息表示在记录的持续时间内对此方法或函数的被调用方的所有调用时间的总和。 | Self 时间和 Children 时间的总和。 |
调用方(子节点) | 表示被调用方在由调用方调用时的总 Self 时间。 | 表示被调用方在由调用方调用时的总 Children 时间。 | Self 时间和 Children 时间的总和。 |
分析OpenHarmony应用/服务的内存使用
Profiler性能分析器支持内存使用分析。应用/服务运行时,Profiler的内存分析器实时显示内存使用情况,帮助开发者识别可能会导致应用卡顿、冻结的内存泄漏和内存抖动。
查看OpenHarmony应用/服务内存实时变化
查看OpenHarmony应用或服务的内存使用数据,需要将待分析的应用或服务在设备上运行起来。
- 在DevEco Studio菜单栏上单击View>Tool Windows>Profiler,或者在DevEco Studio底部工具栏单击Profiler按钮,打开Profiler性能分析器。在Profiler分析器的SESSIONS窗口,单击+按钮,在弹出下拉列表中先选择设备,然后选择待分析的进程。
- 在实时变化视图,单击内存区域,进入内存详情页面。
内存详情页按内存类别实时显示内存变化视图,包括:
- Native:C或C++代码所占用的内存;
- Graphics:图形缓冲区队列向屏幕显示像素所使用的内存。注意这是与CPU共享的内存,不是GPU专用内存;
- Stack:应用/服务中的原生堆栈和Java堆栈使用的内存;
- Code:应用/服务用于处理代码和资源的内存;
- Others:系统不确定如何分类的内存;