Commit | Line | Data |
---|---|---|
4918b8f2 | 1 | package org.eclipse.linuxtools.internal.tmf.core;\r |
8c8bf09f | 2 | \r |
550d787e FC |
3 | import java.io.BufferedWriter;\r |
4 | import java.io.FileWriter;\r | |
5 | import java.io.IOException;\r | |
ce2388e0 | 6 | import java.io.OutputStreamWriter;\r |
550d787e | 7 | \r |
8c8bf09f | 8 | import org.eclipse.core.runtime.Platform;\r |
6c13869b FC |
9 | import org.eclipse.linuxtools.tmf.core.component.ITmfComponent;\r |
10 | import org.eclipse.linuxtools.tmf.core.component.ITmfDataProvider;\r | |
72f1e62a | 11 | import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;\r |
6c13869b FC |
12 | import org.eclipse.linuxtools.tmf.core.request.ITmfDataRequest;\r |
13 | import org.eclipse.linuxtools.tmf.core.request.ITmfEventRequest;\r | |
14 | import org.eclipse.linuxtools.tmf.core.signal.TmfSignal;\r | |
8c8bf09f | 15 | \r |
3b38ea61 | 16 | @SuppressWarnings("nls")\r |
8c8bf09f ASL |
17 | public class Tracer {\r |
18 | \r | |
12c155f5 FC |
19 | private static String pluginID = TmfCorePlugin.PLUGIN_ID;\r |
20 | \r | |
21 | static Boolean ERROR = Boolean.FALSE;\r | |
22 | static Boolean WARNING = Boolean.FALSE;\r | |
23 | static Boolean INFO = Boolean.FALSE;\r | |
24 | \r | |
25 | static Boolean COMPONENT = Boolean.FALSE;\r | |
26 | static Boolean REQUEST = Boolean.FALSE;\r | |
27 | static Boolean SIGNAL = Boolean.FALSE;\r | |
28 | static Boolean EVENT = Boolean.FALSE;\r | |
29 | \r | |
30 | private static String LOGNAME = "trace.log";\r | |
ce2388e0 | 31 | private static BufferedWriter fTraceLog = new BufferedWriter(new OutputStreamWriter(System.out));\r |
12c155f5 FC |
32 | \r |
33 | private static BufferedWriter openLogFile(String filename) {\r | |
34 | BufferedWriter outfile = null;\r | |
35 | try {\r | |
36 | outfile = new BufferedWriter(new FileWriter(filename));\r | |
37 | } catch (IOException e) {\r | |
38 | e.printStackTrace();\r | |
39 | }\r | |
40 | return outfile;\r | |
41 | }\r | |
42 | \r | |
43 | public static void init() {\r | |
44 | \r | |
45 | String traceKey;\r | |
46 | boolean isTracing = false;\r | |
47 | \r | |
48 | traceKey = Platform.getDebugOption(pluginID + "/error");\r | |
49 | if (traceKey != null) {\r | |
50 | ERROR = (Boolean.valueOf(traceKey)).booleanValue();\r | |
51 | isTracing |= ERROR;\r | |
52 | }\r | |
53 | \r | |
54 | traceKey = Platform.getDebugOption(pluginID + "/warning");\r | |
55 | if (traceKey != null) {\r | |
56 | WARNING = (Boolean.valueOf(traceKey)).booleanValue();\r | |
57 | isTracing |= WARNING;\r | |
58 | }\r | |
59 | \r | |
60 | traceKey = Platform.getDebugOption(pluginID + "/info");\r | |
61 | if (traceKey != null) {\r | |
62 | INFO = (Boolean.valueOf(traceKey)).booleanValue();\r | |
63 | isTracing |= INFO;\r | |
64 | }\r | |
65 | \r | |
66 | traceKey = Platform.getDebugOption(pluginID + "/component");\r | |
67 | if (traceKey != null) {\r | |
68 | COMPONENT = (Boolean.valueOf(traceKey)).booleanValue();\r | |
69 | isTracing |= COMPONENT;\r | |
70 | }\r | |
71 | \r | |
72 | traceKey = Platform.getDebugOption(pluginID + "/request");\r | |
73 | if (traceKey != null) {\r | |
74 | REQUEST = (Boolean.valueOf(traceKey)).booleanValue();\r | |
75 | isTracing |= REQUEST;\r | |
76 | }\r | |
77 | \r | |
78 | traceKey = Platform.getDebugOption(pluginID + "/signal");\r | |
79 | if (traceKey != null) {\r | |
80 | SIGNAL = (Boolean.valueOf(traceKey)).booleanValue();\r | |
81 | isTracing |= SIGNAL;\r | |
82 | }\r | |
83 | \r | |
84 | traceKey = Platform.getDebugOption(pluginID + "/event");\r | |
85 | if (traceKey != null) {\r | |
86 | EVENT = (Boolean.valueOf(traceKey)).booleanValue();\r | |
87 | isTracing |= EVENT;\r | |
88 | }\r | |
89 | \r | |
90 | // Create trace log file if needed\r | |
91 | if (isTracing) {\r | |
92 | fTraceLog = openLogFile(LOGNAME);\r | |
93 | }\r | |
94 | }\r | |
95 | \r | |
96 | public static void stop() {\r | |
ce2388e0 | 97 | if (fTraceLog == null) {\r |
12c155f5 | 98 | return;\r |
ce2388e0 | 99 | }\r |
12c155f5 FC |
100 | \r |
101 | try {\r | |
102 | fTraceLog.close();\r | |
103 | fTraceLog = null;\r | |
104 | } catch (IOException e) {\r | |
105 | e.printStackTrace();\r | |
106 | }\r | |
107 | }\r | |
108 | \r | |
109 | // Predicates\r | |
110 | public static boolean isErrorTraced() {\r | |
111 | return ERROR;\r | |
112 | }\r | |
113 | \r | |
114 | public static boolean isComponentTraced() {\r | |
115 | return COMPONENT;\r | |
116 | }\r | |
117 | \r | |
118 | public static boolean isRequestTraced() {\r | |
119 | return REQUEST;\r | |
120 | }\r | |
121 | \r | |
122 | public static boolean isSignalTraced() {\r | |
123 | return SIGNAL;\r | |
124 | }\r | |
125 | \r | |
126 | public static boolean isEventTraced() {\r | |
127 | return EVENT;\r | |
128 | }\r | |
129 | \r | |
130 | // Tracers\r | |
131 | public static void trace(String msg) {\r | |
132 | long currentTime = System.currentTimeMillis();\r | |
133 | StringBuilder message = new StringBuilder("[");\r | |
134 | message.append(currentTime / 1000);\r | |
135 | message.append(".");\r | |
136 | message.append(String.format("%1$03d", currentTime % 1000));\r | |
137 | message.append("] ");\r | |
138 | message.append(msg);\r | |
9b635e61 FC |
139 | // System.out.println(message);\r |
140 | \r | |
12c155f5 FC |
141 | if (fTraceLog != null) {\r |
142 | try {\r | |
143 | fTraceLog.write(message.toString());\r | |
144 | fTraceLog.newLine();\r | |
145 | fTraceLog.flush();\r | |
146 | } catch (IOException e) {\r | |
147 | e.printStackTrace();\r | |
148 | }\r | |
149 | }\r | |
150 | }\r | |
151 | \r | |
152 | public static void traceComponent(ITmfComponent component, String msg) {\r | |
153 | String message = ("[CMP] Thread=" + Thread.currentThread().getId() + " Cmp=" + component.getName() + " " + msg);\r | |
154 | trace(message);\r | |
155 | }\r | |
156 | \r | |
157 | public static void traceRequest(ITmfDataRequest<?> request, String msg) {\r | |
158 | String message = ("[REQ] Req=" + request.getRequestId()\r | |
159 | + (request.getExecType() == ITmfDataRequest.ExecutionType.BACKGROUND ? " (BG)" : " (FG)") + " Thread="\r | |
160 | + Thread.currentThread().getId() + " Type=" + simpleType(request.getClass().getName()) + " Index="\r | |
161 | + request.getIndex() + " NbReq=" + request.getNbRequested()\r | |
162 | + (request instanceof ITmfEventRequest ? " Range=" + ((ITmfEventRequest<?>) request).getRange() : "")\r | |
163 | + " DataType=" + request.getDataType().getSimpleName() + " " + msg);\r | |
164 | trace(message);\r | |
165 | }\r | |
166 | \r | |
167 | private static String simpleType(String type) {\r | |
168 | return type.substring(type.lastIndexOf('.') + 1);\r | |
169 | }\r | |
170 | \r | |
171 | public static void traceSignal(TmfSignal signal, String msg) {\r | |
172 | String message = ("[SIG] Type=" + signal.getClass().getSimpleName() + " Target=" + msg);\r | |
173 | trace(message);\r | |
174 | }\r | |
175 | \r | |
72f1e62a | 176 | public static void traceEvent(ITmfDataProvider<?> provider, ITmfDataRequest<?> request, ITmfEvent data) {\r |
12c155f5 FC |
177 | String message = ("[EVT] Provider=" + provider.toString() + ", Req=" + request.getRequestId() + ", Event=" + data\r |
178 | .toString());\r | |
179 | trace(message);\r | |
180 | }\r | |
181 | \r | |
182 | public static void traceError(String msg) {\r | |
183 | String message = ("[ERR] Thread=" + Thread.currentThread().getId() + " " + msg);\r | |
184 | trace(message);\r | |
185 | }\r | |
186 | \r | |
187 | public static void traceInfo(String msg) {\r | |
188 | String message = ("[INF] Thread=" + Thread.currentThread().getId() + " " + msg);\r | |
189 | trace(message);\r | |
190 | }\r | |
9b635e61 | 191 | \r |
8c8bf09f | 192 | }\r |