diff options
author | cpeyser <cpeyser@google.com> | 2018-04-16 10:50:24 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-16 10:51:56 -0700 |
commit | 6924da260265d4475685530584e82ecaefc04d89 (patch) | |
tree | 27395b22a93d84fd884020474c68d2e6f1e1e4e4 /src/main/java/com/google/devtools/build/lib/skyframe/serialization | |
parent | 99b9248dc623f17e62bf3ba6e5de0127a6f8ec18 (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')
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) |