From e21892456ab554310184ea1cd79ff6979d77c5ef Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 22 Feb 2023 09:46:35 -0800 Subject: [PATCH] Reduce interning memory overhead Part III -- Applies `SkyKeyInterner` to all `SkyKey`s that are using weak interner https://github.com/bazelbuild/bazel/commit/836c608792fe20eeb29221861eb35932e9189db6 implements how `InMemoryGraph` interacts with `SkyKeyInterner`, and applies this feature only to `FileValue#Key`. In this commit, we want to apply `SkyKeyInterner` to all `SkyKey`s using weak interner. Currently there are ~30 types of `SkyKey`s that use bazel weak interner. PiperOrigin-RevId: 511521005 Change-Id: Ia6fb0fc2d494ac1b470268f7e263f7564d64a56b --- .../build/lib/concurrent/BlazeInterners.java | 6 ++++++ .../lib/packages/WorkspaceFileValue.java | 9 ++++++--- .../build/lib/skyframe/AspectKeyCreator.java | 17 +++++++++++++---- .../lib/skyframe/BuildConfigurationKey.java | 9 ++++++--- .../skyframe/BuildInfoCollectionValue.java | 11 +++++++---- .../BuildTopLevelAspectsDetailsFunction.java | 11 +++++++---- .../build/lib/skyframe/BzlCompileValue.java | 13 ++++++++----- .../build/lib/skyframe/BzlLoadValue.java | 10 +++++++--- .../skyframe/ClientEnvironmentFunction.java | 9 ++++++--- .../lib/skyframe/ConfiguredTargetKey.java | 19 ++++++++++++++----- .../ContainingPackageLookupValue.java | 10 +++++++--- .../skyframe/DirectoryListingStateValue.java | 10 +++++++--- .../lib/skyframe/DirectoryListingValue.java | 10 +++++++--- .../build/lib/skyframe/GlobDescriptor.java | 9 ++++++--- .../skyframe/IgnoredPackagePrefixesValue.java | 9 ++++++--- .../lib/skyframe/PackageLookupValue.java | 9 ++++++--- .../build/lib/skyframe/PackageValue.java | 9 ++++++--- .../lib/skyframe/PlatformMappingValue.java | 9 ++++++--- .../build/lib/skyframe/PrecomputedValue.java | 16 ++++++++++++---- .../RegisteredExecutionPlatformsValue.java | 11 +++++++---- .../skyframe/RegisteredToolchainsValue.java | 11 +++++++---- .../lib/skyframe/RepositoryMappingValue.java | 9 ++++++--- 22 files changed, 163 insertions(+), 73 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/concurrent/BlazeInterners.java b/src/main/java/com/google/devtools/build/lib/concurrent/BlazeInterners.java index 7c9d6dc794c6a2..0546f48880db41 100644 --- a/src/main/java/com/google/devtools/build/lib/concurrent/BlazeInterners.java +++ b/src/main/java/com/google/devtools/build/lib/concurrent/BlazeInterners.java @@ -35,6 +35,12 @@ private static InternerBuilder setConcurrencyLevel(InternerBuilder builder) { return builder.concurrencyLevel(CONCURRENCY_LEVEL); } + /** + * Creates an interner which retains a weak reference to each instance it has interned. + * + *

