trace_streamer是一个trace数据流转化器,可以将一个trace文本文件或者基于proto序列化的二进制文件转换成为sqlite数据库的形式。 trace_streamer使用C++实现,支持在ohos, linux, mac等系统上使用,具有良好的跨平台特性。
trace_streamer工具可以2种方式使用
在导出db模式下,trace_streamer.exe trace文件路径名 -e 导出db路径名.db
此命令可以将trace文件转为db
本应用支持在ohos, linux, windows, mac使用。
关于db文件的说明:
使用db查看工具查看stat表,可以浏览当前数据一共有多少类数据,各类数据都收到多少条,数据是否正常等情况。在meta表会记录数据库导出时的一些系统信息,比如导入和导出的文件全路径,解析时间等信息。
meta表可以选择不导出(有些情况下会暴露系统敏感信息),在导出时添加 -nm选项即可。
在数据导出之后,会在本地目录下生成一个trace_streamer.log文件,在导出db的目录下生成一个数据库文件同名,.db.ohos.ts后缀的文件
文件内容如下:
时间戳:执行结果(数字)
应用运行时间
执行结果解释如下:0 代表执行成功 1 表示输入文件不匹配, 2 表示解析错误, 3其他错误
trace_streamer可以WebAssembly方式在浏览器中运行,暴露如下接口给js
extern "C" {
/* 上传trace数据
*
* @data: 数据的缓冲区
* @dataLen: 数据长度
*
* return: 0:成功; -1:失败
*/
EMSCRIPTEN_KEEPALIVE int TraceStreamerParseData(const uint8_t* data, int dataLen);
/* 通知TS上传trace数据结束
*
* return: 0:成功; -1:失败
*/
EMSCRIPTEN_KEEPALIVE int TraceStreamerParseDataOver();
/* 通过sql语句操作数据库
*
* @sql: sql语句
* @sqlLen: sql语句长度
*
* return: 0:成功; -1:失败
*/
EMSCRIPTEN_KEEPALIVE int TraceStreamerSqlOperate(const uint8_t* sql, int sqlLen);
/* 通过sql语句查询数据库
*
* @sql: sql语句
* @sqlLen: sql语句长度
* @out: 查询结果的缓冲区,查询结果为json
* @outLen: 缓冲区长度
*
* return: >0:查询成功,返回查询结果数据长度; -1:失败
*/
EMSCRIPTEN_KEEPALIVE int TraceStreamerSqlQuery(const uint8_t* sql, int sqlLen, uint8_t* out, int outLen);
} // extern "C"
./trace_streamer --help
-i 选项可查看应用支持的事件源和具体的事件名列表
支持的事件列表参见<<SupportEventList.md>>
在通用操作系统中,进程号(pid/tgid)和线程号(tid)可能会被重复用于标识不同的进程或者线程。所以在trace数据源中,进程号(pid)和线程号(tid)也可能被重用。
TraceStreamer在解析数据过程中,使用ipid(internal pid)唯一标识进程, itid(internal tid)唯一标识线程。
用来记录系统中各种随时间连续变化的数值。例如: CPU的频率, 内存的使用量, 界面刷新频率。
CPU频率:
内存占用:
TraceStreamer设计过程中使用了流式处理的思想,数据从入口进入以后,就像进入一条河流,从上游流向下游,在河道中央有很多过滤器,每种过滤器会将流过的数据中自己关注的内容吸附捕捉到。最终,每个过滤器都拥有了大量同类型的数据,而且这些数据都是按时间序列排列的。TraceStreamer使用filterid来标识同一种用途的数据,可以方便在UI中绘制。
![image][filterimageid]
具体内容参见 des_stat
本应用使用gn作为构建工具。
ubuntu和mac使用vscode
本应用依赖与sqlite,protobuf(htrace解析部分依赖)
本应用同时依赖于src/protos目录下文件来生成相关pb.h,pb.cc文件
在根目录下执行相关命令进行编译
在根目录下执行相关命令进行编译
具体方法可参考compile_trace_streamer