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

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

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/debug/trace_event.h ('k') | base/test/trace_event_analyzer.h » ('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 #include "base/debug/trace_event.h" 5 #include "base/debug/trace_event.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include "base/debug/trace_event_win.h" 10 #include "base/debug/trace_event_win.h"
11 #endif 11 #endif
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/format_macros.h" 13 #include "base/format_macros.h"
14 #include "base/memory/ref_counted_memory.h"
15 #include "base/process_util.h" 14 #include "base/process_util.h"
16 #include "base/stringprintf.h" 15 #include "base/stringprintf.h"
17 #include "base/threading/thread_local.h" 16 #include "base/threading/thread_local.h"
18 #include "base/utf_string_conversions.h" 17 #include "base/utf_string_conversions.h"
19 #include "base/stl_util.h" 18 #include "base/stl_util.h"
20 #include "base/time.h" 19 #include "base/time.h"
21 20
22 #define USE_UNRELIABLE_NOW 21 #define USE_UNRELIABLE_NOW
23 22
24 class DeleteTraceLogForTesting { 23 class DeleteTraceLogForTesting {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 } 111 }
113 112
114 //////////////////////////////////////////////////////////////////////////////// 113 ////////////////////////////////////////////////////////////////////////////////
115 // 114 //
116 // TraceEvent 115 // TraceEvent
117 // 116 //
118 //////////////////////////////////////////////////////////////////////////////// 117 ////////////////////////////////////////////////////////////////////////////////
119 118
120 namespace { 119 namespace {
121 120
122 const char* GetPhaseStr(TraceEventPhase phase) {
123 switch(phase) {
124 case TRACE_EVENT_PHASE_BEGIN:
125 return "B";
126 case TRACE_EVENT_PHASE_INSTANT:
127 return "I";
128 case TRACE_EVENT_PHASE_END:
129 return "E";
130 case TRACE_EVENT_PHASE_METADATA:
131 return "M";
132 default:
133 NOTREACHED() << "Invalid phase argument";
134 return "?";
135 }
136 }
137
138 size_t GetAllocLength(const char* str) { return str ? strlen(str) + 1 : 0; } 121 size_t GetAllocLength(const char* str) { return str ? strlen(str) + 1 : 0; }
139 122
140 // Copies |*member| into |*buffer|, sets |*member| to point to this new 123 // Copies |*member| into |*buffer|, sets |*member| to point to this new
141 // location, and then advances |*buffer| by the amount written. 124 // location, and then advances |*buffer| by the amount written.
142 void CopyTraceEventParameter(char** buffer, 125 void CopyTraceEventParameter(char** buffer,
143 const char** member, 126 const char** member,
144 const char* end) { 127 const char* end) {
145 if (*member) { 128 if (*member) {
146 size_t written = strlcpy(*buffer, *member, end - *buffer) + 1; 129 size_t written = strlcpy(*buffer, *member, end - *buffer) + 1;
147 DCHECK_LE(static_cast<int>(written), end - *buffer); 130 DCHECK_LE(static_cast<int>(written), end - *buffer);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 CopyTraceEventParameter(&ptr, arg_values_[0].as_assignable_string(), end); 197 CopyTraceEventParameter(&ptr, arg_values_[0].as_assignable_string(), end);
215 if (arg2_is_copy) 198 if (arg2_is_copy)
216 CopyTraceEventParameter(&ptr, arg_values_[1].as_assignable_string(), end); 199 CopyTraceEventParameter(&ptr, arg_values_[1].as_assignable_string(), end);
217 DCHECK_EQ(end, ptr) << "Overrun by " << ptr - end; 200 DCHECK_EQ(end, ptr) << "Overrun by " << ptr - end;
218 } 201 }
219 } 202 }
220 203
221 TraceEvent::~TraceEvent() { 204 TraceEvent::~TraceEvent() {
222 } 205 }
223 206
207 const char* TraceEvent::GetPhaseString(TraceEventPhase phase) {
208 switch(phase) {
209 case TRACE_EVENT_PHASE_BEGIN:
210 return "B";
211 case TRACE_EVENT_PHASE_INSTANT:
212 return "I";
213 case TRACE_EVENT_PHASE_END:
214 return "E";
215 case TRACE_EVENT_PHASE_METADATA:
216 return "M";
217 default:
218 NOTREACHED() << "Invalid phase argument";
219 return "?";
220 }
221 }
222
223 TraceEventPhase TraceEvent::GetPhase(const char* phase) {
224 switch(*phase) {
225 case 'B':
226 return TRACE_EVENT_PHASE_BEGIN;
227 case 'I':
228 return TRACE_EVENT_PHASE_INSTANT;
229 case 'E':
230 return TRACE_EVENT_PHASE_END;
231 case 'M':
232 return TRACE_EVENT_PHASE_METADATA;
233 default:
234 NOTREACHED() << "Invalid phase name";
235 return TRACE_EVENT_PHASE_METADATA;
236 }
237 }
238
224 void TraceEvent::AppendEventsAsJSON(const std::vector<TraceEvent>& events, 239 void TraceEvent::AppendEventsAsJSON(const std::vector<TraceEvent>& events,
225 size_t start, 240 size_t start,
226 size_t count, 241 size_t count,
227 std::string* out) { 242 std::string* out) {
228 for (size_t i = 0; i < count && start + i < events.size(); ++i) { 243 for (size_t i = 0; i < count && start + i < events.size(); ++i) {
229 if (i > 0) 244 if (i > 0)
230 *out += ","; 245 *out += ",";
231 events[i + start].AppendAsJSON(out); 246 events[i + start].AppendAsJSON(out);
232 } 247 }
233 } 248 }
234 249
235 void TraceEvent::AppendAsJSON(std::string* out) const { 250 void TraceEvent::AppendAsJSON(std::string* out) const {
236 const char* phase_str = GetPhaseStr(phase_); 251 const char* phase_str = GetPhaseString(phase_);
237 int64 time_int64 = timestamp_.ToInternalValue(); 252 int64 time_int64 = timestamp_.ToInternalValue();
238 // Category name checked at category creation time. 253 // Category name checked at category creation time.
239 DCHECK(!strchr(name_, '"')); 254 DCHECK(!strchr(name_, '"'));
240 StringAppendF(out, 255 StringAppendF(out,
241 "{\"cat\":\"%s\",\"pid\":%i,\"tid\":%i,\"ts\":%lld," 256 "{\"cat\":\"%s\",\"pid\":%i,\"tid\":%i,\"ts\":%lld,"
242 "\"ph\":\"%s\",\"name\":\"%s\",\"args\":{", 257 "\"ph\":\"%s\",\"name\":\"%s\",\"args\":{",
243 category_->name, 258 category_->name,
244 static_cast<int>(process_id_), 259 static_cast<int>(process_id_),
245 static_cast<int>(thread_id_), 260 static_cast<int>(thread_id_),
246 static_cast<long long>(time_int64), 261 static_cast<long long>(time_int64),
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 NULL, 0, NULL, 0, 666 NULL, 0, NULL, 0,
652 p_data_->threshold_begin_id, p_data_->threshold, 667 p_data_->threshold_begin_id, p_data_->threshold,
653 TraceLog::EVENT_FLAG_NONE); 668 TraceLog::EVENT_FLAG_NONE);
654 } 669 }
655 } 670 }
656 671
657 } // namespace internal 672 } // namespace internal
658 673
659 } // namespace debug 674 } // namespace debug
660 } // namespace base 675 } // namespace base
OLDNEW
« no previous file with comments | « base/debug/trace_event.h ('k') | base/test/trace_event_analyzer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698