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

Side by Side Diff: base/debug/trace_event.h

Issue 7981004: add classes trace_analyzer::Query and TraceAnalyzer to make it easy to search through trace data (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: pid tid name fixed Created 9 years, 1 month 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
« no previous file with comments | « base/base.gyp ('k') | base/debug/trace_event.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") 10 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent")
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 #define BASE_DEBUG_TRACE_EVENT_H_ 95 #define BASE_DEBUG_TRACE_EVENT_H_
96 #pragma once 96 #pragma once
97 97
98 #include "build/build_config.h" 98 #include "build/build_config.h"
99 99
100 #include <string> 100 #include <string>
101 #include <vector> 101 #include <vector>
102 102
103 #include "base/callback.h" 103 #include "base/callback.h"
104 #include "base/hash_tables.h" 104 #include "base/hash_tables.h"
105 #include "base/memory/ref_counted_memory.h"
105 #include "base/memory/singleton.h" 106 #include "base/memory/singleton.h"
106 #include "base/string_util.h" 107 #include "base/string_util.h"
107 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" 108 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
108 #include "base/timer.h" 109 #include "base/timer.h"
109 110
110 // By default, const char* argument values are assumed to have long-lived scope 111 // By default, const char* argument values are assumed to have long-lived scope
111 // and will not be copied. Use this macro to force a const char* to be copied. 112 // and will not be copied. Use this macro to force a const char* to be copied.
112 #define TRACE_STR_COPY(str) base::debug::TraceValue::StringWithCopy(str) 113 #define TRACE_STR_COPY(str) base::debug::TraceValue::StringWithCopy(str)
113 114
114 // Older style trace macros with explicit id and extra data 115 // Older style trace macros with explicit id and extra data
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 return value; 413 return value;
413 } 414 }
414 415
415 static TraceValue ForceCopy(const TraceValue& rhs) { 416 static TraceValue ForceCopy(const TraceValue& rhs) {
416 TraceValue value(rhs); 417 TraceValue value(rhs);
417 if (value.type_ == TRACE_TYPE_STATIC_STRING && value.as_string()) 418 if (value.type_ == TRACE_TYPE_STATIC_STRING && value.as_string())
418 value.type_ = TRACE_TYPE_STRING; 419 value.type_ = TRACE_TYPE_STRING;
419 return value; 420 return value;
420 } 421 }
421 422
423 bool is_string() const {
424 return type_ == TRACE_TYPE_STRING || type_ == TRACE_TYPE_STATIC_STRING;
425 }
426
422 void AppendAsJSON(std::string* out) const; 427 void AppendAsJSON(std::string* out) const;
423 428
424 Type type() const { 429 Type type() const {
425 return type_; 430 return type_;
426 } 431 }
427 uint64 as_uint() const { 432 uint64 as_uint() const {
428 DCHECK_EQ(TRACE_TYPE_UINT, type_); 433 DCHECK_EQ(TRACE_TYPE_UINT, type_);
429 return value_.as_uint; 434 return value_.as_uint;
430 } 435 }
431 bool as_bool() const { 436 bool as_bool() const {
432 DCHECK_EQ(TRACE_TYPE_BOOL, type_); 437 DCHECK_EQ(TRACE_TYPE_BOOL, type_);
433 return value_.as_bool; 438 return value_.as_bool;
434 } 439 }
435 int64 as_int() const { 440 int64 as_int() const {
436 DCHECK_EQ(TRACE_TYPE_INT, type_); 441 DCHECK_EQ(TRACE_TYPE_INT, type_);
437 return value_.as_int; 442 return value_.as_int;
438 } 443 }
439 double as_double() const { 444 double as_double() const {
440 DCHECK_EQ(TRACE_TYPE_DOUBLE, type_); 445 DCHECK_EQ(TRACE_TYPE_DOUBLE, type_);
441 return value_.as_double; 446 return value_.as_double;
442 } 447 }
443 const void* as_pointer() const { 448 const void* as_pointer() const {
444 DCHECK_EQ(TRACE_TYPE_POINTER, type_); 449 DCHECK_EQ(TRACE_TYPE_POINTER, type_);
445 return value_.as_pointer; 450 return value_.as_pointer;
446 } 451 }
447 const char* as_string() const { 452 const char* as_string() const {
448 DCHECK(type_ == TRACE_TYPE_STRING || type_ == TRACE_TYPE_STATIC_STRING); 453 DCHECK(is_string());
449 return value_.as_string; 454 return value_.as_string;
450 } 455 }
451 const char** as_assignable_string() { 456 const char** as_assignable_string() {
452 DCHECK_EQ(TRACE_TYPE_STRING, type_); 457 DCHECK_EQ(TRACE_TYPE_STRING, type_);
453 return &value_.as_string; 458 return &value_.as_string;
454 } 459 }
455 460
456 private: 461 private:
457 union Value { 462 union Value {
458 bool as_bool; 463 bool as_bool;
459 uint64 as_uint; 464 uint64 as_uint;
460 int64 as_int; 465 int64 as_int;
461 double as_double; 466 double as_double;
462 const void* as_pointer; 467 const void* as_pointer;
463 const char* as_string; 468 const char* as_string;
464 }; 469 };
465 470
466 Type type_; 471 Type type_;
467 Value value_; 472 Value value_;
468 }; 473 };
469 474
470 // Output records are "Events" and can be obtained via the 475 // Output records are "Events" and can be obtained via the
471 // OutputCallback whenever the tracing system decides to flush. This 476 // OutputCallback whenever the tracing system decides to flush. This
472 // can happen at any time, on any thread, or you can programatically 477 // can happen at any time, on any thread, or you can programatically
473 // force it to happen. 478 // force it to happen.
474 class TraceEvent { 479 class BASE_EXPORT TraceEvent {
475 public: 480 public:
476 TraceEvent(); 481 TraceEvent();
477 TraceEvent(unsigned long process_id, 482 TraceEvent(unsigned long process_id,
478 unsigned long thread_id, 483 unsigned long thread_id,
479 TimeTicks timestamp, 484 TimeTicks timestamp,
480 TraceEventPhase phase, 485 TraceEventPhase phase,
481 const TraceCategory* category, 486 const TraceCategory* category,
482 const char* name, 487 const char* name,
483 const char* arg1_name, const TraceValue& arg1_val, 488 const char* arg1_name, const TraceValue& arg1_val,
484 const char* arg2_name, const TraceValue& arg2_val, 489 const char* arg2_name, const TraceValue& arg2_val,
485 bool copy); 490 bool copy);
486 ~TraceEvent(); 491 ~TraceEvent();
487 492
493 static const char* GetPhaseString(TraceEventPhase phase);
494 static TraceEventPhase GetPhase(const char* phase);
495
488 // Serialize event data to JSON 496 // Serialize event data to JSON
489 static void AppendEventsAsJSON(const std::vector<TraceEvent>& events, 497 static void AppendEventsAsJSON(const std::vector<TraceEvent>& events,
490 size_t start, 498 size_t start,
491 size_t count, 499 size_t count,
492 std::string* out); 500 std::string* out);
493 void AppendAsJSON(std::string* out) const; 501 void AppendAsJSON(std::string* out) const;
494 502
495 TimeTicks timestamp() const { return timestamp_; } 503 TimeTicks timestamp() const { return timestamp_; }
496 504
497 // Exposed for unittesting: 505 // Exposed for unittesting:
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 Data* p_data_; 752 Data* p_data_;
745 Data data_; 753 Data data_;
746 }; 754 };
747 755
748 } // namespace internal 756 } // namespace internal
749 757
750 } // namespace debug 758 } // namespace debug
751 } // namespace base 759 } // namespace base
752 760
753 #endif // BASE_DEBUG_TRACE_EVENT_H_ 761 #endif // BASE_DEBUG_TRACE_EVENT_H_
OLDNEW
« no previous file with comments | « base/base.gyp ('k') | base/debug/trace_event.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698