分析HarmonyOS应用/服务的CPU活动性能

CPU Profiler 性能分析是用来分析CPU性能瓶颈的工具,可以实时查看应用/服务的CPU使用率和线程活动,也可以查看记录的方法跟踪数据、方法采样数据和系统跟踪数据的详情。基于CPU性能分析,您可以了解在一段时间内执行了哪些方法,以及每个方法在其执行期间消耗的CPU资源,可以有针对性的优化应用/服务的CPU使用率,提供更快、更顺畅的用户体验,以及延长设备电池续航时间。

录制CPU活动数据

录制HarmonyOS应用或服务的CPU活动数据,需要将待分析的应用或服务运行起来,当前仅支持本地真机。

NOTE

录制JS的CPU活动数据,应用/服务只能以Debug模式运行。

1.在DevEco Studio菜单栏上单击View > Tool Windows > Profiler,或者在DevEco Studio底部工具栏单击Profiler按钮,打开Profiler分析器。在Profiler分析器的SESSIONS窗口,单击+按钮,在弹出下拉列表中先选择设备,然后选择待分析的进程。

2.在实时变化视图,单击CPU区域,进入CPU详情页面。

3.在CPU详情页面选择CPU数据的录制模式,然后单击Record,开始录制CPU活动数据。

开始录制后,会在SESSIONS窗口的当前会话下生成应用/服务的数据记录。CPU数据的录制模式分为以下几种:

  • 对Java 方法采样(Sample Java Methods):在应用/服务的Java代码执行期间,定期捕获应用/服务的调用堆栈。分析器会比较捕获的数据集,以推导与应用/服务的 Java 代码执行有关的时间和资源使用信息。
  • 跟踪Java 方法(Trace JavaMethods):在运行时检测应用/服务,在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和CPU使用率。
  • 跟踪JS 方法(Trace JSMethods):在运行时检测应用/服务,在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和CPU使用率。
  • 跟踪系统调用(Trace SystemCalls):捕获应用/服务运行的细节,以便您检查应用/服务与系统资源的交互情况。您可以检查线程状态的确切时间和持续时间、直观地查看所有内核的CPU瓶颈在何处,并添加需分析的自定义跟踪事件。

除了使用以上几种数据录制模式外,还可以单击模式选择下拉列表中的Edit Configurations自定义数据录制模式。

4.单击CPU详情页面的上部或下部的Stop 结束当前录制。CPU录制完成后,可以在SESSIONS 窗口选中该数据记录,单击右键或导出按钮将数据记录导出,方便分享和以后的查看

查看CPU跟踪数据

CPU活动数据录制后,可以在SESSIONS 窗口单击要查看的数据记录,或单击+按钮,在下拉列表中选择Load from file ,导入数据记录文件。

1:单击数据记录,可查看数据详情。

2:CPU在录制时间内的使用情况。

3:IO资源占用情况。

4:Interaction:在应用/服务的生命周期内,用户与应用/服务互动的事件。

5:Threads:线程活动状态,可以查看线程是处于运行状态还是休眠状态,选择具体的线程,可以在右侧的Analysis窗口查看线程的详细信息。

6:Analysis窗口,选择All threads可以看到全部线程的信息。选择具体的某个线程,可以查看该线程或方法调用的详细数据。

7:Time reference菜单,选择以下选项之一,以确定如何测量每次调用的时间信息(仅跟踪 Java 方法中支持):

  • Wall clock time:该时间信息表示进程从开始运行到结束,时钟实际走过的时间。
  • Thread time:该时间信息表示实际经过的时间减去线程没有占用CPU资源的那部分时间。对于任何给定的调用,其线程时间始终小于或等于其Wall clocktime。使用线程时间可以让您更好地了解线程的实际CPU 使用率中有多少是给定方法或函数占用的。

8:过滤器,按函数、方法、类或软件包名称过滤跟踪数据。在Flame chart 标签页中,会突出显示包含符合搜索查询条件的调用、软件包或类的调用堆栈。在Top down 和Bottom up标签页中,这些调用堆栈优先于其他跟踪结果。还可以通过勾选搜索字段旁边的相应方框来启用以下选项:

