| Index: tools/gn/command_gen.cc
|
| diff --git a/tools/gn/command_gen.cc b/tools/gn/command_gen.cc
|
| index 9f6d38f01afa62c3608ca75ba787de75a18ea29d..cde677a1443d01191210272d667f171a1f529177 100644
|
| --- a/tools/gn/command_gen.cc
|
| +++ b/tools/gn/command_gen.cc
|
| @@ -22,10 +22,26 @@ namespace {
|
| // Suppress output on success.
|
| const char kSwitchQuiet[] = "q";
|
|
|
| -void TargetResolvedCallback(base::subtle::Atomic32* write_counter,
|
| - const Target* target) {
|
| +void BackgroundDoWrite(const Target* target, const Toolchain* toolchain) {
|
| + NinjaTargetWriter::RunAndWriteFile(target, toolchain);
|
| + g_scheduler->DecrementWorkCount();
|
| +}
|
| +
|
| +// Called on the main thread.
|
| +void ItemResolvedCallback(base::subtle::Atomic32* write_counter,
|
| + scoped_refptr<Builder> builder,
|
| + const Item* item) {
|
| base::subtle::NoBarrier_AtomicIncrement(write_counter, 1);
|
| - NinjaTargetWriter::RunAndWriteFile(target);
|
| +
|
| + const Target* target = item->AsTarget();
|
| + if (target) {
|
| + const Toolchain* toolchain =
|
| + builder->GetToolchain(target->settings()->toolchain_label());
|
| + DCHECK(toolchain);
|
| + g_scheduler->IncrementWorkCount();
|
| + g_scheduler->ScheduleWork(
|
| + base::Bind(&BackgroundDoWrite, target, toolchain));
|
| + }
|
| }
|
|
|
| } // namespace
|
| @@ -51,15 +67,17 @@ int RunGen(const std::vector<std::string>& args) {
|
| // Cause the load to also generate the ninja files for each target. We wrap
|
| // the writing to maintain a counter.
|
| base::subtle::Atomic32 write_counter = 0;
|
| - setup->build_settings().set_target_resolved_callback(
|
| - base::Bind(&TargetResolvedCallback, &write_counter));
|
| + setup->builder()->set_resolved_callback(
|
| + base::Bind(&ItemResolvedCallback, &write_counter,
|
| + scoped_refptr<Builder>(setup->builder())));
|
|
|
| // Do the actual load. This will also write out the target ninja files.
|
| if (!setup->Run())
|
| return 1;
|
|
|
| // Write the root ninja files.
|
| - if (!NinjaWriter::RunAndWriteFiles(&setup->build_settings()))
|
| + if (!NinjaWriter::RunAndWriteFiles(&setup->build_settings(),
|
| + setup->builder()))
|
| return 1;
|
|
|
| base::TimeTicks end_time = base::TimeTicks::Now();
|
|
|