Minor fixes to tracing The chrome://tracing expects the timestamp to be in microseconds, but it had been stored in the TraceItem in nanoseconds, so this fixes it. Also adds quotes around the thread_id, since on Mac it is written in hex format and so the JSON parser doesn't recognize it. Finally, adds toolchain information to the import traces. Change-Id: If5960074d4fc8301cbcc4a3524cb17ab6a95010a Reviewed-on: https://gn-review.googlesource.com/c/gn/+/5140 Commit-Queue: Julie Hockett <juliehockett@google.com> Reviewed-by: Scott Graham <scottmg@chromium.org>
diff --git a/tools/gn/import_manager.cc b/tools/gn/import_manager.cc index 36c7088..9339ff5 100644 --- a/tools/gn/import_manager.cc +++ b/tools/gn/import_manager.cc
@@ -21,6 +21,7 @@ const ParseNode* node_for_err, Err* err) { ScopedTrace load_trace(TraceItem::TRACE_IMPORT_LOAD, file.value()); + load_trace.SetToolchain(settings->toolchain_label()); const ParseNode* node = g_scheduler->input_file_manager()->SyncLoadFile( node_for_err->GetRange(), settings->build_settings(), file, err); @@ -129,6 +130,8 @@ std::this_thread::get_id()); import_block_trace->set_begin(import_block_begin); import_block_trace->set_end(import_block_end); + import_block_trace->set_toolchain( + scope->settings()->toolchain_label().GetUserVisibleName(false)); AddTrace(import_block_trace); } }
diff --git a/tools/gn/trace.cc b/tools/gn/trace.cc index 184c450..58a8c3c 100644 --- a/tools/gn/trace.cc +++ b/tools/gn/trace.cc
@@ -24,6 +24,8 @@ namespace { +constexpr uint64_t kNanosecondsToMicroseconds = 1'000; + class TraceLog { public: TraceLog() { events_.reserve(16384); } @@ -244,7 +246,7 @@ // Write main thread metadata (assume this is being written on the main // thread). - out << "{\"pid\":0,\"tid\":" << std::this_thread::get_id(); + out << "{\"pid\":0,\"tid\":\"" << std::this_thread::get_id() << "\""; out << ",\"ts\":0,\"ph\":\"M\","; out << "\"name\":\"thread_name\",\"args\":{\"name\":\"Main thread\"}},"; @@ -254,8 +256,8 @@ if (i != 0) out << ","; - out << "{\"pid\":0,\"tid\":" << item.thread_id(); - out << ",\"ts\":" << item.begin(); + out << "{\"pid\":0,\"tid\":\"" << item.thread_id() << "\""; + out << ",\"ts\":" << item.begin() / kNanosecondsToMicroseconds; out << ",\"ph\":\"X\""; // "X" = complete event with begin & duration. out << ",\"dur\":" << item.delta().InMicroseconds();