Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: gpu/common/gpu_trace_event.h

Issue 6877101: Replaced std::string argument storage in gpu_trace_event with faster TraceAnyType (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Trace events are for tracking application performance. 5 // Trace events are for tracking application performance.
6 // 6 //
7 // Events are issued against categories. Whereas LOG's 7 // Events are issued against categories. Whereas LOG's
8 // categories are statically defined, TRACE categories are created 8 // categories are statically defined, TRACE categories are created
9 // implicitly with a string. For example: 9 // implicitly with a string. For example:
10 // GPU_TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") 10 // GPU_TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent")
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 }; 173 };
174 174
175 #define TRACE_MAX_NUM_ARGS 2 175 #define TRACE_MAX_NUM_ARGS 2
176 176
177 enum TraceEventPhase { 177 enum TraceEventPhase {
178 GPU_TRACE_EVENT_PHASE_BEGIN, 178 GPU_TRACE_EVENT_PHASE_BEGIN,
179 GPU_TRACE_EVENT_PHASE_END, 179 GPU_TRACE_EVENT_PHASE_END,
180 GPU_TRACE_EVENT_PHASE_INSTANT 180 GPU_TRACE_EVENT_PHASE_INSTANT
181 }; 181 };
182 182
183 class TraceAnyType {
184 public:
185 enum Type {
186 NONE,
187 BOOLEAN,
188 UINT,
189 INT,
190 DOUBLE,
191 POINTER,
192 STRING
193 };
194
195 TraceAnyType() : type_(NONE) {
196 value_.as_uint = 0ull;
197 }
198 TraceAnyType(bool rhs) : type_(BOOLEAN) {
199 value_.as_uint = 0ull; // zero all bits
200 value_.as_bool = rhs;
201 }
202 TraceAnyType(uint64 rhs) : type_(UINT) {
203 value_.as_uint = rhs;
204 }
205 TraceAnyType(uint32 rhs) : type_(UINT) {
206 value_.as_uint = rhs;
207 }
208 TraceAnyType(uint16 rhs) : type_(UINT) {
209 value_.as_uint = rhs;
210 }
211 TraceAnyType(uint8 rhs) : type_(UINT) {
212 value_.as_uint = rhs;
213 }
214 TraceAnyType(int64 rhs) : type_(INT) {
215 value_.as_int = rhs;
216 }
217 TraceAnyType(int32 rhs) : type_(INT) {
218 value_.as_int = rhs;
219 }
220 TraceAnyType(int16 rhs) : type_(INT) {
221 value_.as_int = rhs;
222 }
223 TraceAnyType(int8 rhs) : type_(INT) {
224 value_.as_int = rhs;
225 }
226 TraceAnyType(double rhs) : type_(DOUBLE) {
227 value_.as_double = rhs;
228 }
229 TraceAnyType(void* rhs) : type_(POINTER) {
230 value_.as_uint = 0ull; // zero all bits
231 value_.as_pointer = rhs;
232 }
233 TraceAnyType(const char* rhs) : type_(STRING) {
234 value_.as_uint = 0ull; // zero all bits
235 value_.as_string = strdup(rhs);
236 }
237 TraceAnyType(const TraceAnyType& rhs) : type_(NONE) {
238 operator=(rhs);
239 }
240 ~TraceAnyType() {
241 Destroy();
242 }
243
244 TraceAnyType& operator=(const TraceAnyType& rhs);
245 bool operator==(const TraceAnyType& rhs) const;
246 bool operator!=(const TraceAnyType& rhs) const {
247 return !operator==(rhs);
248 }
249
250 void Destroy();
251
252 void AppendAsJSON(std::string* out) const;
253
254 Type type() const {
255 return type_;
256 }
257 uint64 as_uint() const {
258 return value_.as_uint;
259 }
260 bool as_bool() const {
261 return value_.as_bool;
262 }
263 int64 as_int() const {
264 return value_.as_int;
265 }
266 double as_double() const {
267 return value_.as_double;
268 }
269 void* as_pointer() const {
270 return value_.as_pointer;
271 }
272 const char* as_string() const {
273 return value_.as_string;
274 }
275
276 private:
277 union Value {
278 bool as_bool;
279 uint64 as_uint;
280 int64 as_int;
281 double as_double;
282 void* as_pointer;
283 char* as_string;
284 };
285
286 Type type_;
287 Value value_;
288 };
289
183 // Output records are "Events" and can be obtained via the 290 // Output records are "Events" and can be obtained via the
184 // OutputCallback whenever the logging system decides to flush. This 291 // OutputCallback whenever the logging system decides to flush. This
185 // can happen at any time, on any thread, or you can programatically 292 // can happen at any time, on any thread, or you can programatically
186 // force it to happen. 293 // force it to happen.
187 struct TraceEvent { 294 struct TraceEvent {
188 static void AppendAsJSON(std::string* out, 295 static void AppendAsJSON(std::string* out,
189 const std::vector<TraceEvent>& events, 296 const std::vector<TraceEvent>& events,
190 size_t start, 297 size_t start,
191 size_t count); 298 size_t count);
192 TraceEvent(); 299 TraceEvent();
193 ~TraceEvent(); 300 ~TraceEvent();
194 void AppendAsJSON(std::string* out) const; 301 void AppendAsJSON(std::string* out) const;
195 302
196 303
197 unsigned long processId; 304 unsigned long processId;
198 unsigned long threadId; 305 unsigned long threadId;
199 base::TimeTicks timestamp; 306 base::TimeTicks timestamp;
200 TraceEventPhase phase; 307 TraceEventPhase phase;
201 TraceCategory* category; 308 TraceCategory* category;
202 const char* name; 309 const char* name;
203 const char* argNames[TRACE_MAX_NUM_ARGS]; 310 const char* argNames[TRACE_MAX_NUM_ARGS];
204 std::string argValues[TRACE_MAX_NUM_ARGS]; 311 TraceAnyType argValues[TRACE_MAX_NUM_ARGS];
205 }; 312 };
206 313
207 314
208 class TraceLog { 315 class TraceLog {
209 public: 316 public:
210 static TraceLog* GetInstance(); 317 static TraceLog* GetInstance();
211 318
212 // Global enable of tracing. Currently enables all categories or not. 319 // Global enable of tracing. Currently enables all categories or not.
213 // TODO(nduca) Replaced with an Enable/DisableCategory() that 320 // TODO(nduca) Replaced with an Enable/DisableCategory() that
214 // implicitly controls the global logging state. 321 // implicitly controls the global logging state.
(...skipping 21 matching lines...) Expand all
236 void Flush(); 343 void Flush();
237 344
238 // Called by GPU_TRACE_EVENT* macros, don't call this directly. 345 // Called by GPU_TRACE_EVENT* macros, don't call this directly.
239 TraceCategory* GetCategory(const char* name); 346 TraceCategory* GetCategory(const char* name);
240 347
241 // Called by GPU_TRACE_EVENT* macros, don't call this directly. 348 // Called by GPU_TRACE_EVENT* macros, don't call this directly.
242 void AddTraceEvent(TraceEventPhase phase, 349 void AddTraceEvent(TraceEventPhase phase,
243 const char* file, int line, 350 const char* file, int line,
244 TraceCategory* category, 351 TraceCategory* category,
245 const char* name, 352 const char* name,
246 const char* arg1name, const char* arg1val, 353 const char* arg1name, TraceAnyType arg1val,
247 const char* arg2name, const char* arg2val); 354 const char* arg2name, TraceAnyType arg2val);
248 355
249 private: 356 private:
250 // This allows constructor and destructor to be private and usable only 357 // This allows constructor and destructor to be private and usable only
251 // by the Singleton class. 358 // by the Singleton class.
252 friend struct StaticMemorySingletonTraits<TraceLog>; 359 friend struct StaticMemorySingletonTraits<TraceLog>;
253 360
254 TraceLog(); 361 TraceLog();
255 ~TraceLog(); 362 ~TraceLog();
256 void FlushWithLockAlreadyHeld(); 363 void FlushWithLockAlreadyHeld();
257 364
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 int line_; 402 int line_;
296 TraceCategory* category_; 403 TraceCategory* category_;
297 const char* name_; 404 const char* name_;
298 }; 405 };
299 406
300 } // namespace internal 407 } // namespace internal
301 408
302 } // namespace gpu 409 } // namespace gpu
303 410
304 #endif // GPU_TRACE_EVENT_H_ 411 #endif // GPU_TRACE_EVENT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698