aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/serialization
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-04-16 10:50:24 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-16 10:51:56 -0700
commit6924da260265d4475685530584e82ecaefc04d89 (patch)
tree27395b22a93d84fd884020474c68d2e6f1e1e4e4 /src/main/java/com/google/devtools/build/lib/skyframe/serialization
parent99b9248dc623f17e62bf3ba6e5de0127a6f8ec18 (diff)
Introduce NestedSetCodecWithStore, which serializes NestedSet using a process-global bimap of fingerprints to NestedSet contents.
PiperOrigin-RevId: 193063717
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/serialization')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java18
2 files changed, 22 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java
index 30b02517ee..1fe8555944 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SerializationContext.java
@@ -92,6 +92,14 @@ public class SerializationContext {
if (serializer != null) {
return this;
}
+ return getNewMemoizingContext();
+ }
+
+ /**
+ * Returns a memoizing {@link SerializationContext}, as getMemoizingContext above. Unlike
+ * getMemoizingContext, this method is not idempotent - the returned context will always be fresh.
+ */
+ public SerializationContext getNewMemoizingContext() {
return new SerializationContext(this.registry, this.dependencies, new Memoizer.Serializer());
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java
index 1a6841fff7..c10143340f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationTester.java
@@ -61,6 +61,7 @@ public class SerializationTester {
private final ImmutableMap.Builder<Class<?>, Object> dependenciesBuilder;
private final ArrayList<ObjectCodec<?>> additionalCodecs = new ArrayList<>();
private boolean memoize;
+ private ObjectCodecs objectCodecs;
@SuppressWarnings("rawtypes")
private VerificationFunction verificationFunction =
@@ -93,6 +94,11 @@ public class SerializationTester {
return this;
}
+ public SerializationTester setObjectCodecs(ObjectCodecs objectCodecs) {
+ this.objectCodecs = objectCodecs;
+ return this;
+ }
+
@SuppressWarnings("rawtypes")
public <T> SerializationTester setVerificationFunction(
VerificationFunction<T> verificationFunction) {
@@ -107,6 +113,13 @@ public class SerializationTester {
}
public void runTests() throws Exception {
+ ObjectCodecs codecs = this.objectCodecs == null ? createObjectCodecs() : this.objectCodecs;
+ testSerializeDeserialize(codecs);
+ testStableSerialization(codecs);
+ testDeserializeJunkData(codecs);
+ }
+
+ private ObjectCodecs createObjectCodecs() {
ObjectCodecRegistry registry = AutoRegistry.get();
ImmutableMap<Class<?>, Object> dependencies = dependenciesBuilder.build();
ObjectCodecRegistry.Builder registryBuilder = registry.getBuilder();
@@ -116,10 +129,7 @@ public class SerializationTester {
for (ObjectCodec<?> codec : additionalCodecs) {
registryBuilder.add(codec);
}
- ObjectCodecs codecs = new ObjectCodecs(registryBuilder.build(), dependencies);
- testSerializeDeserialize(codecs);
- testStableSerialization(codecs);
- testDeserializeJunkData(codecs);
+ return new ObjectCodecs(registryBuilder.build(), dependencies);
}
private ByteString serialize(Object subject, ObjectCodecs codecs)