Openharmony给我们提供了很多App性能测试和分析工具,非常方便使用,本文将介绍常见的性能分析工具。

bytarce

bytrace是开发人员用于追踪进程轨迹、查看性能的一种工具,主要对内核ftrace进行了封装和扩展,来支持用户态的打点。该工具主要分为两部分,API和命令行:

  1. bytrace向应用开发人员暴露了打点的API,开发应用过程中可以在关键代码处调用对应API进行打点;

  2. 命令行部分通过使能对应的label,来获取打点信息。通过该工具可以打开想要查看的用户态和内核label(通过命令行“bytrace -l”,查看支持的所有label),然后通过命令行进行抓取trace信息到指定文件中,下文有具体使用指导。

命令

bytrace当前支持如下命令:

Option Description
-h,--help 查看option帮助
-b n,--buffer_size n 指定n(KB)内存大小用于存取trace日志,默认2048KB
-t n,--time n trace输出的时钟类型,一般设备支持boot、global、mono、uptime、perf等,默认为boot
--trace_begin 启动抓trace
--trace_dump 将数据输出到指定位置(默认控制台)
--trace_finish 停止抓trace,并将数据输出到指定位置(默认控制台)
-l,--list_categories 输出手机能支持的trace模块
--overwrite 当缓冲区满的时候,将丢弃最新的信息。(默认丢弃最老的日志)
-o filename,--output filename 指定输出的目标文件名称
-z 抓取trace后进行压缩

以下是常用bytrace命令示例,供开发者参考:

  • 查询支持的label。

    bytrace -l

    或者

    bytrace --list_categories
  • 设置4M缓存,抓取10秒,抓取label为ability的trace信息。

    bytrace -b 4096 -t 10 --overwrite ability > /data/mytrace.ftrace
  • 设置trace的输出时钟为mono。

    bytrace --trace_clock mono  -b 4096 -t 10 --overwrite ability > /data/mytrace.ftrace
  • 抓取trace后进行压缩。

    bytrace -z  -b 4096 -t 10 --overwrite ability > /data/mytrace.ftrace

应用埋点

在应用开发中,需要查看部分代码块的运行效率,可以使用bytrace js api 增加埋点 具体可参考 OpemHarmony 官方文档关于性能打点的介绍

网址:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-hitracemeter.md

注意:

  • 该api默认使用api 标签

  • 无法在build 函数中埋点

  • 不支持跨线程打点

native埋点

如果觉得当前Native 性能trace 节点不够用,可以自行增加埋点:

  • 引入头文件:

    include "hitrace_meter.h"

    头文件地址:base/hiviewdfx/hitrace/interface/native/innerkits/include/hitrace_meter/hitrace_meter.h

  • build.gn 增加模块依赖:

    external_deps =[
       "hitrace_native:hitrace_meter"
    ]

具体使用方法可参考其他模块,主要介绍一下注意事项:

  1. 同步接口 StartTrace 和 FinishTrace 必须配对使用,FinishTrace 和前面最近的 StartTrace 进行配对。StartTrace 和 FinishTrace 函数对可以嵌套使用;

  2. 接口中的limit 参数用于限流,使用默认值即可;

  3. 异步接口StartAssyncTrace 和 FinishAsyncTrace 跟踪数据配对时,使用参数中的value 和taskid配对匹配,可以不按顺序使用,主要用于一步场景;

报告解读

报告解读可以用浏览器打开以下2个网址,将trace 文件拖入窗口即可

  1. chrome://tracing

  2. https://ui.perfetto.dev

备注:使用chrome插件需要删除 trace 文件的前2行没有#标识的文本

下面以冷启动和列表滑动举例,介绍如何查看 trace 文件

使用以下命令落盘trace 文件

hdc shell bytrace -t 5 --overwrite ability app ark ace window graphic > C:\Users\BF\Desktop\work\mytrace.ftrace

冷启动

当前冷启动的应用为设置应用,在hdc shell 命令获取进程号,可以看到,settings进程号为1618

# ps -ef | grep com.ohos.settings
20010024      1618   258 1 08:06:24 ?     00:00:01 com.ohos.settings

如图:根据左侧的进程号可以快速找到settings 进程。右侧的工具栏,可以按照图示操作视图

 

 

常见的操作说明:

  • 拖动视图:选中图示中的选项,长按鼠标左键上下左右滑动鼠标

  • 拉取时长:选中图示中的选项,长按鼠标左键选取起始点后,左右拉动鼠标

  • 缩放:长按alt 键,滑动鼠标滑轮

  • 快捷键:w键放大,s键缩小,a键左移,d键右移

缩放视图,可以查看各个阶段的耗时时长,本章暂不解析应用启动的各个阶段的trace的含义。

同样,可以获取 launcher 的进程号

# ps -ef | grep com.ohos.launcher
20010025      1413   258 0 08:00:53 ?     00:00:05 com.ohos.launcher

如图,可以看见点击桌面设置图标抬起手后的touch up 的事件分发 trace 节点,接着,调用了 StartAbility 方法。然后可以查看foundation 进程,如图:

 

# ps -ef | grep foundation
foundation     890     1 1 08:00:43 ?     00:00:24 foundation

获取 render_service 的进程号,然后查看 render_service 进程的trace 数据

# ps -ef | grep render_service
system         892     1 0 08:00:43 ?     00:00:06 render_service

