Get rid of boolean field in InMemoryNodeEntry. After adding the lastEvaluated/lastChanged version fields, we lost memory alignment, so this boolean was costing us 8 bytes per instance.
--
MOS_MIGRATED_REVID=125998857
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 b20f7e8..6969f28 100644
--- a/src/main/java/com/google/devtools/build/skyframe/BuildingState.java
+++ b/src/main/java/com/google/devtools/build/skyframe/BuildingState.java
@@ -114,12 +114,8 @@
* Upon building, these reverse deps will be signaled and then stored in the permanent
* {@code ValueEntry#reverseDeps}.
*/
- // TODO(bazel-team): Remove this field. With eager invalidation, all direct deps on this dirty
- // node will be removed by the time evaluation starts, so reverse deps to signal can just be
- // reverse deps in the main ValueEntry object.
private Object reverseDepsToSignal = ImmutableList.of();
private List<Object> reverseDepsDataToConsolidate = null;
- private boolean reverseDepIsSingleObject = false;
private static final ReverseDepsUtil<BuildingState> REVERSE_DEPS_UTIL =
new ReverseDepsUtilImpl<BuildingState>() {
@@ -129,11 +125,6 @@
}
@Override
- void setSingleReverseDep(BuildingState container, boolean singleObject) {
- container.reverseDepIsSingleObject = singleObject;
- }
-
- @Override
void setDataToConsolidate(BuildingState container, List<Object> dataToConsolidate) {
container.reverseDepsDataToConsolidate = dataToConsolidate;
}
@@ -144,11 +135,6 @@
}
@Override
- boolean isSingleReverseDep(BuildingState container) {
- return container.reverseDepIsSingleObject;
- }
-
- @Override
List<Object> getDataToConsolidate(BuildingState container) {
return container.reverseDepsDataToConsolidate;
}
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 414525e..a886e26 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -87,12 +87,6 @@
protected Object reverseDeps = ImmutableList.of();
/**
- * We take advantage of memory alignment to avoid doing a nasty {@code instanceof} for knowing
- * if {@code reverseDeps} is a single object or a list.
- */
- protected boolean reverseDepIsSingleObject = false;
-
- /**
* When reverse deps are removed, checked for presence, or possibly added, we store them in this
* object instead of directly doing the operation. That is because removals/checks in reverseDeps
* are O(N). Originally reverseDeps was a HashSet, but because of memory consumption we switched
@@ -104,7 +98,7 @@
*/
private List<Object> reverseDepsDataToConsolidate = null;
- protected static final ReverseDepsUtil<InMemoryNodeEntry> REVERSE_DEPS_UTIL =
+ private static final ReverseDepsUtil<InMemoryNodeEntry> REVERSE_DEPS_UTIL =
new ReverseDepsUtilImpl<InMemoryNodeEntry>() {
@Override
void setReverseDepsObject(InMemoryNodeEntry container, Object object) {
@@ -112,11 +106,6 @@
}
@Override
- void setSingleReverseDep(InMemoryNodeEntry container, boolean singleObject) {
- container.reverseDepIsSingleObject = singleObject;
- }
-
- @Override
void setDataToConsolidate(InMemoryNodeEntry container, List<Object> dataToConsolidate) {
container.reverseDepsDataToConsolidate = dataToConsolidate;
}
@@ -127,11 +116,6 @@
}
@Override
- boolean isSingleReverseDep(InMemoryNodeEntry container) {
- return container.reverseDepIsSingleObject;
- }
-
- @Override
List<Object> getDataToConsolidate(InMemoryNodeEntry container) {
return container.reverseDepsDataToConsolidate;
}
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 0272ab2..73c179d 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ReverseDepsUtilImpl.java
@@ -50,14 +50,10 @@
abstract void setReverseDepsObject(T container, Object object);
- abstract void setSingleReverseDep(T container, boolean singleObject);
-
abstract void setDataToConsolidate(T container, @Nullable List<Object> dataToConsolidate);
abstract Object getReverseDepsObject(T container);
- abstract boolean isSingleReverseDep(T container);
-
abstract List<Object> getDataToConsolidate(T container);
private enum ConsolidateOp {
@@ -173,6 +169,10 @@
}
}
+ private boolean isSingleReverseDep(T container) {
+ return !(getReverseDepsObject(container) instanceof List);
+ }
+
/**
* We only check if reverse deps is small and there are no delayed data to consolidate, since
* then presence or absence would not be known.
@@ -389,11 +389,9 @@
private void overwriteReverseDepsWithObject(T container, SkyKey newObject) {
setReverseDepsObject(container, newObject);
- setSingleReverseDep(container, true);
}
private void overwriteReverseDepsList(T container, List<SkyKey> list) {
setReverseDepsObject(container, list);
- setSingleReverseDep(container, false);
}
}
diff --git a/src/test/java/com/google/devtools/build/skyframe/ReverseDepsUtilImplTest.java b/src/test/java/com/google/devtools/build/skyframe/ReverseDepsUtilImplTest.java
index 7c5e476..92e0906 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ReverseDepsUtilImplTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ReverseDepsUtilImplTest.java
@@ -57,11 +57,6 @@
}
@Override
- void setSingleReverseDep(Example container, boolean singleObject) {
- container.single = singleObject;
- }
-
- @Override
void setDataToConsolidate(Example container, List<Object> dataToConsolidate) {
container.dataToConsolidate = dataToConsolidate;
}
@@ -72,11 +67,6 @@
}
@Override
- boolean isSingleReverseDep(Example container) {
- return container.single;
- }
-
- @Override
List<Object> getDataToConsolidate(Example container) {
return container.dataToConsolidate;
}