1# HiCollie 2 3 4## 概述 5 6提供检测业务线程卡死或卡顿的能力。请注意:要在非业务线程中调用。 7 8本模块函数可用于: 9 10(1)注册应用业务线程卡死的周期性检测任务; 11 12(2)注册应用业务线程卡顿检测的回调函数; 13 14(3)上报应用业务线程卡死事件。 15 16**起始版本:** 12 17 18 19## 汇总 20 21 22### 文件 23 24| 名称 | 描述 | 25| -------- | -------- | 26| [hicollie.h](hicollie_8h.md) | HiCollie模块对外提供检测业务线程卡死、卡顿,以及上报卡死事件的能力。 | 27 28 29### 结构体 30 31| 名称 | 描述 | 32| -------- | -------- | 33| struct [HiCollie_DetectionParam](_hi_collie___detection_param.md) | 用于检测业务线程卡顿的参数。请注意,这些参数对API 12无效,仅用于扩展。 | 34 35 36### 类型定义 37 38| 名称 | 描述 | 39| -------- | -------- | 40| typedef enum [HiCollie_ErrorCode](#hicollie_errorcode) [HiCollie_ErrorCode](#hicollie_errorcode) | 错误码定义。 | 41| typedef void(\* [OH_HiCollie_Task](#oh_hicollie_task)) (void) | 在业务线程卡死检测中,通过实现该函数来检测业务线程是否卡住。<br/>HiCollie将在独立线程中每3秒调用一次该函数。<br/>例如:该函数可实现向业务线程发送消息。在业务线程接收到消息之后,设置一个标记,通过检查这个标记,可以知道业务线程是否卡住。 | 42| typedef void(\* [OH_HiCollie_BeginFunc](#oh_hicollie_beginfunc)) (const char \*eventName) | 事件处理前调用该函数。在卡顿检测中, 通过实现该函数来记录业务线程处理事件的开始时间。 | 43| typedef void(\* [OH_HiCollie_EndFunc](#oh_hicollie_endfunc)) (const char \*eventName) | 事件处理后调用该函数。在卡顿检测中, 通过实现该函数来检测业务线程处理事件是否卡顿。<br/>通过检查处理事件的执行时间,HiCollie将知道每个事件的持续时间。如果超过预设阈值(150ms~450ms),将上报卡顿事件。 | 44| typedef struct [HiCollie_DetectionParam](_hi_collie___detection_param.md) [HiCollie_DetectionParam](#hicollie_detectionparam) | 用于检测业务线程卡顿的参数。请注意,这些参数对API 12无效,仅用于扩展。 | 45 46 47### 枚举 48 49| 名称 | 描述 | 50| -------- | -------- | 51| [HiCollie_ErrorCode](#hicollie_errorcode) { HICOLLIE_SUCCESS = 0, HICOLLIE_INVALID_ARGUMENT = 401, HICOLLIE_WRONG_THREAD_CONTEXT = 29800001, HICOLLIE_REMOTE_FAILED = 29800002 } | 错误码定义。 | 52 53 54### 函数 55 56| 名称 | 描述 | 57| -------- | -------- | 58| [HiCollie_ErrorCode](#hicollie_errorcode) [OH_HiCollie_Init_StuckDetection](#oh_hicollie_init_stuckdetection) ([OH_HiCollie_Task](#oh_hicollie_task) task) | 注册应用业务线程卡死的周期性检测任务。用户实现回调函数, 用于定时检测业务线程卡死情况。 | 59| [HiCollie_ErrorCode](#hicollie_errorcode) [OH_HiCollie_Init_JankDetection](#oh_hicollie_init_jankdetection) ([OH_HiCollie_BeginFunc](#oh_hicollie_beginfunc) \*beginFunc, [OH_HiCollie_EndFunc](#oh_hicollie_endfunc) \*endFunc, [HiCollie_DetectionParam](_hi_collie___detection_param.md) param) | 注册应用业务线程卡顿检测的回调函数。<br/>线程卡顿监控功能需要开发者实现两个卡顿检测回调函数, 分别放在业务线程处理事件的前后。作为插桩函数,监控业务线程处理事件执行情况。 | 60| [HiCollie_ErrorCode](#hicollie_errorcode) [OH_HiCollie_Report](#oh_hicollie_report) (bool \*isSixSecond) | 用于上报应用业务线程卡死事件,生成超时故障日志,辅助定位应用超时问题。<br/>结合OH_HiCollie_Init_StuckDetection接口配套使用,先初始化卡死检测,出现卡死时,再上报事件。 | 61 62 63## 类型定义说明 64 65 66### HiCollie_DetectionParam 67 68``` 69typedef struct HiCollie_DetectionParamHiCollie_DetectionParam 70``` 71**描述** 72用于检测业务线程卡顿的参数。请注意,这些参数对API 12无效,仅用于扩展。 73 74**起始版本:** 12 75 76 77### HiCollie_ErrorCode 78 79``` 80typedef enum HiCollie_ErrorCodeHiCollie_ErrorCode 81``` 82**描述** 83错误码定义。 84 85**起始版本:** 12 86 87 88### OH_HiCollie_BeginFunc 89 90``` 91typedef void(* OH_HiCollie_BeginFunc) (const char *eventName) 92``` 93**描述** 94事件处理前调用该函数。在卡顿检测中, 通过实现该函数来记录业务线程处理事件的开始时间。 95 96**起始版本:** 12 97 98**参数:** 99 100| 名称 | 描述 | 101| -------- | -------- | 102| eventName | 业务线程处理事件的名字。 | 103 104 105### OH_HiCollie_EndFunc 106 107``` 108typedef void(* OH_HiCollie_EndFunc) (const char *eventName) 109``` 110**描述** 111事件处理后调用该函数。在卡顿检测中, 通过实现该函数来检测业务线程处理事件是否卡顿。 112 113通过检查处理事件的执行时间,HiCollie将知道每个事件的持续时间。如果超过预设阈值(150ms~450ms),将上报卡顿事件。 114 115**起始版本:** 12 116 117**参数:** 118 119| 名称 | 描述 | 120| -------- | -------- | 121| eventName | 业务线程处理事件的名字。 | 122 123 124### OH_HiCollie_Task 125 126``` 127typedef void(* OH_HiCollie_Task) (void) 128``` 129**描述** 130在业务线程卡死检测中,通过实现该函数来检测业务线程是否卡住。 131 132HiCollie将在独立线程中每3秒调用一次该函数。 133 134例如:该函数可实现向业务线程发送消息。在业务线程接收到消息之后,设置一个标记,通过检查这个标记,可以知道业务线程是否卡住。 135 136**起始版本:** 12 137 138 139## 枚举类型说明 140 141 142### HiCollie_ErrorCode 143 144``` 145enum HiCollie_ErrorCode 146``` 147**描述** 148错误码定义。 149 150**起始版本:** 12 151 152| 枚举值 | 描述 | 153| -------- | -------- | 154| HICOLLIE_SUCCESS | 成功。 | 155| HICOLLIE_INVALID_ARGUMENT | 无效参数。可能的原因:1. 参数传值问题;2. 参数类型问题。 | 156| HICOLLIE_WRONG_THREAD_CONTEXT | 检测的线程错误:在业务线程中调用。 | 157| HICOLLIE_REMOTE_FAILED | 远程调用错误。 | 158 159 160## 函数说明 161 162 163### OH_HiCollie_Init_JankDetection() 164 165``` 166HiCollie_ErrorCode OH_HiCollie_Init_JankDetection (OH_HiCollie_BeginFunc * beginFunc, OH_HiCollie_EndFunc * endFunc, HiCollie_DetectionParam param ) 167``` 168**描述** 169注册应用业务线程卡顿检测的回调函数。 170 171线程卡顿监控功能需要开发者实现两个卡顿检测回调函数, 分别放在业务线程处理事件的前后。作为插桩函数,监控业务线程处理事件执行情况。 172 173**起始版本:** 12 174 175**参数:** 176 177| 名称 | 描述 | 178| -------- | -------- | 179| beginFunc | 检测业务线程处理事件前的函数。 | 180| endFunc | 检测业务线程处理事件后的函数。 | 181| param | 扩展参数以供将来使用。 | 182 183**返回:** 184 185HICOLLIE_SUCCESS 0 - 成功。 186 187HICOLLIE_INVALID_ARGUMENT 401 - 开始函数和结束函数两者都必须有值或为空,否则将返回该错误值。 188 189HICOLLIE_WRONG_THREAD_CONTEXT 29800001 - 调用线程错误。无法从主线程调用该函数。 190 191 192### OH_HiCollie_Init_StuckDetection() 193 194``` 195HiCollie_ErrorCode OH_HiCollie_Init_StuckDetection (OH_HiCollie_Task task) 196``` 197**描述** 198注册应用业务线程卡死的周期性检测任务。用户实现回调函数, 用于定时检测业务线程卡死情况。 199 200**起始版本:** 12 201 202**参数:** 203 204| 名称 | 描述 | 205| -------- | -------- | 206| task | 每3秒执行一次的周期性检测任务,用于检测业务线程是否卡住。 | 207 208**返回:** 209 210HICOLLIE_SUCCESS 0 - 成功。 211 212HICOLLIE_WRONG_THREAD_CONTEXT 29800001 - 调用线程错误。无法从主线程调用该函数。 213 214 215### OH_HiCollie_Report() 216 217``` 218HiCollie_ErrorCode OH_HiCollie_Report (bool * isSixSecond) 219``` 220**描述** 221用于上报应用业务线程卡死事件,生成超时故障日志,辅助定位应用超时问题。 222 223结合OH_HiCollie_Init_StuckDetection接口配套使用,先初始化卡死检测,出现卡死时,再上报事件。 224 225**起始版本:** 12 226 227**参数:** 228 229| 名称 | 描述 | 230| -------- | -------- | 231| isSixSecond | 布尔指针。布尔指针的值。如果卡住6秒,则为真。如果卡住3秒,则为False。 | 232 233**返回:** 234 235HICOLLIE_SUCCESS 0 - 成功。 236 237HICOLLIE_INVALID_ARGUMENT 401 - 开始函数和结束函数两者都必须有值或为空,否则将返回该错误值。 238 239HICOLLIE_WRONG_THREAD_CONTEXT 29800001 - 调用线程错误。无法从主线程调用该函数。 240 241HICOLLIE_REMOTE_FAILED 29800002 - 远程调用错误。 242