webrtc中的日志存在RTC_LOG系列,还存在tracing系列,
今天分析tracing日志功能类,他附加的会打印出, 时间,线程id,进程id。默认情况下不会开启的,只有通过主动开启,才会生效。
c++用法:
#include “rtc_base/event_tracer.h”
// 启动tracer模块,只有执行以后才会进行的打印
rtc::tracing::SetupInternalTracer();
// 设置生成的tracer日志文件的位置
rtc::tracing::StartInternalCapture(“d://1243.txt”);
android用法:
// 设置生成的tracer日志文件的位置
PeerConnectionFactory::startInternalTracingCapture("/sdcard/134.txt")
//一系列的宏定义,
// tag:类型 “webrtc” 可以用于分类
// 输出的参数内容: “VideoReceiveStream::StartNextDecode”
TRACE_EVENT0(“webrtc”, “VideoReceiveStream::StartNextDecode”);
具体的输出格式:
“ph:” 定义的一系列特定标志, 例如上面的 TRACE_EVENT0宏,先输出"B",当日志成功插入到日志输出队列后再输出"E"
TRACE_EVENT0 先插入B 后插入E
TRACE_EVENT_INSTANT0 插入I标志的宏,具体查看trace_event.h ,我没有仔细研究
“ts”: 插入时间点,ms
“pid”: 进程id
“tid”: 线程id
,{ “name”: “VideoReceiveStream::StartNextDecode”, “cat”: “webrtc”, “ph”: “B”, “ts”: 84810757000, “pid”: 1, “tid”: 9136}
,{ “name”: “FrameBuffer::NextFrame”, “cat”: “webrtc”, “ph”: “B”, “ts”: 84810757000, “pid”: 1, “tid”: 9136}
,{ “name”: “FrameBuffer::NextFrame”, “cat”: “webrtc”, “ph”: “E”, “ts”: 84810757000, “pid”: 1, “tid”: 9136}
,{ “name”: “VideoReceiveStream::StartNextDecode”, “cat”: “webrtc”, “ph”: “E”, “ts”: 84810757000, “pid”: 1, “tid”: 9136}
实现原理:
event_tracer.cc
tracing启动一个输出线程,一直扫描日志队列,有内容则输出
EventLogger::Log(){
while(1){
shutdown_event_.Wait(100);
print( queue.pop());
}
}
AddTraceEvent源源不断的填充日志到队列中
EventLogger::AddTraceEvent(){
queue.push();
}