aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Janak Ramakrishnan <janakr@google.com>2016-01-27 21:58:30 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-01-28 15:30:07 +0000
commite1412865fd36d301ec8143b6ff8cb547111d5bb7 (patch)
treeec87ccc2187e96fcbec7b3153916cedfb91dfaf5 /src
parentd21c2d6653a3d9bc3376bcb190ba0ac31f52195b (diff)
Intern IntVersions.
-- MOS_MIGRATED_REVID=113197641
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java2
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java2
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/IntVersion.java14
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java2
-rw-r--r--src/test/java/com/google/devtools/build/skyframe/EagerInvalidatorTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/skyframe/GraphConcurrencyTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/skyframe/InMemoryNodeEntryTest.java46
-rw-r--r--src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java2
8 files changed, 40 insertions, 32 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
index 78a4e1d904..87e1a47a91 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
@@ -124,7 +124,7 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator {
@Override
public void deleteDirty(long versionAgeLimit) {
Preconditions.checkArgument(versionAgeLimit >= 0);
- final Version threshold = new IntVersion(lastGraphVersion.getVal() - versionAgeLimit);
+ final Version threshold = IntVersion.of(lastGraphVersion.getVal() - versionAgeLimit);
valuesToDelete.addAll(
Sets.filter(dirtyKeyTracker.getDirtyKeys(), new Predicate<SkyKey>() {
@Override
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 0cee74c6b0..c23b8222d7 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -329,7 +329,7 @@ public class InMemoryNodeEntry implements NodeEntry {
@Override
public synchronized boolean signalDep() {
- return signalDep(/*childVersion=*/new IntVersion(Long.MAX_VALUE));
+ return signalDep(/*childVersion=*/ IntVersion.of(Long.MAX_VALUE));
}
@Override
diff --git a/src/main/java/com/google/devtools/build/skyframe/IntVersion.java b/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
index 38b2d713c4..cfb3484220 100644
--- a/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
+++ b/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
@@ -13,16 +13,20 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
+import com.google.common.collect.Interner;
+import com.google.common.collect.Interners;
+
import java.io.Serializable;
/**
* Versioning scheme based on integers.
*/
public final class IntVersion implements Version, Serializable {
+ private static final Interner<IntVersion> interner = Interners.newWeakInterner();
private final long val;
- public IntVersion(long val) {
+ private IntVersion(long val) {
this.val = val;
}
@@ -31,11 +35,15 @@ public final class IntVersion implements Version, Serializable {
}
public IntVersion next() {
- return new IntVersion(val + 1);
+ return of(val + 1);
}
public IntVersion previous() {
- return new IntVersion(val - 1);
+ return of(val - 1);
+ }
+
+ public static IntVersion of(long val) {
+ return interner.intern(new IntVersion(val));
}
@Override
diff --git a/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java b/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
index 99e2ef05f7..886c40a891 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
@@ -28,7 +28,7 @@ public class SequentialBuildDriver implements BuildDriver {
public SequentialBuildDriver(MemoizingEvaluator evaluator) {
this.memoizingEvaluator = Preconditions.checkNotNull(evaluator);
- this.curVersion = new IntVersion(0);
+ this.curVersion = IntVersion.of(0);
}
@Override
diff --git a/src/test/java/com/google/devtools/build/skyframe/EagerInvalidatorTest.java b/src/test/java/com/google/devtools/build/skyframe/EagerInvalidatorTest.java
index fbe5cc8960..49706c88c9 100644
--- a/src/test/java/com/google/devtools/build/skyframe/EagerInvalidatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/EagerInvalidatorTest.java
@@ -69,7 +69,7 @@ public class EagerInvalidatorTest {
protected AtomicReference<InvalidatingNodeVisitor<?>> visitor = new AtomicReference<>();
protected DirtyKeyTrackerImpl dirtyKeyTracker;
- private IntVersion graphVersion = new IntVersion(0);
+ private IntVersion graphVersion = IntVersion.of(0);
@After
public void assertNoTrackedErrors() {
diff --git a/src/test/java/com/google/devtools/build/skyframe/GraphConcurrencyTest.java b/src/test/java/com/google/devtools/build/skyframe/GraphConcurrencyTest.java
index 52b693406a..e0d877e97e 100644
--- a/src/test/java/com/google/devtools/build/skyframe/GraphConcurrencyTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/GraphConcurrencyTest.java
@@ -58,7 +58,7 @@ public abstract class GraphConcurrencyTest {
protected abstract ProcessableGraph getGraph(Version version) throws Exception;
- private static final IntVersion startingVersion = new IntVersion(42);
+ private static final IntVersion startingVersion = IntVersion.of(42);
@Before
public void init() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/skyframe/InMemoryNodeEntryTest.java b/src/test/java/com/google/devtools/build/skyframe/InMemoryNodeEntryTest.java
index 2c45174497..f29537d032 100644
--- a/src/test/java/com/google/devtools/build/skyframe/InMemoryNodeEntryTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/InMemoryNodeEntryTest.java
@@ -89,7 +89,7 @@ public class InMemoryNodeEntryTest {
assertThat(setValue(entry, new SkyValue() {},
/*errorInfo=*/null, /*graphVersion=*/0L)).isEmpty();
assertTrue(entry.isDone());
- assertEquals(new IntVersion(0L), entry.getVersion());
+ assertEquals(IntVersion.of(0L), entry.getVersion());
assertThat(entry.getDirectDeps()).containsExactly(dep1, dep2, dep3);
}
@@ -226,7 +226,7 @@ public class InMemoryNodeEntryTest {
assertThat(entry.markRebuildingAndGetAllRemainingDirtyDirectDeps()).containsExactly(dep);
assertThat(setValue(entry, new SkyValue() {}, /*errorInfo=*/null,
/*graphVersion=*/1L)).containsExactly(parent);
- assertEquals(new IntVersion(1L), entry.getVersion());
+ assertEquals(IntVersion.of(1L), entry.getVersion());
}
@Test
@@ -372,11 +372,11 @@ public class InMemoryNodeEntryTest {
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep);
addTemporaryDirectDep(entry, dep);
- entry.signalDep(new IntVersion(0L));
+ entry.signalDep(IntVersion.of(0L));
assertEquals(NodeEntry.DirtyState.VERIFIED_CLEAN, entry.getDirtyState());
assertThat(entry.markClean()).containsExactly(parent);
assertTrue(entry.isDone());
- assertEquals(new IntVersion(0L), entry.getVersion());
+ assertEquals(IntVersion.of(0L), entry.getVersion());
}
private static class IntegerValue implements SkyValue {
@@ -411,13 +411,13 @@ public class InMemoryNodeEntryTest {
entry.addReverseDepAndCheckIfDone(null); // Start evaluation.
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep);
addTemporaryDirectDep(entry, dep);
- entry.signalDep(new IntVersion(1L));
+ entry.signalDep(IntVersion.of(1L));
assertEquals(NodeEntry.DirtyState.NEEDS_REBUILDING, entry.getDirtyState());
assertThat(entry.getTemporaryDirectDeps()).containsExactly(dep);
assertThat(entry.markRebuildingAndGetAllRemainingDirtyDirectDeps()).isEmpty();
setValue(entry, new IntegerValue(5), /*errorInfo=*/null, /*graphVersion=*/1L);
assertTrue(entry.isDone());
- assertEquals(new IntVersion(0L), entry.getVersion());
+ assertEquals(IntVersion.of(0L), entry.getVersion());
}
@Test
@@ -440,7 +440,7 @@ public class InMemoryNodeEntryTest {
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep);
addTemporaryDirectDep(entry, dep);
- entry.signalDep(new IntVersion(1L));
+ entry.signalDep(IntVersion.of(1L));
assertEquals(NodeEntry.DirtyState.NEEDS_REBUILDING, entry.getDirtyState());
assertThat(entry.getTemporaryDirectDeps()).containsExactly(dep);
ReifiedSkyFunctionException exception = new ReifiedSkyFunctionException(
@@ -450,7 +450,7 @@ public class InMemoryNodeEntryTest {
setValue(entry, new IntegerValue(5), ErrorInfo.fromException(exception, false),
/*graphVersion=*/1L);
assertTrue(entry.isDone());
- assertEquals("Version increments when setValue changes", new IntVersion(1), entry.getVersion());
+ assertEquals("Version increments when setValue changes", IntVersion.of(1), entry.getVersion());
}
@Test
@@ -477,7 +477,7 @@ public class InMemoryNodeEntryTest {
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep);
addTemporaryDirectDep(entry, dep);
- entry.signalDep(new IntVersion(1L));
+ entry.signalDep(IntVersion.of(1L));
assertEquals(NodeEntry.DirtyState.NEEDS_REBUILDING, entry.getDirtyState());
assertThat(entry.getTemporaryDirectDeps()).containsExactly(dep);
assertThat(entry.markRebuildingAndGetAllRemainingDirtyDirectDeps())
@@ -488,7 +488,7 @@ public class InMemoryNodeEntryTest {
setValue(entry, new IntegerValue(5), /*errorInfo=*/ null, /*graphVersion=*/ 1L);
assertTrue(entry.isDone());
assertEquals(
- "Version does not change when dep group reordered", new IntVersion(0), entry.getVersion());
+ "Version does not change when dep group reordered", IntVersion.of(0), entry.getVersion());
}
@Test
@@ -508,14 +508,14 @@ public class InMemoryNodeEntryTest {
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep);
addTemporaryDirectDep(entry, dep);
- entry.signalDep(new IntVersion(1L));
+ entry.signalDep(IntVersion.of(1L));
assertEquals(NodeEntry.DirtyState.NEEDS_REBUILDING, entry.getDirtyState());
assertThat(entry.getTemporaryDirectDeps()).containsExactly(dep);
assertThat(entry.markRebuildingAndGetAllRemainingDirtyDirectDeps()).isEmpty();
setValue(entry, /*value=*/null, errorInfo, /*graphVersion=*/1L);
assertTrue(entry.isDone());
// ErrorInfo is treated as a NotComparableSkyValue, so it is not pruned.
- assertEquals(new IntVersion(1L), entry.getVersion());
+ assertEquals(IntVersion.of(1L), entry.getVersion());
}
@Test
@@ -536,8 +536,8 @@ public class InMemoryNodeEntryTest {
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep, dep2);
addTemporaryDirectDeps(entry, dep, dep2);
- entry.signalDep(new IntVersion(0L));
- entry.signalDep(new IntVersion(0L));
+ entry.signalDep(IntVersion.of(0L));
+ entry.signalDep(IntVersion.of(0L));
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep3);
}
@@ -567,7 +567,7 @@ public class InMemoryNodeEntryTest {
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep);
addTemporaryDirectDep(entry, dep);
- entry.signalDep(new IntVersion(0L));
+ entry.signalDep(IntVersion.of(0L));
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep4);
}
@@ -585,15 +585,15 @@ public class InMemoryNodeEntryTest {
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(dep);
addTemporaryDirectDep(entry, dep);
- assertTrue(entry.signalDep(new IntVersion(1L)));
+ assertTrue(entry.signalDep(IntVersion.of(1L)));
assertEquals(NodeEntry.DirtyState.NEEDS_REBUILDING, entry.getDirtyState());
assertThat(entry.getTemporaryDirectDeps()).containsExactly(dep);
assertThat(entry.markRebuildingAndGetAllRemainingDirtyDirectDeps()).isEmpty();
addTemporaryDirectDep(entry, key("dep2"));
- assertTrue(entry.signalDep(new IntVersion(1L)));
+ assertTrue(entry.signalDep(IntVersion.of(1L)));
setValue(entry, new IntegerValue(5), /*errorInfo=*/null, /*graphVersion=*/1L);
assertTrue(entry.isDone());
- assertEquals("Version increments when deps change", new IntVersion(1L), entry.getVersion());
+ assertEquals("Version increments when deps change", IntVersion.of(1L), entry.getVersion());
}
@Test
@@ -614,7 +614,7 @@ public class InMemoryNodeEntryTest {
for (int ii = 0; ii < 10; ii++) {
assertThat(entry.getNextDirtyDirectDeps()).containsExactly(deps.get(ii));
addTemporaryDirectDep(entry, deps.get(ii));
- assertTrue(entry.signalDep(new IntVersion(0L)));
+ assertTrue(entry.signalDep(IntVersion.of(0L)));
if (ii < 9) {
assertEquals(NodeEntry.DirtyState.CHECK_DEPENDENCIES, entry.getDirtyState());
} else {
@@ -640,7 +640,7 @@ public class InMemoryNodeEntryTest {
@Test
public void testClone() {
InMemoryNodeEntry entry = new InMemoryNodeEntry();
- IntVersion version = new IntVersion(0);
+ IntVersion version = IntVersion.of(0);
IntegerValue originalValue = new IntegerValue(42);
SkyKey originalChild = key("child");
addTemporaryDirectDep(entry, originalChild);
@@ -693,7 +693,7 @@ public class InMemoryNodeEntryTest {
entry.signalDep();
}
}
- entry.setValue(new IntegerValue(42), new IntVersion(42L));
+ entry.setValue(new IntegerValue(42), IntVersion.of(42L));
int i = 0;
GroupedList<SkyKey> entryGroupedDirectDeps = entry.getGroupedDirectDeps();
assertThat(Iterables.size(entryGroupedDirectDeps)).isEqualTo(groupedDirectDeps.size());
@@ -704,8 +704,8 @@ public class InMemoryNodeEntryTest {
private static Set<SkyKey> setValue(NodeEntry entry, SkyValue value,
@Nullable ErrorInfo errorInfo, long graphVersion) {
- return entry.setValue(ValueWithMetadata.normal(value, errorInfo, NO_EVENTS),
- new IntVersion(graphVersion));
+ return entry.setValue(
+ ValueWithMetadata.normal(value, errorInfo, NO_EVENTS), IntVersion.of(graphVersion));
}
private static void addTemporaryDirectDep(NodeEntry entry, SkyKey key) {
diff --git a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
index c0389e02c4..172efd5a8f 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
@@ -76,7 +76,7 @@ import javax.annotation.Nullable;
@RunWith(JUnit4.class)
public class ParallelEvaluatorTest {
protected ProcessableGraph graph;
- protected IntVersion graphVersion = new IntVersion(0);
+ protected IntVersion graphVersion = IntVersion.of(0);
protected GraphTester tester = new GraphTester();
private EventCollector eventCollector;