• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 性能分析工具
2
3###  介绍
4
5本示例主要展示了使用性能分析的各个工具接口:
6
7HiTraceMeter提供系统性能打点接口。开发者通过在关键代码位置调用HiTraceMeter接口提供的API接口,能够有效跟踪进程轨迹、查看系统性能。
8
9HiTraceChain是基于云计算分布式跟踪调用链思想,在端侧业务流程(涉及跨线程、跨进程、跨设备)中的一种轻量级实现。hiTraceChain在业务控制面流程中,生成和传递唯一跟踪标识,在业务流程中输出的各类信息中(包括应用事件、系统时间、日志等)记录该跟踪标识。在调试、问题定位过程中,开发者可以通过该唯一跟踪标识将本次业务流程端到端的各类信息快速关联起来。
10
11HiChecker可以作为应用开发阶段使用的检测工具,用于检测代码运行过程中部分易忽略的问题,如应用线程出现耗时调用、应用进程中元能力资源泄露等问题。开发者可以通过日志记录或进程crash等形式查看具体问题并进行修改,提升应用的使用体验。
12
13HiDebug对外提供系统调试相关功能的接口,包括应用进程的静态堆内存(native heap)信息、应用进程内存占用PSS(Proportional Set Size)信息的获取等,也可完成虚拟机内存切片导出,虚拟机CPU Profiling采集等操作。
14
15HiCollie模块对外提供检测业务线程卡死、卡顿,以及上报卡死事件的能力。
16
17该工程中的展示的代码详细描述可查如下链接:
18
19- [使用HiTraceMeter跟踪性能(ArkTS/JS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/dfx/hitracemeter-guidelines-arkts.md)
20
21- [使用HiTraceMeter跟踪性能(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/dfx/hitracemeter-guidelines-ndk.md)
22
23- [使用HiTraceChain打点(ArkTS/JS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/dfx/hitracechain-guidelines-arkts.md)
24
25- [使用HiTraceChain打点(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/dfx/hitracechain-guidelines-ndk.md)
26
27- [使用HiChecker检测问题(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/dfx/hichecker-guidelines-arkts.md)
28
29- [使用HiDebug获取调试信息(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/dfx/hidebug-guidelines-arkts.md)
30
31- [使用HiDebug获取调试信息(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/dfx/hidebug-guidelines-ndk.md)
32
33- [使用HiCollie检测业务线程卡死卡顿问题(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/dfx/hicollie-guidelines-ndk.md)
34
35###  效果预览
36
37|                             主页                             |
38| :----------------------------------------------------------: |
39| <img src="./screenshots/Screenshot_20241217162307411.jpeg" alt="z" width = "400"> |
40
41#### 使用说明
42
43##### 1.HiTraceMeter(ArkTS)使用说明
44
451.在主界面点击按钮;DevEco Studio Terminal 中执行如下命令:
46
47```
48PS D:\xxx\xxx> hdc shell
49$ hitrace --trace_begin app
50```
51
522.执行抓取trace命令后,先在设备中点击几次HiTraceMeter ArkTS按钮,继续在Terminal窗口执行命令:
53
54```
55$ hitrace --trace_dump | grep tracing_mark_write
56$ hitrace --trace_finish
57```
58
593.成功输出如下数据即为成功:
60
61```
62<...>-3310    (-------) [005] .... 351382.921936: tracing_mark_write: S|3310|H:myTraceTest 1001
63<...>-3310    (-------) [005] .... 351382.922233: tracing_mark_write: C|3310|H:myTestCount 1
64<...>-3310    (-------) [005] .... 351382.922138: tracing_mark_write: S|3310|H:myTraceTest 1002
65<...>-3310    (-------) [005] .... 351382.922233: tracing_mark_write: C|3310|H:myTestCount 2
66<...>-3310    (-------) [005] .... 351382.922165: tracing_mark_write: F|3310|H:myTestCount 1001
67<...>-3310    (-------) [005] .... 351382.922175: tracing_mark_write: F|3310|H:myTestCount 1002
68```
69
70##### 2.HiTraceMeter(C++)使用说明
71
721.将编译好的hap包推送到设备上安装,在DevEco Studio Terminal中执行命令:
73
74```
75PS D:\xxx\xxx> hdc shell
76$ hitrace --trace_begin app
77```
78
792.执行抓取trace命令后,先在设备中点击几次HiTraceMeter C++按钮,然后在Terminal窗口执行命令:
80
81```
82$ hitrace --trace_dump | grep tracing_mark_write
83```
84
853.成功输出如下数据即为成功:
86
87```
88<...>-2477    (-------) [001] ....   396.427165: tracing_mark_write: S|2477|H:hitraceTest 123
89<...>-2477    (-------) [001] ....   396.427196: tracing_mark_write: F|2477|H:hitraceTest 123
90```
91
92##### 3.HiTraceChain(ArkTS)使用说明
93
941.在主界面点击HiTraceChain ArkTS按钮,然后切换到"Log"窗口,日志过滤选择"No filters",搜索内容设置为"HiTraceBegin"。查找输出如下的数据:
95
96```
97[a92ab145c9421d5, 0, 0] HiTraceBegin name:Write a new app event flags:0x01.
98```
99
1002.再搜索形如"[a92ab145c9421d5, 0, 0]"字样的内容,即可查看所有该业务的分布式跟踪信息:
101
102```
103[a92ab145c9421d5, 0, 0] HiTraceBegin name:Write a new app event flags:0x01.
104[a92ab145c9421d5, 0, 0] pid[24256] first get g_tagsProperty: 0
105[a92ab145c9421d5, 0, 0] [event_manager.cpp(835)-(100000:100000:scope)] id: 0, log: {types: Click, node: Button, prcd: Down, state: READY, prcd: Up, state: SUCCEED}
106[a92ab145c9421d5, 0, 0] [event_manager.cpp(1817)-(100000:100000:scope)] Consumed new event id=5591 in ace_container, lastEventInfo: id:5590
107```
108
109##### 4.HiTraceChain(C++)使用说明
110
1111.在主界面点击HiTraceChain C++按钮,切换到"Log"窗口,日志过滤选择"No filters",搜索内容设置为"hitraceTest"。成功输出如下数据即为成功:
112
113```
114HiTraceBegin name:hitraceTest flags:0x00.
115```
116
117##### 5.HiChecker(ArkTS)使用说明
118
1191.先在DevEco Studio Terminal 中执行如下命令:
120
121```
122PS D:\xxx\xxx> hdc shell
123$ hilog|grep -i hichecker
124```
125
1262.hichecker功能调用写在应用启动时,启动应用时(注意要先执行上一步,如已经启动可以重新启动应用),Log窗口有如下调用栈信息说明检测成功,成功的数据如下所示:
127
128```
12901-05 19:40:22.837  7782  7782 I C02d0b/HICHECKER: HiChecker caution with RULE_CAUTION_PRINT_LOG.
13001-05 19:40:22.837  7782  7782 I C02d0b/HICHECKER: CautionMsg:trigger:RULE_THREAD_CHECK_SLOW_PROCESS,Trigger: pid = 7782, tid = 7782
13101-05 19:40:22.837  7782  7782 I C02d0b/HICHECKER: StackTrace:
13201-05 19:40:22.837  7782  7782 I C02d0b/HICHECKER: Tid:7782, Name:m.example.arkts
13301-05 19:40:22.837  7782  7782 I C02d0b/HICHECKER: #00 pc 00002bad /system/lib/platformsdk/libhichecker.so(OHOS::HiviewDFX::HiChecker::NotifySlowProcess(std::__h::basic_string<char, std::__h::char_traits<char>, std::__h::allocator<c
134har>> const&)+48)(d13fb7fce5b5364c7a3994c95f66c6c2)
13501-05 19:40:22.837  7782  7782 I C02d0b/HICHECKER: #01 pc 000707cf /system/lib/platformsdk/libimage_napi.z.so(fd73ffee97d631ca6aebf63145d4abf5)
13601-05 19:40:22.837  7782  7782 I C02d0b/HICHECKER: #02 pc 00073b4b /system/lib/platformsdk/libimage_napi.z.so(fd73ffee97d631ca6aebf63145d4abf5)
137......
138```
139
140##### 6.HiDebug(ArkTS)使用说明
141
1421.在主界面,点击HiDebug ArkTS按钮;切换到"Log"窗口,日志过滤选择"No filters",搜索内容设置为"testTag"。成功输出如下数据即为成功:
143
144```
145GetSystemCpuUsage: 0.069260
146```
147
148##### 7.HiDebug(C++)使用说明
149
1501.在主界面,点击HiDebug C++按钮;切换到"Log"窗口,日志过滤选择"No filters",搜索内容设置为"testTag"。成功输出如下数据即为成功:
151
152```
153GetSystemCpuUsage: 0.078654
154```
155
156##### 8.HiCollie(C++)使用说明
157
1581.应用刚启动10s内,不进行卡顿检测,等待10s,再在主界面依次点击"testHiCollieJankNDK"按钮和"testHiCollieStuckNDK",切换到"Log"窗口,日志过滤选择"No filters",搜索内容设置为"testTag"。成功输出如下数据即为成功:
159
160```
161OH_HiCollie_Init_JankDetection: 0
162OH_HiCollie_Init_StuckDetection: 0
163```
164
165生成栈文件目录地址:/data/app/el2/100/log/应用bundle name/watchdog/BUSSINESS_THREAD_JANK_XXX.txt166
167###  工程目录
168
169```
170entry/src/main
171├─cpp
172│  ├─CMakeLists.txt  		//导入so链接
173│  └─napi_init.cpp  		//C++功能函数
174└─ets
175   └─entryability
176   │ └─EntryAbility.ets      //生命周期
177   └─pages
178     └─Index.ets     		//主页
179```
180
181###  具体实现
182
1831. ArkTS项目可以在"@kit.PerformanceAnalysisKit"中导入对应模块即可在各种场景下调用对应函数,如在index.ets中直接调用,或者在EntryAbility.ets函数中在应用的各个生命周期内添加功能函数以实现应用自动在“启动”或“结束”时进行性能分析。
1841. C++项目可以在CMakeLists.txt里的target_link_libraries中添加对应功能的包,在napi_init.cpp中添加注册自定义C++功能函数(还需在index.d.ts中声明)后,即可在各种场景下通过"libentry.so"库自定义一个对象来调用注册声明的测试函数即可。
185
186###  相关权限
187
188不涉及。
189
190###  依赖
191
192不涉及。
193
194###  约束与限制
195
1961. 本示例仅支持标准系统上运行,支持设备:RK3568;
1972. 本示例已适配API14版本SDK,版本号:5.0.2.58,镜像版本号:OpenHarmony5.0.2.58;
1983. 本示例需要使用DevEco Studio(5.0.3.910)及以上版本才可编译运行。
199
200### 下载
201
202如需单独下载本工程,执行如下命令:
203
204```
205git init
206git config core.sparsecheckout true
207echo code/DocsSample/PerformanceAnalysisKit/PerformanceAnalysisTool/ > .git/info/sparse-checkout
208git remote add origin https://gitee.com/openharmony/applications_app_samples.git
209git pull origin master
210```
211
212