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

Unified Diff: tools/gn/builder.cc

Issue 2195753002: GN: only write targets that should be generated. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/builder.h ('k') | tools/gn/command_gen.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/builder.cc
diff --git a/tools/gn/builder.cc b/tools/gn/builder.cc
index 93aec154fa6f4d7d2d091ae8fce324d70ffcfc02..bb3f834f6cb21970950f89cae1ae2821832e7556 100644
--- a/tools/gn/builder.cc
+++ b/tools/gn/builder.cc
@@ -404,9 +404,15 @@ bool Builder::AddToolchainDep(BuilderRecord* record,
void Builder::RecursiveSetShouldGenerate(BuilderRecord* record,
bool force) {
- if (!force && record->should_generate())
- return; // Already set.
- record->set_should_generate(true);
+ if (!record->should_generate()) {
+ record->set_should_generate(true);
+
+ // This may have caused the item to go into "resolved and generated" state.
+ if (record->resolved() && !resolved_and_generated_callback_.is_null())
+ resolved_and_generated_callback_.Run(record);
+ } else if (!force) {
+ return; // Already set and we're not required to iterate dependencies.
+ }
for (auto* cur : record->all_deps()) {
if (!cur->should_generate()) {
@@ -451,8 +457,8 @@ bool Builder::ResolveItem(BuilderRecord* record, Err* err) {
if (!record->item()->OnResolved(err))
return false;
- if (!resolved_callback_.is_null())
- resolved_callback_.Run(record);
+ if (record->should_generate() && !resolved_and_generated_callback_.is_null())
+ resolved_and_generated_callback_.Run(record);
// Recursively update everybody waiting on this item to be resolved.
for (BuilderRecord* waiting : record->waiting_on_resolution()) {
« no previous file with comments | « tools/gn/builder.h ('k') | tools/gn/command_gen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698