Regex:搜索中包含正则表达式。

Match case:搜索区分大小写。

对于方法跟踪数据,可以直接在Threads 时间轴中查看Call Chart,也可以从Analysis 窗口查看Flame Chart、Top Down 和 Bottom Up标签页。对于系统调用跟踪数据,可以在Threads时间轴查看Trace Events,也可以从Analysis窗口查看 Flame Chart、Top Down 和 Bottom Up 标签页。

使用 Call Chart 检查跟踪数据

Call Chart直接在Threads 时间轴中查看 ,将鼠标指针悬停在某个方法上,以图形方式来呈现方法跟踪数据或函数跟踪数据。对系统API 的调用显示为橙色,对应用/服务自有方法的调用显示为绿色,对第三方API(包括Java 语言API)的调用显示为蓝色。

使用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时间也可表示为在该记录期间占线程总时间的百分比。下表说明了如何解读顶部节点及其调用方(子节点)的时间信息。

使用Trace Events查看系统事件

检查系统跟踪数据时,您可以在Threads 时间轴中检查Trace Events,以查看每个线程上所发生事件的详细信息。将鼠标指针悬停在某个事件上,可查看该事件的名称以及在每种状态下所花费的时间。单击事件可在Analysis 窗格中查看详情。

CPU cores 窗格显示每个核心上安排的线程ability。将鼠标指针悬停在某个线程ability上,可查看该核心在该特定时间在哪个线程上运行。

要想成为一名合格的鸿蒙高级开发工程师,以上知识点是必须要掌握的,除此之外,还需要掌握一些鸿蒙应用开发相关的一些技术

为了节省大家一些查找的时间,这边联合几位行业大佬,为大家准备了一份《鸿蒙全栈技术 实战项目驱动式教学》的学习导图,从入门到进阶再到南北向开发实战的一整套完整体系,想要学习了解更多鸿蒙开发的相关知识可以借鉴:《一小时快速认识HarmonyOShttps://docs.qq.com/doc/DZVVZR2lzcnJZSFlO

除了上面整理的思维导图以外,这里还特别整理的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:

一、入门必看

1.应用开发导读(ArkTS)

2.......

二、HarmonyOS 概念

1.系统定义

2.技术架构

3.技术特性

4.系统安全

5...

三、如何快速入门?《鸿蒙HarmonyOS分布式项目实战https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念

2.构建第一个ArkTS应用

3.构建第一个JS应用

4.......

四、开发基础知识

1.应用基础知识

2.配置文件

3.应用数据管理

4.应用安全管理

5.应用隐私保护

6.三方应用调用管控机制

7.资源分类与访问

8.学习ArkTS语言

9.......

五、基于ArkTS 开发

1.Ability开发

2.UI开发

3.公共事件与通知

4.窗口管理

5.媒体

6.安全

7.网络与链接

8.电话服务

9.数据管理

10.后台任务(Background Task)管理

11.设备管理

12.设备使用信息统计

13.DFX

14.国际化开发

15.折叠屏系列

16.......

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙4.0源码开发架构分析pdfhttps://docs.qq.com/doc/DZXB5WmVIVHRwS0pY

相关推荐
AaVictory.36 分钟前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
dawn1 小时前
鸿蒙ArkTS中的获取网络数据
华为·harmonyos
桃花键神1 小时前
鸿蒙5.0时代:原生鸿蒙应用市场引领开发者服务新篇章
华为·harmonyos
鸿蒙自习室1 小时前
鸿蒙多线程开发——并发模型对比(Actor与内存共享)
华为·harmonyos
似霰2 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
大风起兮云飞扬丶2 小时前
Android——网络请求
android
干一行,爱一行2 小时前
android camera data -> surface 显示
android
断墨先生2 小时前
uniapp—android原生插件开发(3Android真机调试)
android·uni-app
JavaPub-rodert2 小时前
鸿蒙生态崛起:开发者的机遇与挑战
华为·harmonyos
无极程序员3 小时前
PHP常量
android·ide·android studio