diff options
author | janakr <janakr@google.com> | 2018-05-25 17:04:12 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-05-25 17:05:45 -0700 |
commit | 628e2acb2f0f6294a539b596ae3ef3d7b6eba6c2 (patch) | |
tree | cb0b7e01887461b7f60e3f55f5cd783af0891023 /src/main/java/com/google/devtools/build/lib/vfs | |
parent | 10141a3a351dd49376fc3e891634c5d91328a462 (diff) |
Hand-roll PathFragment$Codec, to squeeze a bit of performance out of it.
PiperOrigin-RevId: 198124705
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/vfs')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/vfs/BUILD | 1 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java | 31 |
2 files changed, 31 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/BUILD b/src/main/java/com/google/devtools/build/lib/vfs/BUILD index 348a476752..8b11e78f08 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/BUILD +++ b/src/main/java/com/google/devtools/build/lib/vfs/BUILD @@ -23,6 +23,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:os_util", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib/actions:commandline_item", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/windows:windows_short_path", "//src/main/java/com/google/devtools/build/lib/windows/jni", diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java index 8c9009fab4..cd1d34cbdc 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java @@ -16,10 +16,18 @@ package com.google.devtools.build.lib.vfs; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.CommandLineItem; +import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.SerializationContext; +import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrintable; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.util.FileType; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; +import java.io.IOException; import java.io.Serializable; import java.util.Set; import javax.annotation.Nullable; @@ -44,7 +52,6 @@ import javax.annotation.Nullable; * * <p>Mac and Windows path fragments are case insensitive. */ -@AutoCodec public final class PathFragment implements Comparable<PathFragment>, Serializable, @@ -744,4 +751,26 @@ public final class PathFragment private Object writeReplace() { return new PathFragmentSerializationProxy(normalizedPath); } + + private static class Codec implements ObjectCodec<PathFragment> { + private final ObjectCodec<String> stringCodec = StringCodecs.asciiOptimized(); + + @Override + public Class<? extends PathFragment> getEncodedClass() { + return PathFragment.class; + } + + @Override + public void serialize( + SerializationContext context, PathFragment obj, CodedOutputStream codedOut) + throws SerializationException, IOException { + stringCodec.serialize(context, obj.normalizedPath, codedOut); + } + + @Override + public PathFragment deserialize(DeserializationContext context, CodedInputStream codedIn) + throws SerializationException, IOException { + return PathFragment.createAlreadyNormalized(stringCodec.deserialize(context, codedIn)); + } + } } |