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

Side by Side Diff: tools/gn/trace.cc

Issue 56433003: GN threading refactor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | « tools/gn/trace.h ('k') | no next file » | 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "tools/gn/trace.h" 5 #include "tools/gn/trace.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <sstream> 9 #include <sstream>
10 #include <vector> 10 #include <vector>
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 127
128 ScopedTrace::ScopedTrace(TraceItem::Type t, const std::string& name) 128 ScopedTrace::ScopedTrace(TraceItem::Type t, const std::string& name)
129 : item_(NULL), 129 : item_(NULL),
130 done_(false) { 130 done_(false) {
131 if (trace_log) { 131 if (trace_log) {
132 item_ = new TraceItem(t, name, base::PlatformThread::CurrentId()); 132 item_ = new TraceItem(t, name, base::PlatformThread::CurrentId());
133 item_->set_begin(base::TimeTicks::HighResNow()); 133 item_->set_begin(base::TimeTicks::HighResNow());
134 } 134 }
135 } 135 }
136 136
137 ScopedTrace::ScopedTrace(TraceItem::Type t, const Label& label)
138 : item_(NULL),
139 done_(false) {
140 if (trace_log) {
141 item_ = new TraceItem(t, label.GetUserVisibleName(false),
142 base::PlatformThread::CurrentId());
143 item_->set_begin(base::TimeTicks::HighResNow());
144 }
145 }
146
137 ScopedTrace::~ScopedTrace() { 147 ScopedTrace::~ScopedTrace() {
138 Done(); 148 Done();
139 } 149 }
140 150
141 void ScopedTrace::SetToolchain(const Label& label) { 151 void ScopedTrace::SetToolchain(const Label& label) {
142 if (item_) 152 if (item_)
143 item_->set_toolchain(label.GetUserVisibleName(false)); 153 item_->set_toolchain(label.GetUserVisibleName(false));
144 } 154 }
145 155
146 void ScopedTrace::SetCommandLine(const CommandLine& cmdline) { 156 void ScopedTrace::SetCommandLine(const CommandLine& cmdline) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 parses.push_back(events[i]); 193 parses.push_back(events[i]);
184 break; 194 break;
185 case TraceItem::TRACE_FILE_EXECUTE: 195 case TraceItem::TRACE_FILE_EXECUTE:
186 file_execs.push_back(events[i]); 196 file_execs.push_back(events[i]);
187 break; 197 break;
188 case TraceItem::TRACE_SCRIPT_EXECUTE: 198 case TraceItem::TRACE_SCRIPT_EXECUTE:
189 script_execs.push_back(events[i]); 199 script_execs.push_back(events[i]);
190 break; 200 break;
191 case TraceItem::TRACE_FILE_LOAD: 201 case TraceItem::TRACE_FILE_LOAD:
192 case TraceItem::TRACE_FILE_WRITE: 202 case TraceItem::TRACE_FILE_WRITE:
203 case TraceItem::TRACE_DEFINE_TARGET:
193 break; // Ignore these for the summary. 204 break; // Ignore these for the summary.
194 } 205 }
195 } 206 }
196 207
197 std::ostringstream out; 208 std::ostringstream out;
198 SummarizeParses(parses, out); 209 SummarizeParses(parses, out);
199 out << std::endl; 210 out << std::endl;
200 SummarizeFileExecs(file_execs, out); 211 SummarizeFileExecs(file_execs, out);
201 out << std::endl; 212 out << std::endl;
202 SummarizeScriptExecs(script_execs, out); 213 SummarizeScriptExecs(script_execs, out);
203 out << std::endl; 214 out << std::endl;
204 215
205 return out.str(); 216 return out.str();
206 } 217 }
207 218
208 void SaveTraces(const base::FilePath& file_name) { 219 void SaveTraces(const base::FilePath& file_name) {
209 std::ostringstream out; 220 std::ostringstream out;
210 221
211 out << "{\"traceEvents\":["; 222 out << "{\"traceEvents\":[";
212 223
213 std::string quote_buffer; // Allocate outside loop to prevent reallocationg. 224 std::string quote_buffer; // Allocate outside loop to prevent reallocationg.
214 225
226 // Write main thread metadata (assume this is being written on the main
227 // thread).
228 out << "{\"pid\":0,\"tid\":" << base::PlatformThread::CurrentId();
229 out << ",\"ts\":0,\"ph\":\"M\",";
230 out << "\"name\":\"thread_name\",\"args\":{\"name\":\"Main thread\"}},";
231
215 std::vector<TraceItem*> events = trace_log->events(); 232 std::vector<TraceItem*> events = trace_log->events();
216 for (size_t i = 0; i < events.size(); i++) { 233 for (size_t i = 0; i < events.size(); i++) {
217 const TraceItem& item = *events[i]; 234 const TraceItem& item = *events[i];
218 235
219 if (i != 0) 236 if (i != 0)
220 out << ","; 237 out << ",";
221 out << "{\"pid\":0,\"tid\":" << item.thread_id(); 238 out << "{\"pid\":0,\"tid\":" << item.thread_id();
222 out << ",\"ts\":" << item.begin().ToInternalValue(); 239 out << ",\"ts\":" << item.begin().ToInternalValue();
223 out << ",\"ph\":\"X\""; // "X" = complete event with begin & duration. 240 out << ",\"ph\":\"X\""; // "X" = complete event with begin & duration.
224 out << ",\"dur\":" << item.delta().InMicroseconds(); 241 out << ",\"dur\":" << item.delta().InMicroseconds();
(...skipping 12 matching lines...) Expand all
237 break; 254 break;
238 case TraceItem::TRACE_FILE_EXECUTE: 255 case TraceItem::TRACE_FILE_EXECUTE:
239 out << "\"file_exec\""; 256 out << "\"file_exec\"";
240 break; 257 break;
241 case TraceItem::TRACE_FILE_WRITE: 258 case TraceItem::TRACE_FILE_WRITE:
242 out << "\"file_write\""; 259 out << "\"file_write\"";
243 break; 260 break;
244 case TraceItem::TRACE_SCRIPT_EXECUTE: 261 case TraceItem::TRACE_SCRIPT_EXECUTE:
245 out << "\"script_exec\""; 262 out << "\"script_exec\"";
246 break; 263 break;
264 case TraceItem::TRACE_DEFINE_TARGET:
265 out << "\"define\"";
247 } 266 }
248 267
249 if (!item.toolchain().empty() || !item.cmdline().empty()) { 268 if (!item.toolchain().empty() || !item.cmdline().empty()) {
250 out << ",\"args\":{"; 269 out << ",\"args\":{";
251 bool needs_comma = false; 270 bool needs_comma = false;
252 if (!item.toolchain().empty()) { 271 if (!item.toolchain().empty()) {
253 quote_buffer.resize(0); 272 quote_buffer.resize(0);
254 base::JsonDoubleQuote(item.toolchain(), true, &quote_buffer); 273 base::JsonDoubleQuote(item.toolchain(), true, &quote_buffer);
255 out << "\"toolchain\":" << quote_buffer; 274 out << "\"toolchain\":" << quote_buffer;
256 needs_comma = true; 275 needs_comma = true;
(...skipping 10 matching lines...) Expand all
267 } 286 }
268 out << "}"; 287 out << "}";
269 } 288 }
270 289
271 out << "]}"; 290 out << "]}";
272 291
273 std::string out_str = out.str(); 292 std::string out_str = out.str();
274 file_util::WriteFile(file_name, out_str.data(), 293 file_util::WriteFile(file_name, out_str.data(),
275 static_cast<int>(out_str.size())); 294 static_cast<int>(out_str.size()));
276 } 295 }
OLDNEW
« no previous file with comments | « tools/gn/trace.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698