同样也可以按照以上方法找到其他进程的 trace 信息

点击单个 trace条目,可以获取节点的详情信息

可以获取 stratTime, Duration 等详情

 

滑动帧率

同样以设置应用举例,测试帧率主要关注如图标记的 trace 节点

 

区域一:这个阶段主要时UI 控件的测量与绘制指令的录制

区域二:RSRenderThread 是绘制线程

区域三:render_server 进程,合成送显

上述三个区域,哪一阶段时间长,就优化哪个阶段。区域一和区域二的时间长,可以着重优化 JS 端代码,区域三的时间长需要优化hdf display gpu 的适配。如果想要帧率达到60fps ,则需要单块区域的时长不能大于16.6ms

DevEcoTesting

DevEco Testing 是 OpenHarmony 生态整机测试能力中心,为生态合作伙伴接入 OpenHarmony 生态提供专业测试服务。

DevEco Testing 下载链接:https://device.harmonyos.com/cn/develop/deveco-testing

使用安装方法请参考官网文档。

性能分析主要使用:性能功耗测试>场景化性能测试。

SmartPerf

OpenHarmony性能测试工具 SmartPerf UI版本,可采集CPU、GPU、Temperature、Power、应用RAM、FPS等指标,可使用悬浮窗口控制并实时展示测试数据以及支持本地测试报告图表展示功能。

带屏幕的设备且性能较好的设备推荐使用UI版本,性能较差或无屏幕设备请使用命令行版本

UI版本使用操作流程

1:进入shell中查看SP_daemon进程是否存在,没有则需启动SP_daemon进程(SP_daemon用于采集fps、ram等指标), 然后打开桌面的Smartperf工具

查看SP_daemon进程是否存在

C:\Users\test>hdc_std shell
# ps -ef | grep SP_daemon
root          4707     1 0 09:41:12 ?     00:00:00 SP_daemon
root          4711  4704 25 09:41:19 pts/0 00:00:00 grep SP_daemon

如果SP_daemon进程不存在启动SP_daemon

C:\Users\test>hdc_std shell
# ps -ef | grep SP_daemon
root          4720  4718 6 09:48:43 pts/0 00:00:00 grep SP_daemon
# SP_daemon
# ps -ef | grep SP_daemon
root          4723     1 0 09:48:50 ?     00:00:00 SP_daemon
root          4727  4718 5 09:48:53 pts/0 00:00:00 grep SP_daemon

2:点击桌面SmartPerf应用图标启动应用,然后点击登录,进入首页,点击开始测试页,选择被测应用,配置采集项(目前支持CPU、GPU、FPS、POWER、TEMP、RAM、截图能力、trace)。

3:选择应用后,点击开始测试、启动悬浮窗(左上角展示),会自动拉起应用,左上角悬浮窗展示start后点击即可开始,展示会变为计时状态,显示当前采集计时。(提示:单击暂停、继续任务,双击展开、关闭详情悬浮窗、点击详情悬浮窗后任意采集项会展开相应采集折线图)。

4:长按计时器,可以保存采集项数据,悬浮框消失。

5:报告列表页查看报告,原始数据可在概览页对应路径自行使用hdc命令pull出来。

其他一些说明 1)截图目录默认在/data/local/tmp/capture下。 2)Trace抓取:当帧绘制时间超过100ms以上会自动抓取trace,1min内只抓取1次,目录在/data目录下,trace文件较大,建议定期清除(文件名称为:mynewtrace[当前时间戳].ftrace)。 3)fps采集不到如何解决 方法一:后台只能存在一个被测试应用,同应用不能运行多个后台(如果有多个,需清除所有 应用,重新启动测试)。 方法二:执行hidumper -s 10如出现connect error等错误,尝试kill 掉 hidumper_servic进程,系统会自动再次拉起。

命令行版本使用操作流程

1)目前命令行版本已系统预制,可以进入shell,执行SP_daemon --help查看。

2)执行示例命令:SP_daemon -N 20 -PKG ohos.samples.ecg -c -g -t -p -f。

3)执行完毕后会在data/local/tmp生成data.csv文件,每次执行命令覆盖写入。

SmartPerf 的更多使用,参考社区文档:https://gitee.com/openharmony/developtools_profiler/blob/master/host/smartperf/client/client_ui/README_zh.md

HiDumper

HiDumper是OpenHarmony中为开发、测试人员,IDE工具提供统一的系统信息获取工具,帮助使用者分析,定位问题。

HiDumper 使用参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-dfx-hidumper.md

OpenHarmony Profiler

DevEco Studio集成Profiler性能分析器,通过Profiler性能分析器提供实时性能分析数据,并通过图表形式进行呈现,方便开发者及时了解应用/服务的CPU占用、内存的分配占用的具体数据。

在DevEco Studio菜单栏上单击View > Tool Windows >Profiler,或者在DevEco Studio底部工具栏单击Profiler,打开Profiler性能分析器,如下图所示:

区域一: 会话窗格,单击查看会话窗格的会话。或单击+按钮,在弹出的下拉菜单中,选择一个进程创建一个新的会话。或选择导入文件,查看历史记录,请注意,导入的历史记录只能导入OpenHarmony设备的跟踪记录。

区域二: 缩放按钮用于对时间轴进行缩放。

区域三: CPU、内存数据实时变化视图,单击对应的区域,可进入详情视图。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