目录

查看HiTraceMeter日志

通过DevEco Studio可视化界面查看

使用DevEco Studio Profiler工具可以可视化展示HiTraceMeter日志内容,分析应用或服务的CPU使用率和线程运行状态,查看指定时间段内程序在CPU上的执行耗时。具体使用指导请参考CPU活动分析。

通过命令行工具查看

  1. 根据hdc命令行工具指导,完成hdc环境准备,确保可以使用“hdc shell”命令正常连接设备。

  2. 在DevEco Studio Terminal窗口或主机命令行窗口执行“hdc shell”命令连接设备,然后在设备上执行hitrace命令,开启HiTraceMeter日志抓取服务。

    PS D:\xxx\xxx> hdc shell
    $ hitrace --trace_begin app
  3. 在设备上运行包含HiTraceMeter打点的相关程序。

  4. 使用hitrace命令行工具采集文本格式trace信息,将trace文件保存到设备/data/local/tmp/路径下,具体流程可参考快照模式捕获文本格式trace。

  5. 退出设备,进入主机,导出设备中的HiTraceMeter文本日志到当前目录(下面命令中的trace.ftrace根据采集时设置的文件名修改)。

    $ exit
    PS D:\xxx\xxx> hdc file recv /data/local/tmp/trace.ftrace ./
  6. 在HiTraceMeter文本日志中搜索打点名称等关键字,查看打点是否成功。

  7. HiTraceMeter支持文本日志的可视化分析。

    • 在DevEco Studio中导入日志进行分析。

      在DevEco Studio Profiler的会话区选择“Open File”,将HiTraceMeter文本日志导入DevEco Studio。

      具体分析可参考CPU活动分析文档。

    • 通过Smartperf_Host工具进行分析。

用户态trace格式说明

开发者可以通过hitrace命令采集用户通过HiTraceMeter接口生成的用户态trace日志,从而对应用进行性能分析。本章节将详细介绍用户态trace的格式和扩展规则,包括同步、异步和整数值跟踪等类型。每种trace的字段组成、含义及与打点入参的关系都会逐一说明,并提供具体样例供参考。

API version 19及以上版本的用户态trace格式参考当前版本用户态trace格式,API version 19以下版本的用户态trace格式参考API version 19前用户态trace格式。

[h2]当前版本用户态trace格式

同步跟踪

一条完整的同步跟踪包括一个开始trace和一个结束trace,开始trace的类型标识符固定为B,结束trace的类型标识符固定为E。

异步跟踪

一条完整的异步跟踪也同样包含一个开始trace和一个结束trace,开始trace的类型标识符固定为S,结束trace的类型标识符固定为F。

整数值跟踪

一条整数值跟踪trace仅包含一条独立trace,其中trace的类型标识符固定为C。

  1. 一条有效且完整的同步跟踪trace与异步跟踪trace,均包含一条起始trace和一条结束trace,开发者需要保证接口调用的匹配性,否则会导致性能跟踪异常问题。具体可参考ArkTS接口@ohos.hiTraceMeter (性能打点)或C++接口trace.h。
  2. 用户态trace总长度限制512字符,超过部分将被截断。

[h2]字段说明

本小节将详细介绍用户态trace的各个字段,包括字段组成、含义,字段与打点入参之间的关系,使用@ohos.hiTraceMeter (性能打点)作为参考。

[h2]字段扩展规则

API version 19及后续版本的新增字段,均以竖线+字段的方式,追加在当前用户态trace格式的末尾。

[h2]各场景trace日志样例

打点类型 开启HiTraceChain时格式 未开启HiTraceChain时格式
开始同步trace打点 B|1234|H:[a92ab94c18e1341,0,0]#tracename|M62|key1=value1,key2=value2 B|1234|H:tracename|M62|key1=value1,key2=value2
结束同步trace打点 E|1234|M62 E|1234|M62
开始异步trace打点 S|1234|H:[a92ab94c18e1341,0,0]#tracename|428|M62|appcategory01|key1=value1,key2=value2 S|1234|H:tracename|428|M62|appcategory01|key1=value1,key2=value2
结束异步trace打点 F|1234|H:[a92ab94c18e1341,0,0]#tracename|428|M62 F|1234|H:tracename|428|M62
整数trace打点 C|1234|H:[a92ab94c18e1341,0,0]#tracename|5678|M62 C|1234|H:tracename|5678|M62

上述trace日志样例中,进程号均为1234,打点内容均为tracename,级别均为M,代表COMMERCIAL级别,所属Tag集合均为62,仅包含一个Tag,对应的Tag名称为app。在开启HiTraceChain情况下,分布式跟踪链路ID为[a92ab94c18e1341,0,0]。同步trace与异步trace跟踪的自定义键值对均为key1=value1,key2=value2,其中异步trace打点的异步任务ID为428,自定义聚类名称为appcategory01。整数值跟踪的跟踪值为5678。

