diff options
author | 2017-04-09 17:58:18 -0400 | |
---|---|---|
committer | 2017-05-09 10:54:03 -0400 | |
commit | 4e0a5cb6209952ff9d83b9aa41d68c133ea4a964 (patch) | |
tree | a230735a364d1d7e68755b30cd2dc76330ef35ce /src/test/java | |
parent | 6daff173a68287452598f735f5bae2134fae0815 (diff) |
Optimize TransitiveInfoMap memory consumption.
Instead of using ImmutableMap, we share the keys between all provider maps with an identical key set.
PiperOrigin-RevId: 155432135
Diffstat (limited to 'src/test/java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapOffsetBasedTest.java | 57 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java | 15 |
2 files changed, 69 insertions, 3 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapOffsetBasedTest.java b/src/test/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapOffsetBasedTest.java new file mode 100644 index 0000000000..eef4531b32 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapOffsetBasedTest.java @@ -0,0 +1,57 @@ +// Copyright 2017 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.analysis; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableMap; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link TransitiveInfoProviderMapOffsetBased}. */ +@RunWith(JUnit4.class) +public final class TransitiveInfoProviderMapOffsetBasedTest { + + static class ProviderA implements TransitiveInfoProvider {} + + static class ProviderB implements TransitiveInfoProvider {} + + static class ProviderC implements TransitiveInfoProvider {} + + @Test + public void testTransitiveInfoProviderMap() throws Exception { + ProviderA providerA = new ProviderA(); + ProviderB providerB = new ProviderB(); + ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> providers = + ImmutableMap.<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>builder() + .put(ProviderA.class, providerA) + .put(ProviderB.class, providerB) + .build(); + TransitiveInfoProviderMapOffsetBased map = new TransitiveInfoProviderMapOffsetBased(providers); + + assertThat(map.getProvider(ProviderA.class)).isSameAs(providerA); + assertThat(map.getProvider(ProviderB.class)).isSameAs(providerB); + assertThat(map.getProvider(ProviderC.class)).isNull(); + + ImmutableMap.Builder<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> + containedProviders = + ImmutableMap.<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>builder(); + for (int i = 0; i < map.getProviderCount(); ++i) { + containedProviders.put(map.getProviderClassAt(i), map.getProviderAt(i)); + } + assertThat(containedProviders.build()).isEqualTo(providers); + } +} diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java index 2ecdf0864d..6a8d28b7c6 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java @@ -813,7 +813,12 @@ public class SkylarkAspectsTest extends AnalysisTestCase { AnalysisResult result = update(ImmutableList.of("test/aspect.bzl%MyAspect"), "//test:zzz.jar"); assertThat(result.hasError()).isFalse(); - assertThat(Iterables.getOnlyElement(result.getAspects()).getConfiguredAspect()).isEmpty(); + assertThat( + Iterables.getOnlyElement(result.getAspects()) + .getConfiguredAspect() + .getProviders() + .getProviderCount()) + .isEqualTo(0); } @@ -1714,8 +1719,12 @@ public class SkylarkAspectsTest extends AnalysisTestCase { AnalysisResult analysisResult = update(ImmutableList.of("test/aspect.bzl%MyAspect"), "//test:file.txt"); assertThat(analysisResult.hasError()).isFalse(); - assertThat(Iterables.getOnlyElement(analysisResult.getAspects()).getConfiguredAspect()) - .isEmpty(); + assertThat( + Iterables.getOnlyElement(analysisResult.getAspects()) + .getConfiguredAspect() + .getProviders() + .getProviderCount()) + .isEqualTo(0); } @Test |