It is preferred to use {@code SkyKey#SkyKeyInterner} instead for interning {@code SkyKey} + * types. + */ public static Interner newWeakInterner() { return setConcurrencyLevel(Interners.newBuilder().weak()).build(); } diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java index dac3b3b76bc835..efa5166209d79a 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java +++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java @@ -16,9 +16,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.vfs.RootedPath; @@ -43,7 +41,7 @@ public class WorkspaceFileValue implements SkyValue { @Immutable @AutoCodec public static class WorkspaceFileKey implements SkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private final RootedPath path; private final int idx; @@ -93,6 +91,11 @@ public int hashCode() { public String toString() { return path + ", " + idx; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } private final Package pkg; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java index fc34f04011b036..fc4929ba9e8276 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java @@ -16,16 +16,15 @@ import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.actions.ActionLookupKey; import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.devtools.build.skyframe.SkyKey; import java.util.Comparator; import javax.annotation.Nullable; @@ -85,7 +84,7 @@ public final int hashCode() { /** Represents an aspect applied to a particular target. */ @AutoCodec public static final class AspectKey extends AspectBaseKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private final ImmutableList baseKeys; private final AspectDescriptor aspectDescriptor; @@ -234,6 +233,11 @@ AspectKey withLabel(Label label) { newBaseKeys.build(), aspectDescriptor); } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } /** @@ -242,7 +246,7 @@ AspectKey withLabel(Label label) { */ @AutoCodec public static final class TopLevelAspectsKey extends AspectBaseKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private final ImmutableList topLevelAspectsClasses; private final Label targetLabel; @@ -324,5 +328,10 @@ public boolean equals(Object o) { && Objects.equal(topLevelAspectsClasses, that.topLevelAspectsClasses) && Objects.equal(topLevelAspectsParameters, that.topLevelAspectsParameters); } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationKey.java index c004ebb6236b5f..19f338ce64ec22 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationKey.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationKey.java @@ -15,9 +15,7 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.analysis.config.BuildOptions; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; @@ -57,7 +55,7 @@ public static BuildConfigurationKey withoutPlatformMapping(BuildOptions options) return interner.intern(new BuildConfigurationKey(options)); } - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private final BuildOptions options; @@ -96,4 +94,9 @@ public String toString() { // This format is depended on by integration tests. return "BuildConfigurationKey[" + options.checksum() + "]"; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java index 4c826138795816..266b67c2cc45f7 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.actions.ActionLookupKey; import com.google.devtools.build.lib.actions.Actions.GeneratingActions; import com.google.devtools.build.lib.actions.BasicActionLookupValue; @@ -22,9 +21,9 @@ import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoKey; import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.devtools.build.skyframe.SkyKey; import java.util.Objects; import javax.annotation.Nullable; @@ -58,8 +57,7 @@ public static BuildInfoKeyAndConfig key( /** Key for BuildInfoCollectionValues. */ @AutoCodec public static final class BuildInfoKeyAndConfig extends ActionLookupKey { - private static final Interner keyInterner = - BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner keyInterner = SkyKey.newInterner(); private final BuildInfoKey infoKey; private final BuildConfigurationKey configKey; @@ -114,5 +112,10 @@ public boolean equals(Object other) { return Objects.equals(this.infoKey, that.infoKey) && Objects.equals(this.configKey, that.configKey); } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return keyInterner; + } } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java index aac6b4d8984b7a..d2f5dd5c0aef81 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java @@ -19,10 +19,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.analysis.AspectCollection; import com.google.devtools.build.lib.analysis.AspectCollection.AspectCycleOnPathException; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.packages.Aspect; import com.google.devtools.build.lib.packages.AspectClass; @@ -244,8 +242,8 @@ public ImmutableList getUsedAspects() { /** {@link SkyKey} for building top-level aspects details. */ @AutoCodec static final class BuildTopLevelAspectsDetailsKey implements SkyKey { - private static final Interner interner = - BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = + SkyKey.newInterner(); private final ImmutableList topLevelAspectsClasses; private final ImmutableMap topLevelAspectsParameters; @@ -311,6 +309,11 @@ public String toString() { .add("topLevelAspectsParameters", topLevelAspectsParameters) .toString(); } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } /** diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java index c599e7e62de569..02e52f3b6d90c8 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java @@ -15,9 +15,7 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant; import com.google.devtools.build.lib.vfs.Root; @@ -132,8 +130,6 @@ public static BzlCompileValue withProgram(Program prog, byte[] digest) { return new Success(prog, digest); } - private static final Interner keyInterner = BlazeInterners.newWeakInterner(); - /** Types of bzl files we may encounter. */ enum Kind { /** A regular .bzl file loaded on behalf of a BUILD or WORKSPACE file. */ @@ -159,6 +155,8 @@ enum Kind { /** SkyKey for retrieving a compiled .bzl program. */ @AutoCodec public static class Key implements SkyKey { + private static final SkyKeyInterner interner = SkyKey.newInterner(); + /** The root in which the .bzl file is to be found. Null for EMPTY_PRELUDE. */ @Nullable final Root root; @@ -180,7 +178,7 @@ private Key(Root root, Label label, Kind kind) { @AutoCodec.VisibleForSerialization @AutoCodec.Instantiator static Key create(Root root, Label label, Kind kind) { - return keyInterner.intern(new Key(root, label, kind)); + return interner.intern(new Key(root, label, kind)); } /** Returns whether this key is for a {@code @_builtins} .bzl file. */ @@ -225,6 +223,11 @@ public SkyFunctionName functionName() { public String toString() { return String.format("%s:[%s]%s", functionName(), root, label); } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } /** Constructs a key for loading a regular (non-prelude) .bzl. */ diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java index 225898a3135f7b..d78c26a780809a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java @@ -17,9 +17,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.BzlVisibility; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; @@ -27,6 +25,7 @@ import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; +import com.google.devtools.build.skyframe.SkyKey.SkyKeyInterner; import com.google.devtools.build.skyframe.SkyValue; import java.util.Objects; import net.starlark.java.eval.Module; @@ -70,7 +69,7 @@ public BzlVisibility getBzlVisibility() { return bzlVisibility; } - private static final Interner keyInterner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner keyInterner = SkyKey.newInterner(); /** SkyKey for a Starlark load. */ public abstract static class Key implements SkyKey { @@ -157,6 +156,11 @@ protected final MoreObjects.ToStringHelper toStringHelper() { public String toString() { return toStringHelper().toString(); } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return keyInterner; + } } /** A key for loading a .bzl during package loading (BUILD evaluation). */ diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java index 60bc5ad34481b0..d95edd94b142a7 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java @@ -14,8 +14,6 @@ package com.google.devtools.build.lib.skyframe; -import com.google.common.collect.Interner; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.skyframe.AbstractSkyKey; import com.google.devtools.build.skyframe.SkyFunction; @@ -35,7 +33,7 @@ public static Key key(String keyString) { @AutoCodec.VisibleForSerialization @AutoCodec static class Key extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private Key(String arg) { super(arg); @@ -51,6 +49,11 @@ static Key create(String arg) { public SkyFunctionName functionName() { return SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } private final AtomicReference> clientEnv; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java index a4c504c6935bb4..ea4c2c535fd42d 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java @@ -17,14 +17,13 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.base.MoreObjects; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.actions.ActionLookupKey; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.devtools.build.skyframe.SkyKey; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.util.Objects; import javax.annotation.Nullable; @@ -63,7 +62,7 @@ public class ConfiguredTargetKey extends ActionLookupKey { * Cache so that the number of ConfiguredTargetKey instances is {@code O(configured targets)} and * not {@code O(edges between configured targets)}. */ - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private final Label label; @Nullable private final BuildConfigurationKey configurationKey; @@ -161,11 +160,16 @@ public final String toString() { return helper.toString(); } + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } + @AutoCodec.VisibleForSerialization @AutoCodec static class ToolchainDependencyConfiguredTargetKey extends ConfiguredTargetKey { - private static final Interner - toolchainDependencyConfiguredTargetKeyInterner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner + toolchainDependencyConfiguredTargetKeyInterner = SkyKey.newInterner(); private final Label executionPlatformLabel; @@ -194,6 +198,11 @@ static ToolchainDependencyConfiguredTargetKey create( public final Label getExecutionPlatformLabel() { return executionPlatformLabel; } + + @Override + public final SkyKeyInterner getSkyKeyInterner() { + return toolchainDependencyConfiguredTargetKeyInterner; + } } /** Returns a new {@link Builder} to create instances of {@link ConfiguredTargetKey}. */ diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java index 39449b2e68cdd3..444c15bb988abe 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java @@ -16,16 +16,15 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.Root; import com.google.devtools.build.skyframe.AbstractSkyKey; import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import javax.annotation.Nonnull; @@ -108,7 +107,7 @@ static String getErrorMessageForLabelCrossingPackageBoundary( /** {@link com.google.devtools.build.skyframe.SkyKey} for {@code ContainingPackageLookupValue}. */ @AutoCodec public static class Key extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private Key(PackageIdentifier arg) { super(arg); @@ -124,6 +123,11 @@ static Key create(PackageIdentifier arg) { public SkyFunctionName functionName() { return SkyFunctions.CONTAINING_PACKAGE_LOOKUP; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } public static ContainingPackage withContainingPackage(PackageIdentifier pkgId, Root root) { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java index c807df9e70545d..14975e3a4691b6 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java @@ -15,15 +15,14 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.vfs.Dirent; import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.skyframe.AbstractSkyKey; import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import java.util.Arrays; import java.util.BitSet; @@ -61,7 +60,7 @@ public static Key key(RootedPath rootedPath) { @AutoCodec.VisibleForSerialization @AutoCodec public static class Key extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private Key(RootedPath arg) { super(arg); @@ -77,6 +76,11 @@ static Key create(RootedPath arg) { public SkyFunctionName functionName() { return SkyFunctions.DIRECTORY_LISTING_STATE; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } /** diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java index 8e8b2dfd1d27be..8ec4723344e08e 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java @@ -13,15 +13,14 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.actions.FileValue; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.skyframe.AbstractSkyKey; import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import java.util.Objects; @@ -66,7 +65,7 @@ public static Key key(RootedPath directoryUnderRoot) { @AutoCodec.VisibleForSerialization @AutoCodec public static class Key extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private Key(RootedPath arg) { super(arg); @@ -82,6 +81,11 @@ static Key create(RootedPath arg) { public SkyFunctionName functionName() { return SkyFunctions.DIRECTORY_LISTING; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } static DirectoryListingValue value(RootedPath dirRootedPath, FileValue dirFileValue, diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java index a436090f9841f5..f752689e17c7db 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java @@ -14,9 +14,7 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.packages.Globber; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; @@ -37,7 +35,7 @@ @ThreadSafe public final class GlobDescriptor implements SkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); /** * Returns interned instance based on the parameters. @@ -155,4 +153,9 @@ public int hashCode() { public SkyFunctionName functionName() { return SkyFunctions.GLOB; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java index 82af37640f2995..71c57166fe76bf 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java @@ -15,9 +15,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant; import com.google.devtools.build.lib.vfs.PathFragment; @@ -73,7 +71,7 @@ public boolean equals(Object obj) { @AutoCodec.VisibleForSerialization @AutoCodec static class Key extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private Key(RepositoryName arg) { super(arg); @@ -89,5 +87,10 @@ static Key create(RepositoryName arg) { public SkyFunctionName functionName() { return SkyFunctions.IGNORED_PACKAGE_PREFIXES; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java index 562ce5e335b4d1..d3a497777f4312 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java @@ -15,9 +15,7 @@ import com.google.common.base.Objects; import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.packages.BuildFileName; import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; @@ -138,7 +136,7 @@ static boolean appliesToKey(SkyKey key, Predicate identifierP @AutoCodec.VisibleForSerialization @AutoCodec static class Key extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private Key(PackageIdentifier arg) { super(arg); @@ -154,6 +152,11 @@ static Key create(PackageIdentifier arg) { public SkyFunctionName functionName() { return SkyFunctions.PACKAGE_LOOKUP; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } /** Successful lookup value. */ diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java index 1918e839caf4a1..26cc390cec2e0f 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java @@ -15,9 +15,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.packages.Package; @@ -64,7 +62,7 @@ public static Key key(PackageIdentifier pkgIdentifier) { @AutoCodec.VisibleForSerialization @AutoCodec public static class Key extends AbstractSkyKey implements CPUHeavySkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private Key(PackageIdentifier arg) { super(arg); @@ -80,6 +78,11 @@ static Key create(PackageIdentifier arg) { public SkyFunctionName functionName() { return SkyFunctions.PACKAGE; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } public static ImmutableList keys(Iterable pkgIdentifiers) { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingValue.java index 61a1ca873fbdaf..389f48e0d64015 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PlatformMappingValue.java @@ -24,13 +24,11 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Interner; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.analysis.PlatformOptions; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.vfs.PathFragment; @@ -61,7 +59,7 @@ public final class PlatformMappingValue implements SkyValue { @ThreadSafety.Immutable @AutoCodec public static final class Key implements SkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); /** * Creates a new platform mappings key with the given, main workspace-relative path to the @@ -134,6 +132,11 @@ public String toString() { + wasExplicitlySetByUser + "}"; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } private final ImmutableMap> platformsToFlags; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java index f77646d3ba4c01..1b56eca79d1856 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java @@ -18,9 +18,7 @@ import com.google.common.base.Preconditions; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.analysis.config.BuildOptions; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.packages.Package.ConfigSettingVisibilityPolicy; import com.google.devtools.build.lib.packages.RuleVisibility; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; @@ -187,7 +185,7 @@ public String toString() { /** {@link com.google.devtools.build.skyframe.SkyKey} for {@code PrecomputedValue}. */ @AutoCodec public static final class Key extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private Key(String arg) { super(arg); @@ -202,13 +200,18 @@ public static Key create(String arg) { public SkyFunctionName functionName() { return SkyFunctions.PRECOMPUTED; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } /** Unshareable version of {@link Key}. */ @AutoCodec @VisibleForSerialization static final class UnshareableKey extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private UnshareableKey(String arg) { super(arg); @@ -229,5 +232,10 @@ public SkyFunctionName functionName() { public boolean valueIsShareable() { return false; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsValue.java index df534c03deec10..f8ee577adeef94 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsValue.java @@ -16,8 +16,6 @@ import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Interner; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; @@ -39,7 +37,7 @@ public static SkyKey key(BuildConfigurationKey configurationKey) { @AutoCodec @AutoCodec.VisibleForSerialization static class Key implements SkyKey { - private static final Interner interners = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private final BuildConfigurationKey configurationKey; @@ -50,7 +48,7 @@ private Key(BuildConfigurationKey configurationKey) { @AutoCodec.Instantiator @AutoCodec.VisibleForSerialization static Key of(BuildConfigurationKey configurationKey) { - return interners.intern(new Key(configurationKey)); + return interner.intern(new Key(configurationKey)); } @Override @@ -75,6 +73,11 @@ public boolean equals(Object obj) { public int hashCode() { return configurationKey.hashCode(); } + + @Override + public final SkyKeyInterner getSkyKeyInterner() { + return interner; + } } static RegisteredExecutionPlatformsValue create( diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsValue.java index bb14011b5e8afe..01fa349d9fab34 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsValue.java @@ -16,9 +16,7 @@ import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.analysis.platform.DeclaredToolchainInfo; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; @@ -39,7 +37,7 @@ public static Key key(BuildConfigurationKey configurationKey) { /** A {@link SkyKey} for {@code RegisteredToolchainsValue}. */ @AutoCodec static class Key implements SkyKey { - private static final Interner interners = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); private final BuildConfigurationKey configurationKey; @@ -50,7 +48,7 @@ private Key(BuildConfigurationKey configurationKey) { @AutoCodec.Instantiator @AutoCodec.VisibleForSerialization static Key of(BuildConfigurationKey configurationKey) { - return interners.intern(new Key(configurationKey)); + return interner.intern(new Key(configurationKey)); } @Override @@ -85,6 +83,11 @@ public boolean equals(Object obj) { public int hashCode() { return configurationKey.hashCode(); } + + @Override + public final SkyKeyInterner getSkyKeyInterner() { + return interner; + } } public static RegisteredToolchainsValue create( diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingValue.java index 1ed0f2f48e3dce..6af4ac15d60f87 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingValue.java @@ -16,10 +16,8 @@ import com.google.auto.value.AutoValue; import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; import com.google.devtools.build.lib.cmdline.RepositoryMapping; import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.util.DetailedExitCode; import com.google.devtools.build.lib.util.ExitCode; @@ -103,7 +101,7 @@ public String toString() { @AutoValue public abstract static class Key implements SkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); + private static final SkyKeyInterner interner = SkyKey.newInterner(); /** The name of the repo to grab mappings for. */ public abstract RepositoryName repoName(); @@ -124,6 +122,11 @@ static Key create(RepositoryName repoName, boolean rootModuleShouldSeeWorkspaceR public SkyFunctionName functionName() { return SkyFunctions.REPOSITORY_MAPPING; } + + @Override + public SkyKeyInterner getSkyKeyInterner() { + return interner; + } } /**