• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.hiTraceMeter (性能打点)
2
3<!--Kit: Performance Analysis Kit-->
4<!--Subsystem: HiviewDFX-->
5<!--Owner: @qq_437963121-->
6<!--Designer: @kutcherzhou1; @MontSaintMichel-->
7<!--Tester: @gcw_KuLfPSbe-->
8<!--Adviser: @foryourself-->
9
10本模块提供了跟踪进程轨迹,度量程序执行性能的打点能力。本模块打点的数据供hiTraceMeter工具分析使用。
11详细开发流程请参考:[性能打点跟踪开发指导](../../dfx/hitracemeter-guidelines-arkts.md)。
12
13> **说明:**
14>
15> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
16>
17> 建议使用API version 19的性能打点接口,后续性能打点接口[startTrace()](#hitracemeterstarttrace)、[finishTrace()](#hitracemeterfinishtrace)、[traceByValue()](#hitracemetertracebyvalue)将逐步废弃。
18>
19> 性能打点接口[startTrace()](#hitracemeterstarttrace)、[finishTrace()](#hitracemeterfinishtrace)、[traceByValue()](#hitracemetertracebyvalue)无法指定跟踪输出级别,默认均为COMMERCIAL级别性能打点。
20>
21> [用户态trace格式](../../dfx/hitracemeter-view.md#用户态trace格式说明)使用竖线 `|` 作为分隔符,所以通过性能打点接口传递的字符串类型参数应避免包含该字符,防止trace解析异常。
22>
23> [用户态trace](../../dfx/hitracemeter-view.md#用户态trace格式说明)总长度限制512字符,超过的部分将会被截断。
24
25## 导入模块
26
27```js
28import { hiTraceMeter } from '@kit.PerformanceAnalysisKit';
29```
30
31## hiTraceMeter.startTrace
32
33startTrace(name: string, taskId: number): void
34
35标记一个异步跟踪耗时任务的开始。
36
37如果有多个相同name的任务需要跟踪或者对同一个任务要跟踪多次,并且任务同时被执行,则开发者每次调用startTrace传入的taskId需不同。
38
39如果具有相同name的任务是串行执行的,则taskId可以相同。具体示例可参考[finishTrace()](#hitracemeterfinishtrace)中的示例。
40
41从API version 19开始,建议使用[startAsyncTrace()](#hitracemeterstartasynctrace19)接口(需与[finishAsyncTrace()](#hitracemeterfinishasynctrace19)接口配套使用),以便分级控制跟踪输出与跟踪聚类。
42
43**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
44
45**系统能力**:SystemCapability.HiviewDFX.HiTrace
46
47**参数:**
48
49| 参数名 | 类型   | 必填 | 说明               |
50| ------ | ------ | ---- | ------------------ |
51| name   | string | 是   | 要跟踪的任务名称。 |
52| taskId | number | 是   | 任务id。           |
53
54**示例:**
55
56```js
57hiTraceMeter.startTrace("myTestFunc", 1);
58```
59
60## hiTraceMeter.finishTrace
61
62finishTrace(name: string, taskId: number): void
63
64标记一个异步跟踪耗时任务的结束。
65
66finishTrace的name和taskId必须与流程开始的[startTrace()](#hitracemeterstarttrace)对应参数值一致。
67
68从API version 19开始,建议使用[finishAsyncTrace()](#hitracemeterfinishasynctrace19)接口(需与[startAsyncTrace()](#hitracemeterstartasynctrace19)接口配套使用)。
69
70**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
71
72**系统能力**:SystemCapability.HiviewDFX.HiTrace
73
74**参数:**
75
76| 参数名 | 类型   | 必填 | 说明               |
77| ------ | ------ | ---- | ------------------ |
78| name   | string | 是   | 要跟踪的任务名称。 |
79| taskId | number | 是   | 任务id。           |
80
81**示例:**
82
83```js
84hiTraceMeter.finishTrace("myTestFunc", 1);
85```
86
87```js
88// 跟踪并行执行的同名任务
89hiTraceMeter.startTrace("myTestFunc", 1);
90// 业务流程......
91hiTraceMeter.startTrace("myTestFunc", 2);  // 第二个跟踪的任务开始,同时第一个跟踪的同名任务还没结束,出现了并行执行,对应接口的taskId需要不同
92// 业务流程......
93hiTraceMeter.finishTrace("myTestFunc", 1);
94// 业务流程......
95hiTraceMeter.finishTrace("myTestFunc", 2);
96```
97
98```js
99// 跟踪串行执行的同名任务
100hiTraceMeter.startTrace("myTestFunc", 1);
101// 业务流程......
102hiTraceMeter.finishTrace("myTestFunc", 1);  // 第一个跟踪的任务结束
103// 业务流程......
104hiTraceMeter.startTrace("myTestFunc", 1);   // 第二个跟踪的同名任务开始,同名的待跟踪任务串行执行。
105// 业务流程......
106hiTraceMeter.finishTrace("myTestFunc", 1);
107```
108
109## hiTraceMeter.traceByValue
110
111traceByValue(name: string, count: number): void
112
113用来标记一个跟踪的整数变量,该变量的数值会不断变化。
114
115从API version 19开始,建议使用[traceByValue<sup>19+</sup>()](#hitracemetertracebyvalue19)接口,以便分级控制跟踪输出。
116
117**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
118
119**系统能力**:SystemCapability.HiviewDFX.HiTrace
120
121**参数:**
122
123| 参数名 | 类型   | 必填 | 说明                   |
124| ------ | ------ | ---- | ---------------------- |
125| name   | string | 是   | 要跟踪的整数变量名称。 |
126| count  | number | 是   | 整数变量的值。         |
127
128**示例:**
129
130```js
131let traceCount = 3;
132hiTraceMeter.traceByValue("myTestCount", traceCount);
133traceCount = 4;
134hiTraceMeter.traceByValue("myTestCount", traceCount);
135// 业务流程......
136```
137
138## HiTraceOutputLevel<sup>19+</sup>
139
140枚举,跟踪输出级别。
141
142低于系统跟踪输出级别阈值的打点将不会生效。log版本阈值为INFO;nolog版本阈值为COMMERCIAL。
143
144**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
145
146**系统能力**:SystemCapability.HiviewDFX.HiTrace
147
148| 名称       | 值   | 说明                                    |
149| ---------- | ---- | --------------------------------------- |
150| DEBUG      | 0    | 仅用于调试的输出级别,优先级最低。      |
151| INFO       | 1    | 用于log版本的输出级别。                 |
152| CRITICAL   | 2    | 用于log版本的输出级别,优先级高于INFO。 |
153| COMMERCIAL | 3    | 用于nolog版本的输出级别,优先级最高。   |
154| MAX        | 3    | 输出级别范围限制,MAX = COMMERCIAL。    |
155
156## hiTraceMeter.startAsyncTrace<sup>19+</sup>
157
158startAsyncTrace(level: HiTraceOutputLevel, name: string, taskId: number, customCategory: string, customArgs?: string): void
159
160标记一个异步跟踪耗时任务的开始,分级控制跟踪输出。
161
162如果有多个相同name的任务需要跟踪或者对同一个任务要跟踪多次,并且任务同时被执行,则开发者每次调用startAsyncTrace传入的taskId需不同。
163
164如果具有相同name的任务是串行执行的,则taskId可以相同。具体示例可参考[finishAsyncTrace()](#hitracemeterfinishasynctrace19)中的示例。
165
166**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
167
168**系统能力**:SystemCapability.HiviewDFX.HiTrace
169
170**参数:**
171
172| 参数名         | 类型                                        | 必填 | 说明                                                         |
173| -------------- | ------------------------------------------- | ---- | ------------------------------------------------------------ |
174| level          | [HiTraceOutputLevel](#hitraceoutputlevel19) | 是   | 跟踪输出级别。                                               |
175| name           | string                                      | 是   | 要跟踪的任务名称。                                           |
176| taskId         | number                                      | 是   | 任务id。                                                     |
177| customCategory | string                                      | 是   | 自定义聚类名称,用于聚合同一类异步跟踪打点。                 |
178| customArgs     | string                                      | 否   | 自定义键值对,格式key=value,多个键值对用逗号分隔。<br>不传入该参数等同于传入空字符串。 |
179
180**示例:**
181
182```js
183// 不需要customCategory参数时,可传入空字符串
184// 不需要customArgs参数时,可不传入该参数或传入空字符串
185const COMMERCIAL = hiTraceMeter.HiTraceOutputLevel.COMMERCIAL;
186hiTraceMeter.startAsyncTrace(COMMERCIAL, "myTestFunc", 1, "", "");
187hiTraceMeter.startAsyncTrace(COMMERCIAL, "myTestFunc", 2, "");
188// 多个键值对用逗号分隔
189hiTraceMeter.startAsyncTrace(COMMERCIAL, "myTestFunc", 3, "categoryTest", "key1=value");
190hiTraceMeter.startAsyncTrace(COMMERCIAL, "myTestFunc", 4, "categoryTest", "key1=value1,key2=value2");
191```
192
193## hiTraceMeter.finishAsyncTrace<sup>19+</sup>
194
195finishAsyncTrace(level: HiTraceOutputLevel, name: string, taskId: number): void
196
197标记一个异步跟踪耗时任务的结束,分级控制跟踪输出。
198
199finishAsyncTrace的level、name和taskId必须与流程开始的[startAsyncTrace()](#hitracemeterstartasynctrace19)对应参数值一致。
200
201**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
202
203**系统能力**:SystemCapability.HiviewDFX.HiTrace
204
205**参数:**
206
207| 参数名 | 类型                                        | 必填 | 说明               |
208| ------ | ------------------------------------------- | ---- | ------------------ |
209| level  | [HiTraceOutputLevel](#hitraceoutputlevel19) | 是   | 跟踪输出级别。     |
210| name   | string                                      | 是   | 要跟踪的任务名称。 |
211| taskId | number                                      | 是   | 任务id。           |
212
213**示例:**
214
215```js
216const COMMERCIAL = hiTraceMeter.HiTraceOutputLevel.COMMERCIAL;
217hiTraceMeter.finishAsyncTrace(COMMERCIAL, "myTestFunc", 1);
218```
219
220```js
221const COMMERCIAL = hiTraceMeter.HiTraceOutputLevel.COMMERCIAL;
222// 跟踪并行执行的同名任务
223// 第一个跟踪的任务开始
224hiTraceMeter.startAsyncTrace(COMMERCIAL, "myTestFunc", 1, "categoryTest", "key=value");
225// 业务流程......
226// 第二个跟踪的任务开始,同时第一个跟踪的同名任务还没结束,出现了并行执行,对应接口的taskId需要不同
227hiTraceMeter.startAsyncTrace(COMMERCIAL, "myTestFunc", 2, "categoryTest", "key=value");
228// 业务流程......
229// 第一个跟踪的任务结束
230hiTraceMeter.finishAsyncTrace(COMMERCIAL, "myTestFunc", 1);
231// 业务流程......
232// 第二个跟踪的任务结束
233hiTraceMeter.finishAsyncTrace(COMMERCIAL, "myTestFunc", 2);
234```
235
236```js
237const COMMERCIAL = hiTraceMeter.HiTraceOutputLevel.COMMERCIAL;
238// 跟踪串行执行的同名任务
239// 第一个跟踪的任务开始
240hiTraceMeter.startAsyncTrace(COMMERCIAL, "myTestFunc", 1, "categoryTest", "key=value");
241// 业务流程......
242// 第一个跟踪的任务结束
243hiTraceMeter.finishAsyncTrace(COMMERCIAL, "myTestFunc", 1);
244// 业务流程......
245// 第二个跟踪的同名任务开始,同名的待跟踪任务串行执行
246hiTraceMeter.startAsyncTrace(COMMERCIAL, "myTestFunc", 1, "categoryTest", "key=value");
247// 业务流程......
248// 第二个跟踪的同名任务结束
249hiTraceMeter.finishAsyncTrace(COMMERCIAL, "myTestFunc", 1);
250```
251
252## hiTraceMeter.startSyncTrace<sup>19+</sup>
253
254startSyncTrace(level: HiTraceOutputLevel, name: string, customArgs?: string): void
255
256标记一个同步跟踪耗时任务的开始,分级控制跟踪输出。具体示例可参考[finishSyncTrace()](#hitracemeterfinishsynctrace19)中的示例。
257
258**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
259
260**系统能力**:SystemCapability.HiviewDFX.HiTrace
261
262**参数:**
263
264| 参数名     | 类型                                        | 必填 | 说明                                                         |
265| ---------- | ------------------------------------------- | ---- | ------------------------------------------------------------ |
266| level      | [HiTraceOutputLevel](#hitraceoutputlevel19) | 是   | 跟踪输出级别。                                               |
267| name       | string                                      | 是   | 要跟踪的任务名称。                                           |
268| customArgs | string                                      | 否   | 键值对,格式key=value,多个键值对用逗号分隔。<br>不传入该参数等同于传入空字符串。 |
269
270**示例:**
271
272```js
273const COMMERCIAL = hiTraceMeter.HiTraceOutputLevel.COMMERCIAL;
274// 不需要customArgs参数时,可不传入该参数或传入空字符串
275hiTraceMeter.startSyncTrace(COMMERCIAL, "myTestFunc");
276hiTraceMeter.startSyncTrace(COMMERCIAL, "myTestFunc", "");
277// 多个键值对用逗号分隔
278hiTraceMeter.startSyncTrace(COMMERCIAL, "myTestFunc", "key=value");
279hiTraceMeter.startSyncTrace(COMMERCIAL, "myTestFunc", "key1=value1,key2=value2");
280```
281
282## hiTraceMeter.finishSyncTrace<sup>19+</sup>
283
284finishSyncTrace(level: HiTraceOutputLevel): void
285
286标记一个同步跟踪耗时任务的结束,分级控制跟踪输出。
287
288finishSyncTrace的level必须与流程开始的[startSyncTrace()](#hitracemeterstartsynctrace19)对应参数值一致。
289
290**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
291
292**系统能力**:SystemCapability.HiviewDFX.HiTrace
293
294**参数:**
295
296| 参数名 | 类型                                        | 必填 | 说明           |
297| ------ | ------------------------------------------- | ---- | -------------- |
298| level  | [HiTraceOutputLevel](#hitraceoutputlevel19) | 是   | 跟踪输出级别。 |
299
300**示例:**
301
302```js
303const COMMERCIAL = hiTraceMeter.HiTraceOutputLevel.COMMERCIAL;
304hiTraceMeter.finishSyncTrace(COMMERCIAL);
305```
306
307```js
308const COMMERCIAL = hiTraceMeter.HiTraceOutputLevel.COMMERCIAL;
309// 可嵌套使用,相邻的startSyncTrace与finishSyncTrace匹配
310// 第一个跟踪的任务开始
311hiTraceMeter.startSyncTrace(COMMERCIAL, "myTestFunc1", "key=value");
312// 业务流程......
313// 第二个跟踪的任务开始
314hiTraceMeter.startSyncTrace(COMMERCIAL, "myTestFunc2", "key=value");
315// 业务流程......
316// 第二个跟踪的任务结束
317hiTraceMeter.finishSyncTrace(COMMERCIAL);
318// 业务流程......
319// 第一个跟踪的任务结束
320hiTraceMeter.finishSyncTrace(COMMERCIAL);
321```
322
323## hiTraceMeter.traceByValue<sup>19+</sup>
324
325traceByValue(level: HiTraceOutputLevel, name: string, count: number): void
326
327整数跟踪事件,分级控制跟踪输出。用来标记一个预跟踪的整数变量名及整数值。
328
329**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
330
331**系统能力**:SystemCapability.HiviewDFX.HiTrace
332
333**参数:**
334
335| 参数名 | 类型                                        | 必填 | 说明                   |
336| ------ | ------------------------------------------- | ---- | ---------------------- |
337| level  | [HiTraceOutputLevel](#hitraceoutputlevel19) | 是   | 跟踪输出级别。         |
338| name   | string                                      | 是   | 要跟踪的整数变量名称。 |
339| count  | number                                      | 是   | 整数变量的值。         |
340
341**示例:**
342
343```js
344const COMMERCIAL = hiTraceMeter.HiTraceOutputLevel.COMMERCIAL;
345let traceCount = 3;
346hiTraceMeter.traceByValue(COMMERCIAL, "myTestCount", traceCount);
347traceCount = 4;
348hiTraceMeter.traceByValue(COMMERCIAL, "myTestCount", traceCount);
349// 业务流程......
350```
351
352## hiTraceMeter.isTraceEnabled<sup>19+</sup>
353
354isTraceEnabled(): boolean
355
356判断当前是否开启应用trace捕获。
357
358**原子化服务API**:从API version 19开始,该接口支持在原子化服务中使用。
359
360**系统能力**:SystemCapability.HiviewDFX.HiTrace
361
362**返回值:**
363
364| 类型    | 说明                                                         |
365| ------- | ------------------------------------------------------------ |
366| boolean | 使用[hitrace](../../dfx/hitrace.md)命令行工具等方式开启采集时返回true。未开启采集或停止采集后返回false,此时调用HiTraceMeter性能跟踪打点接口无效。 |
367
368**示例:**
369
370```js
371if (hiTraceMeter.isTraceEnabled()) {
372    // 业务流程......
373} else {
374    // 业务流程......
375}
376```
377