aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/vfs
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-05-25 17:04:12 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-25 17:05:45 -0700
commit628e2acb2f0f6294a539b596ae3ef3d7b6eba6c2 (patch)
treecb0b7e01887461b7f60e3f55f5cd783af0891023 /src/main/java/com/google/devtools/build/lib/vfs
parent10141a3a351dd49376fc3e891634c5d91328a462 (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/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java31
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));
+ }
+ }
}