1# 1、SDK接口说明 2 3### 1.1 SDK对开发者开放的接口(位于文件sdk/sdk/ts_sdk_api.h,示例代码位于plugin目录下) 4 5###### **设置对应的表名称** ,用户可选择调用。如不调用该接口,则默认的表名分别为counter_table, gpu_counter_object, slice_table, slice_object_table 6 7`counterObjectTableName: countObject表名` 8 9`counterTableName: counterTableName表名` 10 11`sliceObjectTableName: sliceObjectTableName表名` 12 13`sliceTableName: sliceTableName表名` 14 15``` 16int SDK_SetTableName(std::string counterObjectTableName, std::string 17counterTableName, std::string sliceObjectTableName, std::string 18sliceTableName); 19``` 20 21###### 添加counter业务ID和名称对应关系表。 22 23`counterId: counter唯一标识。` 24 25`columnName: counter名称。` 26 27`return: 成功返回0,失败返回-1。` 28 29``` 30int SDK_AppendCounterObject(int counterId, const char* columnName) 31``` 32 33###### ******添加counter****业务表字段** 34 35`counterId: counter唯一标识` 36 37`ts: 时间戳` 38 39`value: counter值` 40 41`return: 成功返回0,失败返回-1` 42 43``` 44int SDK_AppendCounter (int counterId, uint64_t ts, int value) 45``` 46 47###### **添加slice业务ID和名称对应关系表** 48 49`sliceId: slice唯一标识` 50 51`columnName: slice名称` 52 53`return: 成功返回0,失败返回-1` 54 55``` 56int SDK_AppendSliceObject(int sliceId, const char* columnName) 57``` 58 59###### ******添加slice****业务表字段** 60 61`sliceId: slice唯一标识` 62 63`ts: 起始时间戳` 64 65`endTs: 结束时间戳` 66 67`value: slice值` 68 69`return: 成功返回0,失败返回-1` 70 71``` 72int SDK_AppendSlice(int sliceId, uint64_t ts, uint64_t endTs, int value) 73``` 74 75### 1.2 TraceStreamer SDK需用户实现的功能(plugin目录下) 76 77###### 使用TraceStreamerSDK,用户需要实现2个功能: 78 79`1. sdk_plugin_init_table_name:设置用来保存slice数据和counter数据的4张数据表;` 80 81`2. sdk_plugin_data_parser:实现数据解析,并在解析到对应的数据时,使用1.1中的api即可,之后,上层IDE使用目录2中的方法,即可实现TraceStreamer和第三方插件(基于SDK开发)的数据互通。` 82 83### 1.3 TraceStreamer SDK修改配置项 84 85如需修改界面展示名称或其他配置项,可在目录sdk/sdk/sdk_data_parser.h中修改86行后settingConfig之后的配置。 86 87 88 89### 1.4 不同名称的sdk编译方法 90 91###### 1.4.1 新增proto文件后,如果文件格式和mockdata一致,则只需要修改wasm编译名称。 以下是需要修改的脚本文件: 92 931. `最外层BUILD.gn文件中24行修改为需要生成的wasm名称。` 94 95  962. `sdk/BUILD.gn文件20行名称修改为需要生成的wasm名称。` 97 98  993. `sdk/BUILD.gn文件163行后wasm_lib和name对应的参数修改为需要生成的wasm名称。` 100 101  102 103###### 1.4.2 新增proto文件后,如果proto文件格式和原有的mockdata格式不一致,则需要用户自己通过proto文件导出对应的pb.cc文件,并完成数据解析代码。以下是导出proto文件需要修改的脚本。 104 1051. `sdk/BUILD.gn文件35行后include_dirs中新增对应的gpu_data目录。` 106  1072. `sdk/BUILD.gn文件102行后include_dirs中新增对应的gpu_data目录。` 108  1093. `sdk/plugin/BUILD.gn文件中21行include_dirs中新增对应的gpu_data目录` 110  1114. `sdk/protos/BUILD.gn文件中17行下面增加gpu_data目录` 112 113  1145. `sdk/protos/BUILD.gn文件中49行sources内增加proto文件生成的pb.cc文件名称(该文件sdk/protos/protogen.sh生成,和proto文件只有后缀不同)` 115 116  1176. `sdk/protos/protogen.sh文件中23行后增加gpu_data路径定义,25行proto_array中增加proto文件路径` 118 119  1207. `sdk/protos/protogen.sh文件中35行新增gpu_data路径定义。` 121 122  123 124修改完成后,执行./sdk/protos/protogen.sh,即可生成对应的gpu_plugin_result.pb.cc文件,路径为third_party/protogen/types/plugins/gpu_data。完成1.2的解析功能后,按照1.4.1修改编译的wasm名称,执行./build.sh sdkdemo,即可得到trace_streamer_sdk_gpu_builtin.js和trace_streamer_sdk_gpu_builtin_wasm文件。 125 126# 2、 其他 127 128### 2.1 TraceStreamer WebAssembly接口模式 129 130通过封装相关数据解析接口,并且使用emsdk作为编译工具,本应用可以嵌入浏览器中运行。提供了如下接口: 131 132###### **初始化wasm,在JS中注册回调函数,并返回一段可复用的内存空间,由JS调用。** 133 134`replyFunction: 回调函数` 135 136`reqBufferSize: 返回的内存长度。` 137 138`return: 返回一段内存地址给JS。` 139 140``` 141EMSCRIPTEN_KEEPALIVE uint8_t* Initialize(ReplyFunction replyFunction, uint32_t reqBufferSize) 142``` 143 144###### 更新起始结束时间,由JS调用。 145 146`len: 起始和结束时间组成的字符串长度` 147 148`return: 成功返回0。` 149 150``` 151EMSCRIPTEN_KEEPALIVE int UpdateTraceTime(int len) 152``` 153 154###### **设置ts和第三方wasm通信的回调函数,并返回一段内存,由JS调用。** 155 156`sendDataCallBack:与第三方wasm通信的回调函数。` 157 158`reqBufferSize: 返回的内存长度。` 159 160`return: 成功返回0。` 161 162``` 163EMSCRIPTEN_KEEPALIVE uint8_t* TraceStreamer_Set_ThirdParty_DataDealer(SendDataCallBack sendDataCallBack, uint32_t reqBufferSize) 164``` 165 166###### **TS的数据解析接口,由JS调用。** 167 168`dataLen: 需要解析的数据源长度。` 169 170`return: 成功返回0,失败返回-1。` 171 172``` 173EMSCRIPTEN_KEEPALIVE int TraceStreamerParseDataEx(int dataLen) 174``` 175 176###### **TS停止解析数据,由JS调用。** 177 178`return: 成功返回0,失败返回-1。` 179 180``` 181EMSCRIPTEN_KEEPALIVE int TraceStreamerParseDataOver() 182``` 183 184###### **数据库操作接口,由JS调用。** 185 186`sqlLen: 需要执行的操作类sql语句长度。` 187 188`return: 成功返回0,失败返回-1。` 189 190``` 191EMSCRIPTEN_KEEPALIVE int TraceStreamerSqlOperateEx(int sqlLen) 192``` 193 194###### **清空wasm内存中的内容,由JS调用。** 195 196`return: 成功返回0,失败返回-1。` 197 198``` 199EMSCRIPTEN_KEEPALIVE int TraceStreamerReset() 200``` 201 202###### **执行查询类sql语句,由JS调用。** 203 204`sqlLen: 需要执行的查询类sql语句长度。` 205 206`return: 成功返回0,失败返回-1。` 207 208``` 209EMSCRIPTEN_KEEPALIVE int TraceStreamerSqlQueryEx(int sqlLen) 210``` 211 212###### **取消sql查询,由JS调用。** 213 214`return: 成功返回0。` 215 216``` 217EMSCRIPTEN_KEEPALIVE int TraceStreamerCancel() 218``` 219 220###### **发送数据给第三方wasm解析,由TS调用。** 221 222`pluginData: 第三方插件的数据源。` 223 224`len: 数据源长度。` 225`componentName: 第三方插件名称。` 226 227`return: 成功返回0。` 228 229``` 230int TraceStreamer_Plugin_Out_SendData(const char* pluginData, int len, const std::string componentName) 231``` 232 233###### **初始化配置接口,由JS调用。** 234 235`dataLen: 配置字符串的长度。` 236 237`return: 成功返回0。` 238 239``` 240EMSCRIPTEN_KEEPALIVE int TraceStreamer_Init_ThirdParty_Config(int dataLen) 241``` 242 243WebAssembly通过非异步的通信方式和上层交互数据。 244 245### 2.2 SDK对IDE开放的接口(位于sdk/sdk/wasm_func.h) 246 247###### **初始化SDK,在JS中注册回调函数,并返回一段可复用的内存空间,由JS调用。** 248 249`queryResultCallbackFunction: 回调函数` 250 251`reqBufferSize: 返回的内存长度。` 252 253`return: 返回一段内存地址给JS。` 254 255``` 256EMSCRIPTEN_KEEPALIVE uint8_t* Init(QueryResultCallbackFunction queryResultCallbackFunction, uint32_t reqBufferSize) 257``` 258 259###### **初始化一段内存空间,在JS中注册回调函数,用来传递SDK时间同步消息,由JS调用。** 260 261`traceRangeCallbackFunction: 回调函数` 262 263`reqBufferSize: 返回的内存长度。` 264 265`return: 返回一段内存地址给JS。` 266 267``` 268EMSCRIPTEN_KEEPALIVE uint8_t* InitTraceRange(TraceRangeCallbackFunction traceRangeCallbackFunction, uint32_treqBufferSize) 269``` 270 271###### **通知SDK数据解析完成。** 272 273`return: 返回一段内存地址给JS。` 274 275``` 276EMSCRIPTEN_KEEPALIVE int TraceStreamer_In_ParseDataOver() 277``` 278 279###### **获取SDK的json配置,由JS调用。** 280 281`return: 成功返回0。` 282 283``` 284EMSCRIPTEN_KEEPALIVE int TraceStreamer_In_JsonConfig() 285``` 286 287###### **数据解析接口,由JS调用。** 288 289`len: 数据源长度` 290 291`componentId: 第三方wasm插件ID` 292 293`return: 成功返回0。` 294 295``` 296EMSCRIPTEN_KEEPALIVE int ParserData(int len, int componentId) 297``` 298 299###### **查询类sql接口,由JS调用。** 300 301`sqlLen: 查询类sql长度` 302 303`return: 成功返回0。` 304 305``` 306EMSCRIPTEN_KEEPALIVE int TraceStreamerSqlQueryEx(int sqlLen) 307``` 308 309###### **初始化一段内存空间给JS,用来传递SDK的插件名称,由JS调用。** 310 311`reqBufferSize: 插件名称占用空间大小` 312`return: 成功返回0。` 313 314``` 315EMSCRIPTEN_KEEPALIVE int InitPluginName(uint32_t reqBufferSize) 316``` 317 318###### **JS将插件名称写入初始化后的空间内,TS处理后即可获取插件名称,由JS调用。** 319 320`pluginLen: 传给JS的空间大小` 321`return: 成功返回0。` 322 323``` 324EMSCRIPTEN_KEEPALIVE int TraceStreamerGetPluginNameEx(int pluginLen) 325``` 326