Android systrace 系统的 C++ 宏定义
宏定义详解
1. 基础检查宏
#define ATRACE_ENABLED() atrace_is_tag_enabled(ATRACE_TAG)
• 作用:检查指定的 trace tag 是否启用
• 用途:在需要复杂计算的 trace 前先检查,避免不必要的性能开销
2. 作用域跟踪宏(推荐使用)
#define ATRACE_NAME(name) ::android::ScopedTrace PASTE(___tracer, __LINE__)(ATRACE_TAG, name)
#define ATRACE_CALL() ATRACE_NAME(__FUNCTION__)
• ATRACE_NAME(name):创建一个作用域跟踪区间
• ATRACE_CALL():自动使用当前函数名作为跟踪名称
• 特点:利用 RAII 机制,构造时开始跟踪,析构时自动结束
3. 手动开始/结束宏
#define ATRACE_BEGIN(name) atrace_begin(ATRACE_TAG, name)
#define ATRACE_END() atrace_end(ATRACE_TAG)
• 需要手动配对使用
• 适用于非块状结构的跟踪
4. 数值跟踪宏
#define ATRACE_INT(name, value) atrace_int(ATRACE_TAG, name, value)
• 用于跟踪整数值的变化(如计数器、状态值等)
5. 异步操作跟踪宏
#define ATRACE_ASYNC_BEGIN(name, cookie) atrace_async_begin(ATRACE_TAG, name, cookie)
#define ATRACE_ASYNC_END(name, cookie) atrace_async_end(ATRACE_TAG, name, cookie)
• 用于跟踪跨线程的异步操作
• 通过 cookie 标识关联的开始和结束事件
6.使用示例
void processData() {
ATRACE_CALL(); // 自动跟踪整个函数执行时间
// 手动跟踪特定代码段
ATRACE_BEGIN("data_processing");
// ... 处理逻辑
ATRACE_END();
// 跟踪数值
static int counter = 0;
ATRACE_INT("processing_counter", ++counter);
// 异步操作跟踪
ATRACE_ASYNC_BEGIN("network_request", request_id);
// 发起异步请求...
}
// 在另一个线程中结束异步跟踪
void onRequestComplete(int request_id) {
ATRACE_ASYNC_END("network_request", request_id);
}
1754

被折叠的 条评论
为什么被折叠?



