Avoid extra rdeps copy when finishing node Reduces garbage and wasted work -- MOS_MIGRATED_REVID=108566164
diff --git a/src/main/java/com/google/devtools/build/skyframe/BuildingState.java b/src/main/java/com/google/devtools/build/skyframe/BuildingState.java index ad16c38..ae38e8c 100644 --- a/src/main/java/com/google/devtools/build/skyframe/BuildingState.java +++ b/src/main/java/com/google/devtools/build/skyframe/BuildingState.java
@@ -153,6 +153,12 @@ List<Object> getDataToConsolidate(BuildingState container) { return container.reverseDepsDataToConsolidate; } + + @Override + public void consolidateReverseDeps(BuildingState container) { + // #consolidateReverseDeps is only supported for node entries, not building states. + throw new UnsupportedOperationException(); + } }; // Below are fields that are used for dirty nodes.
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java index 261c836..95d23bd 100644 --- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java +++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -221,8 +221,8 @@ // Get reverse deps that need to be signaled. ImmutableSet<SkyKey> reverseDepsToSignal = buildingState.getReverseDepsToSignal(); getReverseDepsUtil().addReverseDeps(this, reverseDepsToSignal); - // Force consistency check. - getReverseDepsUtil().getReverseDeps(this); + // Force consistency check and consolidate rdeps changes. + getReverseDepsUtil().consolidateReverseDeps(this); this.directDeps = buildingState.getFinishedDirectDeps().compress(); markDone();
diff --git a/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtil.java b/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtil.java index 219758b..52ad312 100644 --- a/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtil.java +++ b/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtil.java
@@ -39,6 +39,8 @@ void removeReverseDep(T container, SkyKey reverseDep); + void consolidateReverseDeps(T container); + ImmutableSet<SkyKey> getReverseDeps(T container); String toString(T container);
diff --git a/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java b/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java index 11af100..7eda036 100644 --- a/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java +++ b/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java
@@ -283,6 +283,11 @@ } } + @Override + public void consolidateReverseDeps(T container) { + consolidateData(container); + } + private void consolidateData(T container) { List<Object> dataToConsolidate = getDataToConsolidate(container); if (dataToConsolidate == null) {