1# trace.h 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## 概述 11 12HiTraceMeter和HitraceChain模块打点接口定义,通过这些接口实现性能打点和分布式跟踪功能。<br> 用户态tarce格式使用竖线字符作为分隔符,所以通过HiTraceMeter接口传递的字符串类型参数应避免包含该字符,防止trace解析异常。<br> 用户态trace总长度限制512字符,超过的部分将会被截断。 13 14**引用文件:** <hitrace/trace.h> 15 16**库:** libhitrace_ndk.z.so 17 18**系统能力:** SystemCapability.HiviewDFX.HiTrace 19 20**起始版本:** 10 21 22**相关模块:** [Hitrace](capi-hitrace.md) 23 24## 汇总 25 26### 结构体 27 28| 名称 | typedef关键字 | 描述 | 29| -- | -- | -- | 30| [HiTraceId](capi-hitrace-hitraceid.md) | HiTraceId | HiTraceId定义。 | 31 32### 枚举 33 34| 名称 | typedef关键字 | 描述 | 35| -- | -- | -- | 36| [HiTraceId_Valid](#hitraceid_valid) | HiTraceId_Valid | HiTraceId是否有效标志。 | 37| [HiTrace_Version](#hitrace_version) | HiTrace_Version | HiTrace版本号。 | 38| [HiTrace_Flag](#hitrace_flag) | HiTrace_Flag | HiTrace跟踪标志。 | 39| [HiTrace_Tracepoint_Type](#hitrace_tracepoint_type) | HiTrace_Tracepoint_Type | 跟踪埋点类型枚举。 | 40| [HiTrace_Communication_Mode](#hitrace_communication_mode) | HiTrace_Communication_Mode | 跟踪通信类型枚举。 | 41| [HiTrace_Output_Level](#hitrace_output_level) | HiTrace_Output_Level | HiTrace输出级别。低于系统跟踪输出级别阈值的打点将不会生效。log版本阈值为HITRACE_LEVEL_INFO;nolog版本阈值为HITRACE_LEVEL_COMMERCIAL。 | 42 43### 函数 44 45| 名称 | 描述 | 46| -- | -- | 47| [HiTraceId OH_HiTrace_BeginChain(const char *name, int flags)](#oh_hitrace_beginchain) | 开始跟踪。<br> 当前线程TLS(Thread Local Storage,线程本地存储)中不存在有效的HiTraceId时,生成有效的HiTraceId并设置到当前线程TLS中,返回该HiTraceId。<br> 当前线程TLS中已存在有效的HiTraceId时,不会开始新的跟踪,返回各属性值均为0的无效HiTraceId。<br> | 48| [void OH_HiTrace_EndChain()](#oh_hitrace_endchain) | 结束跟踪。<br> 结束跟踪并将当前线程TLS中的HiTraceId设置为无效。<br> | 49| [HiTraceId OH_HiTrace_GetId()](#oh_hitrace_getid) | 获取跟踪标识。<br> 获取当前线程TLS中的HiTraceId。<br> | 50| [void OH_HiTrace_SetId(const HiTraceId *id)](#oh_hitrace_setid) | 设置跟踪标识。<br> 将给定的HiTraceId设置到当前线程TLS中。若给定的HiTraceId无效,则不执行任何操作。<br> | 51| [void OH_HiTrace_ClearId(void)](#oh_hitrace_clearid) | 清除跟踪标识。<br> 将当前线程TLS中的HiTraceId设置为无效。<br> | 52| [HiTraceId OH_HiTrace_CreateSpan(void)](#oh_hitrace_createspan) | 创建跟踪分支。<br> 创建一个HiTraceId,使用当前线程TLS中的chainId、spanId初始化HiTraceId的chainId、parentSpanId,并为HiTraceId生成一个新的spanId,返回该HiTraceId。<br> | 53| [void OH_HiTrace_Tracepoint(HiTrace_Communication_Mode mode, HiTrace_Tracepoint_Type type, const HiTraceId *id, const char *fmt, ...)](#oh_hitrace_tracepoint) | HiTraceMeter跟踪信息埋点。<br>type为客户端发送CS和服务端接收SC时,进行同步HiTraceMeter开始打点;<br>type为客户端接收CC和服务端发送SS时,进行同步HiTraceMeter结束打点;<br>type为通用类型GENERAL时,不会进行HiTraceMeter打点。<br>type为客户端发送CS和客户端接收CC的信息埋点需配套使用;<br>type为服务端接收SC和服务端发送SS的信息埋点需配套使用。<br>否则,HiTraceMeter开始与结束打点无法正常匹配。 | 54| [void OH_HiTrace_InitId(HiTraceId *id)](#oh_hitrace_initid) | 初始化HiTraceId。 | 55| [void OH_HiTrace_IdFromBytes(HiTraceId *id, const uint8_t *pIdArray, int len)](#oh_hitrace_idfrombytes) | 根据字节数组创建HiTraceId。 | 56| [bool OH_HiTrace_IsIdValid(const HiTraceId *id)](#oh_hitrace_isidvalid) | 判断HiTraceId是否有效。 | 57| [bool OH_HiTrace_IsFlagEnabled(const HiTraceId *id, HiTrace_Flag flag)](#oh_hitrace_isflagenabled) | 判断HiTraceId是否启用了跟踪标志flag。 | 58| [void OH_HiTrace_EnableFlag(const HiTraceId *id, HiTrace_Flag flag)](#oh_hitrace_enableflag) | 启用HiTraceId中指定的跟踪标志。 | 59| [int OH_HiTrace_GetFlags(const HiTraceId *id)](#oh_hitrace_getflags) | 获取HiTraceId中设置的跟踪标志位。 | 60| [void OH_HiTrace_SetFlags(HiTraceId *id, int flags)](#oh_hitrace_setflags) | 设置跟踪标志位到[HiTraceId](capi-hitrace-hitraceid.md)中。 | 61| [uint64_t OH_HiTrace_GetChainId(const HiTraceId *id)](#oh_hitrace_getchainid) | 获取HiTraceId中的跟踪链ID。 | 62| [void OH_HiTrace_SetChainId(HiTraceId *id, uint64_t chainId)](#oh_hitrace_setchainid) | 设置跟踪链ID到HiTraceId中。 | 63| [uint64_t OH_HiTrace_GetSpanId(const HiTraceId *id)](#oh_hitrace_getspanid) | 获取当前HiTraceId中的分支ID。 | 64| [void OH_HiTrace_SetSpanId(HiTraceId *id, uint64_t spanId)](#oh_hitrace_setspanid) | 设置分支ID到HiTraceId中。 | 65| [uint64_t OH_HiTrace_GetParentSpanId(const HiTraceId *id)](#oh_hitrace_getparentspanid) | 获取当前HiTraceId中的父分支ID。 | 66| [void OH_HiTrace_SetParentSpanId(HiTraceId *id, uint64_t parentSpanId)](#oh_hitrace_setparentspanid) | 设置HiTraceId结构的parentSpanId字符。 | 67| [int OH_HiTrace_IdToBytes(const HiTraceId* id, uint8_t* pIdArray, int len)](#oh_hitrace_idtobytes) | 将HiTraceId转换为字节数组,用于缓存或者通信传递。 | 68| [void OH_HiTrace_StartTrace(const char *name)](#oh_hitrace_starttrace) | 标记一个同步跟踪耗时任务的开始。<br> 同步跟踪打点接口OH_HiTrace_StartTrace()和OH_HiTrace_FinishTrace()必须配对使用。<br> OH_HiTrace_StartTrace()和OH_HiTrace_FinishTrace()函数对可以嵌套使用,跟踪解析时使用栈式数据结构进行匹配。<br> 从API version 19开始,建议使用OH_HiTrace_StartTraceEx()接口,以便分级控制跟踪输出。<br> | 69| [void OH_HiTrace_FinishTrace(void)](#oh_hitrace_finishtrace) | 标记一个同步跟踪耗时任务的结束。<br> 必须和OH_HiTrace_StartTrace()配对使用。跟踪解析时,和其前执行流程中最近的OH_HiTrace_StartTrace()进行匹配。<br> 从API version 19开始,建议使用OH_HiTrace_FinishTraceEx()接口,以便分级控制跟踪输出。<br> | 70| [void OH_HiTrace_StartAsyncTrace(const char *name, int32_t taskId)](#oh_hitrace_startasynctrace) | 标记一个异步跟踪耗时任务的开始。<br> 用于在异步操作前调用进行开始打点,异步跟踪开始和结束数据由于不是顺序发生的,所以解析时需要通过一个唯一的taskId进行识别。<br> 必须和OH_HiTrace_FinishAsyncTrace()配对使用,参数name和taskId相同的开始与结束打点相匹配,构成一个异步跟踪耗时任务。<br> 如果有多个相同name的任务需要跟踪或者对同一个任务跟踪多次,并且任务同时被执行,则每次调用的taskId需不相同。<br> 如果具有相同name的任务是串行执行的,则taskId可以相同。<br> 从API version 19开始,建议使用OH_HiTrace_StartAsyncTraceEx()接口,以便分级控制跟踪输出与跟踪聚类。<br> | 71| [void OH_HiTrace_FinishAsyncTrace(const char *name, int32_t taskId)](#oh_hitrace_finishasynctrace) | 标记一个异步跟踪耗时任务的结束。<br> 在异步操作完成后如回调函数中调用,进行结束打点。<br> 和OH_HiTrace_StartAsyncTrace()配对使用,参数name和taskId必须与异步跟踪的开始打点接口的对应参数值保持一致。<br> 从API version 19开始,建议使用OH_HiTrace_FinishAsyncTraceEx()接口,以便分级控制跟踪输出。<br> | 72| [void OH_HiTrace_CountTrace(const char *name, int64_t count)](#oh_hitrace_counttrace) | 用于跟踪给定整数变量名和整数值。<br> 多次执行该接口可以跟踪给定整数变量在不同时刻的数值变化。<br> 从API version 19开始,建议使用OH_HiTrace_CountTraceEx()接口,以便分级控制跟踪输出。<br> | 73| [void OH_HiTrace_StartTraceEx(HiTrace_Output_Level level, const char *name, const char *customArgs)](#oh_hitrace_starttraceex) | 标记一个同步跟踪耗时任务的开始,分级控制跟踪输出。<br> 同步跟踪打点接口OH_HiTrace_StartTraceEx()和OH_HiTrace_FinishTraceEx()必须配对使用。<br> OH_HiTrace_StartTraceEx()和OH_HiTrace_FinishTraceEx()函数对可以嵌套使用,跟踪解析时使用栈式数据结构进行匹配。<br> | 74| [void OH_HiTrace_FinishTraceEx(HiTrace_Output_Level level)](#oh_hitrace_finishtraceex) | 标记一个同步跟踪耗时任务的结束,分级控制跟踪输出。<br> 必须和OH_HiTrace_StartTraceEx()配对使用,参数level必须与同步跟踪的开始打点接口OH_HiTrace_StartTraceEx()的对应参数值一致。<br> 跟踪数据解析时,和其前执行流程中最近的OH_HiTrace_StartTraceEx()进行匹配。<br> | 75| [void OH_HiTrace_StartAsyncTraceEx(HiTrace_Output_Level level, const char *name, int32_t taskId, const char *customCategory, const char *customArgs)](#oh_hitrace_startasynctraceex) | 标记一个异步跟踪耗时任务的开始,分级控制跟踪输出。<br> 用于在异步操作执行前进行开始打点,异步跟踪开始和结束数据由于不是顺序发生的,所以解析时需要通过一个唯一的taskId进行识别。<br> 和OH_HiTrace_FinishAsyncTraceEx()配对使用,参数name和taskId相同的开始与结束打点相匹配,构成一个异步跟踪耗时任务。<br> 如果有多个相同name的任务需要跟踪或者对同一个任务跟踪多次,并且任务同时被执行,则每次调用的taskId需不相同。<br> 如果具有相同name的任务是串行执行的,则taskId可以相同。<br> 不同进程的taskId不会相互干扰。<br> | 76| [void OH_HiTrace_FinishAsyncTraceEx(HiTrace_Output_Level level, const char *name, int32_t taskId)](#oh_hitrace_finishasynctraceex) | 标记一个异步跟踪耗时任务的结束,分级控制跟踪输出。<br> 用于在异步操作完成后进行结束打点,例如在回调函数中调用。<br> 和OH_HiTrace_StartAsyncTraceEx()配对使用,参数level、name和taskId必须与异步跟踪开始打点接口的对应参数值保持一致。<br> | 77| [void OH_HiTrace_CountTraceEx(HiTrace_Output_Level level, const char *name, int64_t count)](#oh_hitrace_counttraceex) | 标记一个跟踪的整数变量,分级控制跟踪输出。 | 78| [bool OH_HiTrace_IsTraceEnabled(void)](#oh_hitrace_istraceenabled) | 判断当前是否开启应用trace捕获。 | 79 80## 枚举类型说明 81 82### HiTraceId_Valid 83 84``` 85enum HiTraceId_Valid 86``` 87 88**描述** 89 90HiTraceId是否有效标志。 91 92**系统能力:** SystemCapability.HiviewDFX.HiTrace 93 94**起始版本:** 12 95 96| 枚举项 | 描述 | 97| -- | -- | 98| HITRACE_ID_INVALID = 0 | 无效HiTraceId。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 99| HITRACE_ID_VALID = 1 | 有效HiTraceId。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 100 101### HiTrace_Version 102 103``` 104enum HiTrace_Version 105``` 106 107**描述** 108 109HiTrace版本号。 110 111**系统能力:** SystemCapability.HiviewDFX.HiTrace 112 113**起始版本:** 12 114 115| 枚举项 | 描述 | 116| -- | -- | 117| HITRACE_VER_1 = 0 | 版本1。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 118 119### HiTrace_Flag 120 121``` 122enum HiTrace_Flag 123``` 124 125**描述** 126 127HiTrace跟踪标志。 128 129**系统能力:** SystemCapability.HiviewDFX.HiTrace 130 131**起始版本:** 12 132 133| 枚举项 | 描述 | 134| -- | -- | 135| HITRACE_FLAG_DEFAULT = 0 | 缺省标志。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 136| HITRACE_FLAG_INCLUDE_ASYNC = 1 << 0 | 异步调用标志。<br> 设置该标志,同时跟踪同步和异步调用;缺省只跟踪同步调用。<br><br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 137| HITRACE_FLAG_DONOT_CREATE_SPAN = 1 << 1 | 无分支标志。<br> 设置该标志,不创建分支信息;缺省创建分支信息。<br><br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 138| HITRACE_FLAG_TP_INFO = 1 << 2 | 埋点标志。<br> 调试场景下设置该标志,调用信息埋点接口OH_HiTrace_Tracepoint()时,会打印埋点信息hilog日志;缺省不打印埋点信息hilog日志。<br><br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 139| HITRACE_FLAG_NO_BE_INFO = 1 << 3 | 无开始结束信息标志。<br> 调试场景下设置该标志,调用开始跟踪接口OH_HiTrace_BeginChain()和结束跟踪接口OH_HiTrace_EndChain()时,分别会打印开始、结束跟踪信息hilog日志;缺省不打印开始、结束跟踪信息hilog日志。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 140| HITRACE_FLAG_DONOT_ENABLE_LOG = 1 << 4 | 日志关联标志。<br> 设置该标志,不会在hilog日志中附加HiTraceId信息;缺省会在hilog日志中附加HiTraceId信息。<br><br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 141| HITRACE_FLAG_FAULT_TRIGGER = 1 << 5 | 故障触发标志。预置标志,暂未启用。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 142| HITRACE_FLAG_D2D_TP_INFO = 1 << 6 | 设备间埋点标志。HITRACE_FLAG_TP_INFO的一个子集,调试场景下使用。<br> 当已设置HITRACE_FLAG_TP_INFO标志时,HITRACE_FLAG_D2D_TP_INFO标志不生效;<br> 当未设置HITRACE_FLAG_TP_INFO标志时,设置HITRACE_FLAG_D2D_TP_INFO标志,此时调用信息埋点接口OH_HiTrace_Tracepoint(),仅当mode参数为设备间通信HITRACE_CM_DEVICE的情况下,会打印埋点信息hilog日志。<br><br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 143 144### HiTrace_Tracepoint_Type 145 146``` 147enum HiTrace_Tracepoint_Type 148``` 149 150**描述** 151 152跟踪埋点类型枚举。 153 154**系统能力:** SystemCapability.HiviewDFX.HiTrace 155 156**起始版本:** 12 157 158| 枚举项 | 描述 | 159| -- | -- | 160| HITRACE_TP_CS = 0 | 客户端发送。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 161| HITRACE_TP_CR = 1 | 客户端接收。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 162| HITRACE_TP_SS = 2 | 服务端发送。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 163| HITRACE_TP_SR = 3 | 服务端接收。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 164| HITRACE_TP_GENERAL = 4 | 通用类型,标识HITRACE_TP_CS、HITRACE_TP_CR、HITRACE_TP_SS、HITRACE_TP_SR四种场景之外的埋点。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 165 166### HiTrace_Communication_Mode 167 168``` 169enum HiTrace_Communication_Mode 170``` 171 172**描述** 173 174跟踪通信类型枚举。 175 176**系统能力:** SystemCapability.HiviewDFX.HiTrace 177 178**起始版本:** 12 179 180| 枚举项 | 描述 | 181| -- | -- | 182| HITRACE_CM_DEFAULT = 0 | 缺省通信类型。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 183| HITRACE_CM_THREAD = 1 | 线程间通信。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 184| HITRACE_CM_PROCESS = 2 | 进程间通信。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 185| HITRACE_CM_DEVICE = 3 | 设备间通信。<br>**起始版本:** 12<br>**系统能力:** SystemCapability.HiviewDFX.HiTrace | 186 187### HiTrace_Output_Level 188 189``` 190enum HiTrace_Output_Level 191``` 192 193**描述** 194 195HiTrace输出级别。低于系统跟踪输出级别阈值的打点将不会生效。log版本阈值为HITRACE_LEVEL_INFO;nolog版本阈值为HITRACE_LEVEL_COMMERCIAL。 196 197**系统能力:** SystemCapability.HiviewDFX.HiTrace 198 199**起始版本:** 19 200 201| 枚举项 | 描述 | 202| -- | -- | 203| HITRACE_LEVEL_DEBUG = 0 | 仅用于调试的输出级别,优先级最低。<br>**起始版本:** 19 | 204| HITRACE_LEVEL_INFO = 1 | 用于log版本的输出级别。<br>**起始版本:** 19 | 205| HITRACE_LEVEL_CRITICAL = 2 | 用于log版本的输出级别,优先级高于HITRACE_LEVEL_INFO。<br>**起始版本:** 19 | 206| HITRACE_LEVEL_COMMERCIAL = 3 | 用于nolog版本的输出级别,优先级最高。<br>**起始版本:** 19 | 207| HITRACE_LEVEL_MAX = HITRACE_LEVEL_COMMERCIAL | 输出级别范围限制。<br>**起始版本:** 19 | 208 209 210## 函数说明 211 212### OH_HiTrace_BeginChain() 213 214``` 215HiTraceId OH_HiTrace_BeginChain(const char *name, int flags) 216``` 217 218**描述** 219 220开始跟踪。<br> 当前线程TLS(Thread Local Storage,线程本地存储)中不存在有效的HiTraceId时,生成有效的HiTraceId并设置到当前线程TLS中,返回该HiTraceId。<br> 当前线程TLS中已存在有效的HiTraceId时,不会开始新的跟踪,返回各属性值均为0的无效HiTraceId。<br> 221 222**系统能力:** SystemCapability.HiviewDFX.HiTrace 223 224**起始版本:** 12 225 226 227**参数:** 228 229| 参数项 | 描述 | 230| -- | -- | 231| const char *name | 跟踪业务名。 | 232| int flags | 跟踪标志组合,见[HiTrace_Flag](capi-trace-h.md#hitrace_flag)。 | 233 234**返回:** 235 236| 类型 | 说明 | 237| -- | -- | 238| [HiTraceId](capi-hitrace-hitraceid.md) | [HiTraceId](capi-hitrace-hitraceid.md)结构体。 | 239 240### OH_HiTrace_EndChain() 241 242``` 243void OH_HiTrace_EndChain() 244``` 245 246**描述** 247 248结束跟踪。<br> 结束跟踪并将当前线程TLS中的HiTraceId设置为无效。<br> 249 250**系统能力:** SystemCapability.HiviewDFX.HiTrace 251 252**起始版本:** 12 253 254### OH_HiTrace_GetId() 255 256``` 257HiTraceId OH_HiTrace_GetId() 258``` 259 260**描述** 261 262获取跟踪标识。<br> 获取当前线程TLS中的HiTraceId。<br> 263 264**系统能力:** SystemCapability.HiviewDFX.HiTrace 265 266**起始版本:** 12 267 268**返回:** 269 270| 类型 | 说明 | 271| -- | -- | 272| [HiTraceId](capi-hitrace-hitraceid.md) | [HiTraceId](capi-hitrace-hitraceid.md)结构体。 | 273 274### OH_HiTrace_SetId() 275 276``` 277void OH_HiTrace_SetId(const HiTraceId *id) 278``` 279 280**描述** 281 282设置跟踪标识。<br> 将给定的HiTraceId设置到当前线程TLS中。若给定的HiTraceId无效,则不执行任何操作。<br> 283 284**系统能力:** SystemCapability.HiviewDFX.HiTrace 285 286**起始版本:** 12 287 288 289**参数:** 290 291| 参数项 | 描述 | 292| -- | -- | 293| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 要设置的[HiTraceId](capi-hitrace-hitraceid.md)。 | 294 295### OH_HiTrace_ClearId() 296 297``` 298void OH_HiTrace_ClearId(void) 299``` 300 301**描述** 302 303清除跟踪标识。<br> 将当前线程TLS中的HiTraceId设置为无效。<br> 304 305**系统能力:** SystemCapability.HiviewDFX.HiTrace 306 307**起始版本:** 12 308 309### OH_HiTrace_CreateSpan() 310 311``` 312HiTraceId OH_HiTrace_CreateSpan(void) 313``` 314 315**描述** 316 317创建跟踪分支。<br> 创建一个HiTraceId,使用当前线程TLS中的chainId、spanId初始化HiTraceId的chainId、parentSpanId,并为HiTraceId生成一个新的spanId,返回该HiTraceId。<br> 318 319**系统能力:** SystemCapability.HiviewDFX.HiTrace 320 321**起始版本:** 12 322 323**返回:** 324 325| 类型 | 说明 | 326| -- | -- | 327| [HiTraceId](capi-hitrace-hitraceid.md) | [HiTraceId](capi-hitrace-hitraceid.md)结构体。 | 328 329### OH_HiTrace_Tracepoint() 330 331``` 332void OH_HiTrace_Tracepoint(HiTrace_Communication_Mode mode, HiTrace_Tracepoint_Type type, const HiTraceId *id, const char *fmt, ...) 333``` 334 335**描述** 336 337HiTraceMeter跟踪信息埋点。<br>type为客户端发送CS和服务端接收SC时,进行同步HiTraceMeter开始打点;<br>type为客户端接收CC和服务端发送SS时,进行同步HiTraceMeter结束打点;<br>type为通用类型GENERAL时,不会进行HiTraceMeter打点。<br>type为客户端发送CS和客户端接收CC的信息埋点需配套使用;<br>type为服务端接收SC和服务端发送SS的信息埋点需配套使用。<br>否则,HiTraceMeter开始与结束打点无法正常匹配。 338 339**系统能力:** SystemCapability.HiviewDFX.HiTrace 340 341**起始版本:** 12 342 343 344**参数:** 345 346| 参数项 | 描述 | 347| -- | -- | 348| [HiTrace_Communication_Mode](capi-trace-h.md#hitrace_communication_mode) mode | 跟踪通信模式,见[HiTrace_Communication_Mode](capi-trace-h.md#hitrace_communication_mode)。 | 349| [HiTrace_Tracepoint_Type](capi-trace-h.md#hitrace_tracepoint_type) type | 跟踪信息类型,见[HiTrace_Tracepoint_Type](capi-trace-h.md#hitrace_tracepoint_type)。 | 350| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 实施信息埋点操作的[HiTraceId](capi-hitrace-hitraceid.md)。 | 351| const char *fmt | HiTraceMeter打点操作传入的trace说明信息的格式化字符串。 | 352 353### OH_HiTrace_InitId() 354 355``` 356void OH_HiTrace_InitId(HiTraceId *id) 357``` 358 359**描述** 360 361初始化HiTraceId。 362 363**系统能力:** SystemCapability.HiviewDFX.HiTrace 364 365**起始版本:** 12 366 367 368**参数:** 369 370| 参数项 | 描述 | 371| -- | -- | 372| [HiTraceId](capi-hitrace-hitraceid.md) *id | 需要初始化的[HiTraceId](capi-hitrace-hitraceid.md)。 | 373 374### OH_HiTrace_IdFromBytes() 375 376``` 377void OH_HiTrace_IdFromBytes(HiTraceId *id, const uint8_t *pIdArray, int len) 378``` 379 380**描述** 381 382根据字节数组创建HiTraceId。 383 384**系统能力:** SystemCapability.HiviewDFX.HiTrace 385 386**起始版本:** 12 387 388 389**参数:** 390 391| 参数项 | 描述 | 392| -- | -- | 393| [HiTraceId](capi-hitrace-hitraceid.md) *id | 需要创建的[HiTraceId](capi-hitrace-hitraceid.md)。 | 394| const uint8_t *pIdArray | 字节数组。 | 395| int len | 字节数组长度。 | 396 397### OH_HiTrace_IsIdValid() 398 399``` 400bool OH_HiTrace_IsIdValid(const HiTraceId *id) 401``` 402 403**描述** 404 405判断HiTraceId是否有效。 406 407**系统能力:** SystemCapability.HiviewDFX.HiTrace 408 409**起始版本:** 12 410 411 412**参数:** 413 414| 参数项 | 描述 | 415| -- | -- | 416| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 需要判断是否有效的[HiTraceId](capi-hitrace-hitraceid.md)。 | 417 418**返回:** 419 420| 类型 | 说明 | 421| -- | -- | 422| bool | true:[HiTraceId](capi-hitrace-hitraceid.md)有效;false:[HiTraceId](capi-hitrace-hitraceid.md)无效。 | 423 424### OH_HiTrace_IsFlagEnabled() 425 426``` 427bool OH_HiTrace_IsFlagEnabled(const HiTraceId *id, HiTrace_Flag flag) 428``` 429 430**描述** 431 432判断HiTraceId是否启用了跟踪标志flag。 433 434**系统能力:** SystemCapability.HiviewDFX.HiTrace 435 436**起始版本:** 12 437 438 439**参数:** 440 441| 参数项 | 描述 | 442| -- | -- | 443| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 需要判断指定跟踪标志是否启用的[HiTraceId](capi-hitrace-hitraceid.md)。 | 444| [HiTrace_Flag](capi-trace-h.md#hitrace_flag) flag | 指定的跟踪标志,见[HiTrace_Flag](capi-trace-h.md#hitrace_flag)。 | 445 446**返回:** 447 448| 类型 | 说明 | 449| -- | -- | 450| bool | true:[HiTraceId](capi-hitrace-hitraceid.md)已启用flag;false:[HiTraceId](capi-hitrace-hitraceid.md)未启用flag。 | 451 452### OH_HiTrace_EnableFlag() 453 454``` 455void OH_HiTrace_EnableFlag(const HiTraceId *id, HiTrace_Flag flag) 456``` 457 458**描述** 459 460启用HiTraceId中指定的跟踪标志。 461 462**系统能力:** SystemCapability.HiviewDFX.HiTrace 463 464**起始版本:** 12 465 466 467**参数:** 468 469| 参数项 | 描述 | 470| -- | -- | 471| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 需要启用指定跟踪标志的[HiTraceId](capi-hitrace-hitraceid.md)。 | 472| [HiTrace_Flag](capi-trace-h.md#hitrace_flag) flag | 指定的跟踪标志,见[HiTrace_Flag](capi-trace-h.md#hitrace_flag)。 | 473 474### OH_HiTrace_GetFlags() 475 476``` 477int OH_HiTrace_GetFlags(const HiTraceId *id) 478``` 479 480**描述** 481 482获取HiTraceId中设置的跟踪标志位。 483 484**系统能力:** SystemCapability.HiviewDFX.HiTrace 485 486**起始版本:** 12 487 488 489**参数:** 490 491| 参数项 | 描述 | 492| -- | -- | 493| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 需要获取跟踪标志位的[HiTraceId](capi-hitrace-hitraceid.md)。 | 494 495**返回:** 496 497| 类型 | 说明 | 498| -- | -- | 499| int | [HiTraceId](capi-hitrace-hitraceid.md)中设置的跟踪标志位。 | 500 501### OH_HiTrace_SetFlags() 502 503``` 504void OH_HiTrace_SetFlags(HiTraceId *id, int flags) 505``` 506 507**描述** 508 509设置跟踪标志位到[HiTraceId](capi-hitrace-hitraceid.md)中。 510 511**系统能力:** SystemCapability.HiviewDFX.HiTrace 512 513**起始版本:** 12 514 515 516**参数:** 517 518| 参数项 | 描述 | 519| -- | -- | 520| [HiTraceId](capi-hitrace-hitraceid.md) *id | 需要设置跟踪标志位的[HiTraceId](capi-hitrace-hitraceid.md)。 | 521| int flags | 指定的跟踪标志位,见[HiTrace_Flag](capi-trace-h.md#hitrace_flag)。 | 522 523### OH_HiTrace_GetChainId() 524 525``` 526uint64_t OH_HiTrace_GetChainId(const HiTraceId *id) 527``` 528 529**描述** 530 531获取HiTraceId中的跟踪链ID。 532 533**系统能力:** SystemCapability.HiviewDFX.HiTrace 534 535**起始版本:** 12 536 537 538**参数:** 539 540| 参数项 | 描述 | 541| -- | -- | 542| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 需要获取跟踪链ID的[HiTraceId](capi-hitrace-hitraceid.md)。 | 543 544**返回:** 545 546| 类型 | 说明 | 547| -- | -- | 548| uint64_t | 跟踪链ID。 | 549 550### OH_HiTrace_SetChainId() 551 552``` 553void OH_HiTrace_SetChainId(HiTraceId *id, uint64_t chainId) 554``` 555 556**描述** 557 558设置跟踪链ID到HiTraceId中。 559 560**系统能力:** SystemCapability.HiviewDFX.HiTrace 561 562**起始版本:** 12 563 564 565**参数:** 566 567| 参数项 | 描述 | 568| -- | -- | 569| [HiTraceId](capi-hitrace-hitraceid.md) *id | 需要设置跟踪链ID的[HiTraceId](capi-hitrace-hitraceid.md)。 | 570| uint64_t chainId | 需要设置的跟踪链ID。 | 571 572### OH_HiTrace_GetSpanId() 573 574``` 575uint64_t OH_HiTrace_GetSpanId(const HiTraceId *id) 576``` 577 578**描述** 579 580获取当前HiTraceId中的分支ID。 581 582**系统能力:** SystemCapability.HiviewDFX.HiTrace 583 584**起始版本:** 12 585 586 587**参数:** 588 589| 参数项 | 描述 | 590| -- | -- | 591| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 需要获取分支ID的[HiTraceId](capi-hitrace-hitraceid.md)。 | 592 593**返回:** 594 595| 类型 | 说明 | 596| -- | -- | 597| uint64_t | [HiTraceId](capi-hitrace-hitraceid.md)中设置的分支ID。 | 598 599### OH_HiTrace_SetSpanId() 600 601``` 602void OH_HiTrace_SetSpanId(HiTraceId *id, uint64_t spanId) 603``` 604 605**描述** 606 607设置分支ID到HiTraceId中。 608 609**系统能力:** SystemCapability.HiviewDFX.HiTrace 610 611**起始版本:** 12 612 613 614**参数:** 615 616| 参数项 | 描述 | 617| -- | -- | 618| [HiTraceId](capi-hitrace-hitraceid.md) *id | 需要设置分支ID的[HiTraceId](capi-hitrace-hitraceid.md)。 | 619| uint64_t spanId | 需要设置的分支ID。 | 620 621### OH_HiTrace_GetParentSpanId() 622 623``` 624uint64_t OH_HiTrace_GetParentSpanId(const HiTraceId *id) 625``` 626 627**描述** 628 629获取当前HiTraceId中的父分支ID。 630 631**系统能力:** SystemCapability.HiviewDFX.HiTrace 632 633**起始版本:** 12 634 635 636**参数:** 637 638| 参数项 | 描述 | 639| -- | -- | 640| [const HiTraceId](capi-hitrace-hitraceid.md) *id | 需要获取父分支ID的[HiTraceId](capi-hitrace-hitraceid.md)。 | 641 642**返回:** 643 644| 类型 | 说明 | 645| -- | -- | 646| uint64_t | [HiTraceId](capi-hitrace-hitraceid.md)中设置的父分支ID。 | 647 648### OH_HiTrace_SetParentSpanId() 649 650``` 651void OH_HiTrace_SetParentSpanId(HiTraceId *id, uint64_t parentSpanId) 652``` 653 654**描述** 655 656设置HiTraceId结构的parentSpanId字符。 657 658**系统能力:** SystemCapability.HiviewDFX.HiTrace 659 660**起始版本:** 12 661 662 663**参数:** 664 665| 参数项 | 描述 | 666| -- | -- | 667| [HiTraceId](capi-hitrace-hitraceid.md) *id | 需要设置父分支ID的[HiTraceId](capi-hitrace-hitraceid.md)。 | 668| uint64_t parentSpanId | 需要设置的父分支ID。 | 669 670### OH_HiTrace_IdToBytes() 671 672``` 673int OH_HiTrace_IdToBytes(const HiTraceId* id, uint8_t* pIdArray, int len) 674``` 675 676**描述** 677 678将HiTraceId转换为字节数组,用于缓存或者通信传递。 679 680**系统能力:** SystemCapability.HiviewDFX.HiTrace 681 682**起始版本:** 12 683 684 685**参数:** 686 687| 参数项 | 描述 | 688| -- | -- | 689| [const HiTraceId](capi-hitrace-hitraceid.md)* id | 需要转换的[HiTraceId](capi-hitrace-hitraceid.md)。 | 690| uint8_t* pIdArray | 字节数组。 | 691| int len | 字节数组长度。 | 692 693**返回:** 694 695| 类型 | 说明 | 696| -- | -- | 697| int | 转换后的字节数组长度。 | 698 699### OH_HiTrace_StartTrace() 700 701``` 702void OH_HiTrace_StartTrace(const char *name) 703``` 704 705**描述** 706 707标记一个同步跟踪耗时任务的开始。<br> 同步跟踪打点接口OH_HiTrace_StartTrace()和OH_HiTrace_FinishTrace()必须配对使用。<br> OH_HiTrace_StartTrace()和OH_HiTrace_FinishTrace()函数对可以嵌套使用,跟踪解析时使用栈式数据结构进行匹配。<br> 从API version 19开始,建议使用OH_HiTrace_StartTraceEx()接口,以便分级控制跟踪输出。<br> 708 709**系统能力:** SystemCapability.HiviewDFX.HiTrace 710 711**起始版本:** 10 712 713 714**参数:** 715 716| 参数项 | 描述 | 717| -- | -- | 718| const char *name | 跟踪的名字。 | 719 720### OH_HiTrace_FinishTrace() 721 722``` 723void OH_HiTrace_FinishTrace(void) 724``` 725 726**描述** 727 728标记一个同步跟踪耗时任务的结束。<br> 必须和OH_HiTrace_StartTrace()配对使用。跟踪解析时,和其前执行流程中最近的OH_HiTrace_StartTrace()进行匹配。<br> 从API version 19开始,建议使用OH_HiTrace_FinishTraceEx()接口,以便分级控制跟踪输出。<br> 729 730**系统能力:** SystemCapability.HiviewDFX.HiTrace 731 732**起始版本:** 10 733 734### OH_HiTrace_StartAsyncTrace() 735 736``` 737void OH_HiTrace_StartAsyncTrace(const char *name, int32_t taskId) 738``` 739 740**描述** 741 742标记一个异步跟踪耗时任务的开始。<br> 用于在异步操作前调用进行开始打点,异步跟踪开始和结束数据由于不是顺序发生的,所以解析时需要通过一个唯一的taskId进行识别。<br> 必须和OH_HiTrace_FinishAsyncTrace()配对使用,参数name和taskId相同的开始与结束打点相匹配,构成一个异步跟踪耗时任务。<br> 如果有多个相同name的任务需要跟踪或者对同一个任务跟踪多次,并且任务同时被执行,则每次调用的taskId需不相同。<br> 如果具有相同name的任务是串行执行的,则taskId可以相同。<br> 从API version 19开始,建议使用OH_HiTrace_StartAsyncTraceEx()接口,以便分级控制跟踪输出与跟踪聚类。<br> 743 744**系统能力:** SystemCapability.HiviewDFX.HiTrace 745 746**起始版本:** 10 747 748 749**参数:** 750 751| 参数项 | 描述 | 752| -- | -- | 753| const char *name | 异步跟踪的名字。 | 754| int32_t taskId | 异步跟踪的ID。 异步跟踪开始和结束由于不是顺序发生的,所以需要通过name和每次执行唯一的taskId进行开始和结束的匹配。 | 755 756### OH_HiTrace_FinishAsyncTrace() 757 758``` 759void OH_HiTrace_FinishAsyncTrace(const char *name, int32_t taskId) 760``` 761 762**描述** 763 764标记一个异步跟踪耗时任务的结束。<br> 在异步操作完成后如回调函数中调用,进行结束打点。<br> 和OH_HiTrace_StartAsyncTrace()配对使用,参数name和taskId必须与异步跟踪的开始打点接口的对应参数值保持一致。<br> 从API version 19开始,建议使用OH_HiTrace_FinishAsyncTraceEx()接口,以便分级控制跟踪输出。<br> 765 766**系统能力:** SystemCapability.HiviewDFX.HiTrace 767 768**起始版本:** 10 769 770 771**参数:** 772 773| 参数项 | 描述 | 774| -- | -- | 775| const char *name | 异步跟踪的名字。 | 776| int32_t taskId | 异步跟踪的ID。异步跟踪开始和结束由于不是顺序发生的,所以需要通过name和每次执行唯一的taskId进行开始和结束的匹配。 | 777 778### OH_HiTrace_CountTrace() 779 780``` 781void OH_HiTrace_CountTrace(const char *name, int64_t count) 782``` 783 784**描述** 785 786用于跟踪给定整数变量名和整数值。<br> 多次执行该接口可以跟踪给定整数变量在不同时刻的数值变化。<br> 从API version 19开始,建议使用OH_HiTrace_CountTraceEx()接口,以便分级控制跟踪输出。<br> 787 788**系统能力:** SystemCapability.HiviewDFX.HiTrace 789 790**起始版本:** 10 791 792 793**参数:** 794 795| 参数项 | 描述 | 796| -- | -- | 797| const char *name | 整数变量跟踪的名字,不必与真实变量名相同。 | 798| int64_t count | 整数值。 | 799 800### OH_HiTrace_StartTraceEx() 801 802``` 803void OH_HiTrace_StartTraceEx(HiTrace_Output_Level level, const char *name, const char *customArgs) 804``` 805 806**描述** 807 808标记一个同步跟踪耗时任务的开始,分级控制跟踪输出。<br> 同步跟踪打点接口OH_HiTrace_StartTraceEx()和OH_HiTrace_FinishTraceEx()必须配对使用。<br> OH_HiTrace_StartTraceEx()和OH_HiTrace_FinishTraceEx()函数对可以嵌套使用,跟踪解析时使用栈式数据结构进行匹配。<br> 809 810**起始版本:** 19 811 812 813**参数:** 814 815| 参数项 | 描述 | 816| -- | -- | 817| [HiTrace_Output_Level](capi-trace-h.md#hitrace_output_level) level | 跟踪输出优先级。 | 818| const char *name | 同步跟踪的名字。 | 819| const char *customArgs | 键值对,多个键值对使用逗号分隔,例"key1=value1,key2=value2"。 | 820 821### OH_HiTrace_FinishTraceEx() 822 823``` 824void OH_HiTrace_FinishTraceEx(HiTrace_Output_Level level) 825``` 826 827**描述** 828 829标记一个同步跟踪耗时任务的结束,分级控制跟踪输出。<br> 必须和OH_HiTrace_StartTraceEx()配对使用,参数level必须与同步跟踪的开始打点接口OH_HiTrace_StartTraceEx()的对应参数值一致。<br> 跟踪数据解析时,和其前执行流程中最近的OH_HiTrace_StartTraceEx()进行匹配。<br> 830 831**起始版本:** 19 832 833 834**参数:** 835 836| 参数项 | 描述 | 837| -- | -- | 838| [HiTrace_Output_Level](capi-trace-h.md#hitrace_output_level) level | 跟踪输出优先级。 | 839 840### OH_HiTrace_StartAsyncTraceEx() 841 842``` 843void OH_HiTrace_StartAsyncTraceEx(HiTrace_Output_Level level, const char *name, int32_t taskId, const char *customCategory, const char *customArgs) 844``` 845 846**描述** 847 848标记一个异步跟踪耗时任务的开始,分级控制跟踪输出。<br> 用于在异步操作执行前进行开始打点,异步跟踪开始和结束数据由于不是顺序发生的,所以解析时需要通过一个唯一的taskId进行识别。<br> 和OH_HiTrace_FinishAsyncTraceEx()配对使用,参数name和taskId相同的开始与结束打点相匹配,构成一个异步跟踪耗时任务。<br> 如果有多个相同name的任务需要跟踪或者对同一个任务跟踪多次,并且任务同时被执行,则每次调用的taskId需不相同。<br> 如果具有相同name的任务是串行执行的,则taskId可以相同。<br> 不同进程的taskId不会相互干扰。<br> 849 850**起始版本:** 19 851 852 853**参数:** 854 855| 参数项 | 描述 | 856| -- | -- | 857| [HiTrace_Output_Level](capi-trace-h.md#hitrace_output_level) level | 跟踪输出优先级。 | 858| const char *name | 异步跟踪的名字。 | 859| int32_t taskId | 异步跟踪的ID。 | 860| const char *customCategory | 自定义聚类名称,用于聚合同一类异步跟踪打点。 | 861| const char *customArgs | 键值对,多个键值对使用逗号分隔,例"key1=value1,key2=value2"。 | 862 863### OH_HiTrace_FinishAsyncTraceEx() 864 865``` 866void OH_HiTrace_FinishAsyncTraceEx(HiTrace_Output_Level level, const char *name, int32_t taskId) 867``` 868 869**描述** 870 871标记一个异步跟踪耗时任务的结束,分级控制跟踪输出。<br> 用于在异步操作完成后进行结束打点,例如在回调函数中调用。<br> 和OH_HiTrace_StartAsyncTraceEx()配对使用,参数level、name和taskId必须与异步跟踪开始打点接口的对应参数值保持一致。<br> 872 873**起始版本:** 19 874 875 876**参数:** 877 878| 参数项 | 描述 | 879| -- | -- | 880| [HiTrace_Output_Level](capi-trace-h.md#hitrace_output_level) level | 跟踪输出优先级。 | 881| const char *name | 异步跟踪的名字。 | 882| int32_t taskId | 异步跟踪的ID。 | 883 884### OH_HiTrace_CountTraceEx() 885 886``` 887void OH_HiTrace_CountTraceEx(HiTrace_Output_Level level, const char *name, int64_t count) 888``` 889 890**描述** 891 892标记一个跟踪的整数变量,分级控制跟踪输出。 893 894**起始版本:** 19 895 896 897**参数:** 898 899| 参数项 | 描述 | 900| -- | -- | 901| [HiTrace_Output_Level](capi-trace-h.md#hitrace_output_level) level | 跟踪输出优先级。 | 902| const char *name | 整数变量的名称,不必与实际变量名相同。 | 903| int64_t count | 整数值。 | 904 905### OH_HiTrace_IsTraceEnabled() 906 907``` 908bool OH_HiTrace_IsTraceEnabled(void) 909``` 910 911**描述** 912 913判断当前是否开启应用trace捕获。 914 915**起始版本:** 19 916 917**返回:** 918 919| 类型 | 说明 | 920| -- | -- | 921| bool | 使用hitrace命令行工具等方式开启采集时返回true。<br> 未开启采集或停止采集后返回false,此时调用HiTraceMeter性能跟踪打点接口无效。 | 922 923 924