| Index: tools/gn/import_manager.cc
|
| diff --git a/tools/gn/import_manager.cc b/tools/gn/import_manager.cc
|
| index 01c88b5a68c85dd1bce16a19c78d09d9ba6be4e1..0213c3367a41c5b6208cc6f62a52b7eae7c07f39 100644
|
| --- a/tools/gn/import_manager.cc
|
| +++ b/tools/gn/import_manager.cc
|
| @@ -8,6 +8,7 @@
|
| #include "tools/gn/parse_tree.h"
|
| #include "tools/gn/scheduler.h"
|
| #include "tools/gn/scope_per_file_provider.h"
|
| +#include "tools/gn/trace.h"
|
|
|
| namespace {
|
|
|
| @@ -16,6 +17,8 @@ std::unique_ptr<Scope> UncachedImport(const Settings* settings,
|
| const SourceFile& file,
|
| const ParseNode* node_for_err,
|
| Err* err) {
|
| + ScopedTrace load_trace(TraceItem::TRACE_IMPORT_LOAD, file.value());
|
| +
|
| const ParseNode* node = g_scheduler->input_file_manager()->SyncLoadFile(
|
| node_for_err->GetRange(), settings->build_settings(), file, err);
|
| if (!node)
|
| @@ -87,6 +90,7 @@ bool ImportManager::DoImport(const SourceFile& file,
|
| // is already processing the import.
|
| const Scope* import_scope = nullptr;
|
| {
|
| + base::TimeTicks import_block_begin = base::TimeTicks::Now();
|
| base::AutoLock lock(import_info->load_lock);
|
|
|
| if (!import_info->scope) {
|
| @@ -99,6 +103,21 @@ bool ImportManager::DoImport(const SourceFile& file,
|
| *err = import_info->load_result;
|
| return false;
|
| }
|
| + } else {
|
| + // Add trace if this thread was blocked for a long period of time and did
|
| + // not load the import itself.
|
| + base::TimeTicks import_block_end = base::TimeTicks::Now();
|
| + constexpr auto kImportBlockTraceThreshold =
|
| + base::TimeDelta::FromMilliseconds(20);
|
| + if (TracingEnabled() &&
|
| + import_block_end - import_block_begin > kImportBlockTraceThreshold) {
|
| + auto import_block_trace =
|
| + new TraceItem(TraceItem::TRACE_IMPORT_BLOCK, file.value(),
|
| + base::PlatformThread::CurrentId());
|
| + import_block_trace->set_begin(import_block_begin);
|
| + import_block_trace->set_end(import_block_end);
|
| + AddTrace(import_block_trace);
|
| + }
|
| }
|
|
|
| // Promote the now-read-only scope to outside the load lock.
|
|
|