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.txt。 166 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