aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-04-24 07:24:27 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-24 07:25:37 -0700
commita666ffbe5bbbe34e57700977a1382db49484f00f (patch)
tree65189178513dcb6811a1699400b165a622922266 /src/test/java/com/google/devtools/build
parentf9cb859d45887f3f9aafdd535df0fc65718651af (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/test/java/com/google/devtools/build')
-rw-r--r--src/test/java/com/google/devtools/build/lib/BUILD2
-rw-r--r--src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java42
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java2
3 files changed, 46 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 03860d216f..91c8a1d236 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -674,6 +674,7 @@ java_test(
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:depsutils",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/protobuf:extra_actions_base_java_proto",
"//third_party:jsr305",
@@ -795,6 +796,7 @@ java_test(
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:depsutils",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs",
"//src/main/java/com/google/devtools/build/skyframe",
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
index ccec35005a..abbd3472c8 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
@@ -17,14 +17,19 @@ import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.fail;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata.MiddlemanType;
+import com.google.devtools.build.lib.actions.Artifact.SourceArtifact;
+import com.google.devtools.build.lib.actions.ArtifactResolver.ArtifactResolverSupplier;
import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
import com.google.devtools.build.lib.actions.util.LabelArtifactOwner;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.skyframe.serialization.AutoRegistry;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.testutil.MoreAsserts;
import com.google.devtools.build.lib.testutil.Scratch;
@@ -320,6 +325,43 @@ public class ArtifactTest {
}
@Test
+ public void testCodecRecyclesSourceArtifactInstances() throws Exception {
+ Root root = Root.fromPath(scratch.dir("/"));
+ ArtifactRoot artifactRoot = ArtifactRoot.asSourceRoot(root);
+ ArtifactFactory artifactFactory = new ArtifactFactory(execDir, "blaze-out");
+ artifactFactory.setSourceArtifactRoots(ImmutableMap.of(root, artifactRoot));
+ ArtifactResolverSupplier artifactResolverSupplierForTest = () -> artifactFactory;
+
+ OutputBaseSupplier outputBaseSupplier = () -> scratch.getFileSystem().getPath("/");
+ ObjectCodecs objectCodecs =
+ new ObjectCodecs(
+ AutoRegistry.get()
+ .getBuilder()
+ .addReferenceConstant(scratch.getFileSystem())
+ .setAllowDefaultCodec(true)
+ .build(),
+ ImmutableMap.of(
+ FileSystem.class, scratch.getFileSystem(),
+ OutputBaseSupplier.class, outputBaseSupplier,
+ ArtifactResolverSupplier.class, artifactResolverSupplierForTest));
+
+ PathFragment pathFragment = PathFragment.create("src/foo.cc");
+ ArtifactOwner owner = new LabelArtifactOwner(Label.parseAbsoluteUnchecked("//foo:bar"));
+ SourceArtifact sourceArtifact = new SourceArtifact(artifactRoot, pathFragment, owner);
+ SourceArtifact deserialized1 =
+ (SourceArtifact) objectCodecs.deserialize(objectCodecs.serialize(sourceArtifact));
+ SourceArtifact deserialized2 =
+ (SourceArtifact) objectCodecs.deserialize(objectCodecs.serialize(sourceArtifact));
+ assertThat(deserialized1).isSameAs(deserialized2);
+
+ Artifact sourceArtifactFromFactory =
+ artifactFactory.getSourceArtifact(pathFragment, root, owner);
+ Artifact deserialized =
+ (Artifact) objectCodecs.deserialize(objectCodecs.serialize(sourceArtifactFromFactory));
+ assertThat(sourceArtifactFromFactory).isSameAs(deserialized);
+ }
+
+ @Test
public void testLongDirname() throws Exception {
String dirName = createDirNameArtifact().getDirname();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
index cdd47601b3..81979db7e7 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/SymlinkActionTest.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.actions.Executor;
import com.google.devtools.build.lib.actions.OutputBaseSupplier;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.exec.util.TestExecutorBuilder;
+import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationDepsUtils;
import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.vfs.FileSystem;
@@ -100,6 +101,7 @@ public class SymlinkActionTest extends BuildViewTestCase {
new SerializationTester(action)
.addDependency(FileSystem.class, scratch.getFileSystem())
.addDependency(OutputBaseSupplier.class, () -> outputBase)
+ .addDependencies(SerializationDepsUtils.SERIALIZATION_DEPS_FOR_TEST)
.setVerificationFunction(
(in, out) -> {
SymlinkAction inAction = (SymlinkAction) in;