无论在哪层,都需要TAG,JAVA层的TAG在Trace.java里定义:
29 public final class Trace {
30 // These tags must be kept in sync withframeworks/native/include/utils/Trace.h.
31 public static final long TRACE_TAG_NEVER = 0;
32 public static final long TRACE_TAG_ALWAYS = 1L << 0;
33 public static final long TRACE_TAG_GRAPHICS = 1L << 1;
34 public static final long TRACE_TAG_INPUT = 1L << 2;
35 public static final long TRACE_TAG_VIEW = 1L << 3;
36 public static final long TRACE_TAG_WEBVIEW = 1L << 4;
37 public static final long TRACE_TAG_WINDOW_MANAGER = 1L << 5;
38 public static final long TRACE_TAG_ACTIVITY_MANAGER = 1L << 6;
39 public static final long TRACE_TAG_SYNC_MANAGER = 1L << 7;
40 public static final long TRACE_TAG_AUDIO = 1L << 8;
41 public static final long TRACE_TAG_VIDEO = 1L << 9;
42
43 public static final int TRACE_FLAGS_START_BIT = 1;
44 public static final String[] TRACE_TAGS = {
45 "Graphics", "Input", "View","WebView", "Window Manager",
46 "Activity Manager", "Sync Manager","Audio", "Video",
47 };
Native的TAG定义在Trace.h里面:
43 #define ATRACE_TAG_NEVER 0 // The "never" tag is neverenabled.
44#define ATRACE_TAG_ALWAYS (1<<0) // The"always" tag is always enabled.
45#define ATRACE_TAG_GRAPHICS (1<<1)
46#define ATRACE_TAG_INPUT (1<<2)
47#define ATRACE_TAG_VIEW (1<<3)
48#define ATRACE_TAG_WEBVIEW (1<<4)
49#define ATRACE_TAG_WINDOW_MANAGER (1<<5)
50#define ATRACE_TAG_ACTIVITY_MANAGER (1<<6)
51#define ATRACE_TAG_SYNC_MANAGER (1<<7)
52#define ATRACE_TAG_AUDIO (1<<8)
53#define ATRACE_TAG_VIDEO (1<<9)
54#define ATRACE_TAG_LAST ATRACE_TAG_VIDEO
TAG的值都是一样的,只是对于不同代码层,都进行了定义。
在java层代码了,比如ViewRootImplementation.java里追踪performTraversals:
1132 Trace.traceBegin(Trace.TRACE_TAG_VIEW, "performTraversals");
1133 try {
1134 performTraversals();
1135 } finally {
1136 Trace.traceEnd(Trace.TRACE_TAG_VIEW);
1137 }
在native层代码了,比如Surfaceflinger.cpp里追踪handleRepaint:
917 void SurfaceFlinger::handleRepaint()
918{
919 ATRACE_CALL();
当然,要在代码的开始处定义TAG,在Surfaceflinger.cpp文件开头,有如下定义:
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
而且使用ATRACE_CALL(),为了跟踪函数的时间准确,最好在函数的开头使用。
在native层里,还可以跟踪数值的变化,如InputDispatcher.cpp里跟踪触屏滑动x、y轴的值:
2513 ATRACE_INT("INPUT_DISPATCHER_X",args->pointerCoords[i]. getAxisValue(AMOTION_EVENT_AXIS_X));
2514 ATRACE_INT("INPUT_DISPATCHER_Y",args->pointerCoords[i]. getAxisValue(AMOTION_EVENT_AXIS_Y));
2515 }
如果有需要,我们可以再自己的代码热点添加自己的追踪函数。