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) {