用户态trace总长度限制为512字符,建议内容、自定义聚类名称和自定义键值对参数总长度不超过420字符,避免被截断。

[h2]字段为空情况说明

如果用户态trace格式中间字段对应接口参数传入内容为空,用户态trace格式将保留|分隔符,如果尾部字段为空,用户态trace格式将不保留|分隔符。以hiTraceMeter.startAsyncTrace()和hiTraceMeter.startSyncTrace()接口的自定义聚类名称和自定义键值对参数为例,对应的格式参考如下。

[h2]HiTraceMeter Tag

以下为HiTraceMeter用户态Tag集合,其中Tag值为实际代码层面基于数字1的左移值。用户态Tag释义可通过hitrace命令行工具查看,其中always和commercial分别为系统侧默认常开Tag和商用版本场景定制Tag。

Tag名称 代码层常量值 Tag值
always 1ULL << 0 00
commercial 1ULL << 5 05
drm 1ULL << 6 06
security 1ULL << 7 07
animation 1ULL << 9 09
push 1ULL << 10 10
virse 1ULL << 11 11
ffrt 1ULL << 13 13
musl 1ULL << 12 12
cloud 1ULL << 14 14
deviceauth 1ULL << 15 15
commonlibrary 1ULL << 16 16
hdcd 1ULL << 17 17
hdf 1ULL << 18 18
usb 1ULL << 19 19
interconn 1ULL << 20 20
dlpcre 1ULL << 21 21
accesscontrol 1ULL << 22 22
net 1ULL << 23 23
nweb 1ULL << 24 24
huks 1ULL << 25 25
useriam 1ULL << 26 26
daudio 1ULL << 27 27
dlsm 1ULL << 28 28
filemanagement 1ULL << 29 29
ohos 1ULL << 30 30
ability 1ULL << 31 31
zcamera 1ULL << 32 32
zmedia 1ULL << 33 33
zimage 1ULL << 34 34
zaudio 1ULL << 35 35
distributeddatamgr 1ULL << 36 36
mdfs 1ULL << 37 37
graphic 1ULL << 38 38
ace 1ULL << 39 39
notification 1ULL << 40 40
misc 1ULL << 41 41
multimodalinput 1ULL << 42 42
sensors 1ULL << 43 43
msdp 1ULL << 44 44
dsoftbus 1ULL << 45 45
rpc 1ULL << 46 46
ark 1ULL << 47 47
window 1ULL << 48 48
account 1ULL << 49 49
dscreen 1ULL << 50 50
dcamera 1ULL << 51 51
dhfwk 1ULL << 52 52
gresource 1ULL << 53 53
devicemanager 1ULL << 54 54
samgr 1ULL << 55 55
power 1ULL << 56 56
dsched 1ULL << 57 57
deviceprofile 1ULL << 58 58
dinput 1ULL << 59 59
bluetooth 1ULL << 60 60
accessibility 1ULL << 61 61
app 1ULL << 62 62

[h2]HiTraceOutputLevel

trace输出级别枚举名称(C/C++) trace输出级别枚举名称(ArkTS) 枚举值 trace级别
HITRACE_LEVEL_DEBUG DEBUG 0 D
HITRACE_LEVEL_INFO INFO 1 I
HITRACE_LEVEL_CRITICAL CRITICAL 2 C
HITRACE_LEVEL_COMMERCIAL COMMERCIAL 3 M

[h2]API version 19前用户态trace格式

同步跟踪

异步跟踪

整数值跟踪

异步跟踪trace的开始trace格式与结束trace格式一样。需要注意的是 API version 19以前的版本,异步跟踪trace的异步任务ID字段、整数值跟踪的整数值字段与内容字段使用空格进行分隔。

[h2]API version 19前各场景trace日志样例

打点类型 开启HiTraceChain时格式 未开启HiTraceChain时格式
开始同步trace打点 B|1234|H:[a92ab94c18e1341,0,0]#tracename B|1234|H:tracename
结束同步trace打点 E|1234| E|1234|
开始异步trace打点 S|1234|H:[a92ab94c18e1341,0,0]#tracename 428 S|1234|H:tracename 428
结束异步trace打点 F|1234|H:[a92ab94c18e1341,0,0]#tracename 428 F|1234|H:tracename 428
整数值跟踪trace打点 C|1234|H:[a92ab94c18e1341,0,0]#tracename 5678 C|1234|H:tracename 5678

上述trace日志样例中,进程号为1234,打点内容均为tracename。开启HiTraceChain情况下,分布式跟踪链路ID为[a92ab94c18e1341,0,0]。其中异步trace打点的异步任务ID为428,整数值跟踪的跟踪值为5678。