diff options
author | 2018-04-24 07:24:27 -0700 | |
---|---|---|
committer | 2018-04-24 07:25:37 -0700 | |
commit | a666ffbe5bbbe34e57700977a1382db49484f00f (patch) | |
tree | 65189178513dcb6811a1699400b165a622922266 /src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils | |
parent | f9cb859d45887f3f9aafdd535df0fc65718651af (diff) |
SourceArtifacts are interned on deserialization using an ArtifactFactory. This should reduce memory consumption in NestedSet deserialization, which currently does not recycle Artifact instances.
PiperOrigin-RevId: 194083901
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils')
3 files changed, 100 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD index 02fa5f90f8..c57f70010f 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD @@ -10,7 +10,10 @@ java_library( testonly = 1, srcs = glob( ["*.java"], - exclude = ["FakeDirectories.java"], + exclude = [ + "FakeDirectories.java", + "SerializationDepsUtils.java", + ], ), deps = [ "//src/main/java/com/google/devtools/build/lib:syntax", @@ -27,6 +30,19 @@ java_library( ) java_library( + name = "depsutils", + srcs = ["SerializationDepsUtils.java"], + deps = [ + "//src/main/java/com/google/devtools/build/lib/actions", + "//src/main/java/com/google/devtools/build/lib/cmdline", + "//src/main/java/com/google/devtools/build/lib/vfs", + "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", + "//third_party:guava", + "//third_party:jsr305", + ], +) + +java_library( name = "fake_directories", testonly = 1, srcs = ["FakeDirectories.java"], diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationDepsUtils.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationDepsUtils.java new file mode 100644 index 0000000000..f80b78d8b9 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/SerializationDepsUtils.java @@ -0,0 +1,77 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skyframe.serialization.testutils; + +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.Artifact.SourceArtifact; +import com.google.devtools.build.lib.actions.ArtifactOwner; +import com.google.devtools.build.lib.actions.ArtifactResolver; +import com.google.devtools.build.lib.actions.ArtifactResolver.ArtifactResolverSupplier; +import com.google.devtools.build.lib.actions.ArtifactRoot; +import com.google.devtools.build.lib.actions.PackageRootResolver; +import com.google.devtools.build.lib.cmdline.RepositoryName; +import com.google.devtools.build.lib.vfs.Path; +import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.build.lib.vfs.Root; +import java.util.Map; +import javax.annotation.Nullable; + +/** Utilities for testing with serialization dependencies. */ +public class SerializationDepsUtils { + + /** Default serialization dependencies for testing. */ + public static final ImmutableMap<Class<?>, Object> SERIALIZATION_DEPS_FOR_TEST = + ImmutableMap.of(ArtifactResolverSupplier.class, new ArtifactResolverSupplierForTest()); + + /** + * An {@link ArtifactResolverSupplier} that calls directly into the {@link SourceArtifact} + * constructor. + */ + public static class ArtifactResolverSupplierForTest implements ArtifactResolverSupplier { + + @Override + public ArtifactResolver get() { + return new ArtifactResolver() { + @Override + public Artifact getSourceArtifact(PathFragment execPath, Root root, ArtifactOwner owner) { + return new SourceArtifact(ArtifactRoot.asSourceRoot(root), execPath, owner); + } + + @Override + public Artifact getSourceArtifact(PathFragment execPath, Root root) { + throw new UnsupportedOperationException(); + } + + @Override + public Artifact resolveSourceArtifact( + PathFragment execPath, RepositoryName repositoryName) { + throw new UnsupportedOperationException(); + } + + @Nullable + @Override + public Map<PathFragment, Artifact> resolveSourceArtifacts( + Iterable<PathFragment> execPaths, PackageRootResolver resolver) { + throw new UnsupportedOperationException(); + } + + @Override + public Path getPathFromSourceExecPath(PathFragment execPath) { + throw new UnsupportedOperationException(); + } + }; + } + } +} 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 c10143340f..ff4dbe8b4d 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 @@ -30,6 +30,7 @@ import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; import java.io.IOException; import java.util.ArrayList; +import java.util.Map; import java.util.Random; import java.util.logging.Level; import java.util.logging.Logger; @@ -84,6 +85,11 @@ public class SerializationTester { return this; } + public SerializationTester addDependencies(Map<Class<?>, Object> dependencies) { + dependenciesBuilder.putAll(dependencies); + return this; + } + public SerializationTester addCodec(ObjectCodec<?> codec) { additionalCodecs.add(codec); return this; |