aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Mark Schaller <mschaller@google.com>2015-11-24 01:20:17 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-11-24 14:41:45 +0000
commitd2eff4ea252b8da2f1e0fe2e12e07d83a53cdf9d (patch)
tree0ebe1e06322952d7cf85a0ef25b3204c936a8908 /src
parentb8f0e86b9d6de8d05d2b34cb0e9363dbf9fe2a1e (diff)
Avoid extra rdeps copy when finishing node
Reduces garbage and wasted work -- MOS_MIGRATED_REVID=108566164
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/BuildingState.java6
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java4
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtil.java2
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java5
4 files changed, 15 insertions, 2 deletions
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 ad16c38a88..ae38e8ce4e 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 @@ public class BuildingState {
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 261c836344..95d23bd702 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 @@ public class InMemoryNodeEntry implements NodeEntry {
// 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 219758b30d..52ad31229c 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 @@ public interface ReverseDepsUtil<T> {
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 11af1005a7..7eda036ee0 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 @@ public abstract class ReverseDepsUtilImpl<T> implements ReverseDepsUtil<T> {
}
}
+ @Override
+ public void consolidateReverseDeps(T container) {
+ consolidateData(container);
+ }
+
private void consolidateData(T container) {
List<Object> dataToConsolidate = getDataToConsolidate(container);
if (dataToConsolidate == null) {