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
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 7c9d6dc..0546f48 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 @@
return builder.concurrencyLevel(CONCURRENCY_LEVEL);
}
+ /**
+ * Creates an interner which retains a weak reference to each instance it has interned.
+ *
+ * <p>It is preferred to use {@code SkyKey#SkyKeyInterner} instead for interning {@code SkyKey}
+ * types.
+ */
public static <T> Interner<T> 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 dac3b3b..efa5166 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 @@
@Immutable
@AutoCodec
public static class WorkspaceFileKey implements SkyKey {
- private static final Interner<WorkspaceFileKey> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<WorkspaceFileKey> interner = SkyKey.newInterner();
private final RootedPath path;
private final int idx;
@@ -93,6 +91,11 @@
public String toString() {
return path + ", " + idx;
}
+
+ @Override
+ public SkyKeyInterner<WorkspaceFileKey> 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 fc34f04..fc4929b 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 @@
/** Represents an aspect applied to a particular target. */
@AutoCodec
public static final class AspectKey extends AspectBaseKey {
- private static final Interner<AspectKey> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<AspectKey> interner = SkyKey.newInterner();
private final ImmutableList<AspectKey> baseKeys;
private final AspectDescriptor aspectDescriptor;
@@ -234,6 +233,11 @@
newBaseKeys.build(),
aspectDescriptor);
}
+
+ @Override
+ public SkyKeyInterner<AspectKey> getSkyKeyInterner() {
+ return interner;
+ }
}
/**
@@ -242,7 +246,7 @@
*/
@AutoCodec
public static final class TopLevelAspectsKey extends AspectBaseKey {
- private static final Interner<TopLevelAspectsKey> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<TopLevelAspectsKey> interner = SkyKey.newInterner();
private final ImmutableList<AspectClass> topLevelAspectsClasses;
private final Label targetLabel;
@@ -324,5 +328,10 @@
&& Objects.equal(topLevelAspectsClasses, that.topLevelAspectsClasses)
&& Objects.equal(topLevelAspectsParameters, that.topLevelAspectsParameters);
}
+
+ @Override
+ public SkyKeyInterner<TopLevelAspectsKey> 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 c004ebb..19f338c 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 @@
return interner.intern(new BuildConfigurationKey(options));
}
- private static final Interner<BuildConfigurationKey> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<BuildConfigurationKey> interner = SkyKey.newInterner();
private final BuildOptions options;
@@ -96,4 +94,9 @@
// This format is depended on by integration tests.
return "BuildConfigurationKey[" + options.checksum() + "]";
}
+
+ @Override
+ public SkyKeyInterner<BuildConfigurationKey> 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 4c82613..266b67c 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 @@
/** Key for BuildInfoCollectionValues. */
@AutoCodec
public static final class BuildInfoKeyAndConfig extends ActionLookupKey {
- private static final Interner<BuildInfoKeyAndConfig> keyInterner =
- BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<BuildInfoKeyAndConfig> keyInterner = SkyKey.newInterner();
private final BuildInfoKey infoKey;
private final BuildConfigurationKey configKey;
@@ -114,5 +112,10 @@
return Objects.equals(this.infoKey, that.infoKey)
&& Objects.equals(this.configKey, that.configKey);
}
+
+ @Override
+ public SkyKeyInterner<BuildInfoKeyAndConfig> 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 aac6b4d..d2f5dd5 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 @@
/** {@link SkyKey} for building top-level aspects details. */
@AutoCodec
static final class BuildTopLevelAspectsDetailsKey implements SkyKey {
- private static final Interner<BuildTopLevelAspectsDetailsKey> interner =
- BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<BuildTopLevelAspectsDetailsKey> interner =
+ SkyKey.newInterner();
private final ImmutableList<AspectClass> topLevelAspectsClasses;
private final ImmutableMap<String, String> topLevelAspectsParameters;
@@ -311,6 +309,11 @@
.add("topLevelAspectsParameters", topLevelAspectsParameters)
.toString();
}
+
+ @Override
+ public SkyKeyInterner<BuildTopLevelAspectsDetailsKey> 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 c599e7e..02e52f3 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 @@
return new Success(prog, digest);
}
- private static final Interner<Key> 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 @@
/** SkyKey for retrieving a compiled .bzl program. */
@AutoCodec
public static class Key implements SkyKey {
+ private static final SkyKeyInterner<Key> 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 @@
@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 String toString() {
return String.format("%s:[%s]%s", functionName(), root, label);
}
+
+ @Override
+ public SkyKeyInterner<Key> 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 225898a..d78c26a 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 @@
return bzlVisibility;
}
- private static final Interner<Key> keyInterner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> keyInterner = SkyKey.newInterner();
/** SkyKey for a Starlark load. */
public abstract static class Key implements SkyKey {
@@ -157,6 +156,11 @@
public String toString() {
return toStringHelper().toString();
}
+
+ @Override
+ public SkyKeyInterner<Key> 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 60bc5ad..d95edd9 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 @@
@AutoCodec.VisibleForSerialization
@AutoCodec
static class Key extends AbstractSkyKey<String> {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private Key(String arg) {
super(arg);
@@ -51,6 +49,11 @@
public SkyFunctionName functionName() {
return SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE;
}
+
+ @Override
+ public SkyKeyInterner<Key> getSkyKeyInterner() {
+ return interner;
+ }
}
private final AtomicReference<Map<String, String>> 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 a4c504c..ea4c2c5 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 @@
* 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<ConfiguredTargetKey> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<ConfiguredTargetKey> interner = SkyKey.newInterner();
private final Label label;
@Nullable private final BuildConfigurationKey configurationKey;
@@ -161,11 +160,16 @@
return helper.toString();
}
+ @Override
+ public SkyKeyInterner<? extends ConfiguredTargetKey> getSkyKeyInterner() {
+ return interner;
+ }
+
@AutoCodec.VisibleForSerialization
@AutoCodec
static class ToolchainDependencyConfiguredTargetKey extends ConfiguredTargetKey {
- private static final Interner<ToolchainDependencyConfiguredTargetKey>
- toolchainDependencyConfiguredTargetKeyInterner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<ToolchainDependencyConfiguredTargetKey>
+ toolchainDependencyConfiguredTargetKeyInterner = SkyKey.newInterner();
private final Label executionPlatformLabel;
@@ -194,6 +198,11 @@
public final Label getExecutionPlatformLabel() {
return executionPlatformLabel;
}
+
+ @Override
+ public final SkyKeyInterner<? extends ConfiguredTargetKey> 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 39449b2..444c15b 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 @@
/** {@link com.google.devtools.build.skyframe.SkyKey} for {@code ContainingPackageLookupValue}. */
@AutoCodec
public static class Key extends AbstractSkyKey<PackageIdentifier> {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private Key(PackageIdentifier arg) {
super(arg);
@@ -124,6 +123,11 @@
public SkyFunctionName functionName() {
return SkyFunctions.CONTAINING_PACKAGE_LOOKUP;
}
+
+ @Override
+ public SkyKeyInterner<Key> 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 c807df9..14975e3 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 @@
@AutoCodec.VisibleForSerialization
@AutoCodec
public static class Key extends AbstractSkyKey<RootedPath> {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private Key(RootedPath arg) {
super(arg);
@@ -77,6 +76,11 @@
public SkyFunctionName functionName() {
return SkyFunctions.DIRECTORY_LISTING_STATE;
}
+
+ @Override
+ public SkyKeyInterner<Key> 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 8e8b2df..8ec47233 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 @@
@AutoCodec.VisibleForSerialization
@AutoCodec
public static class Key extends AbstractSkyKey<RootedPath> {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private Key(RootedPath arg) {
super(arg);
@@ -82,6 +81,11 @@
public SkyFunctionName functionName() {
return SkyFunctions.DIRECTORY_LISTING;
}
+
+ @Override
+ public SkyKeyInterner<Key> 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 a436090..f752689 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<GlobDescriptor> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<GlobDescriptor> interner = SkyKey.newInterner();
/**
* Returns interned instance based on the parameters.
@@ -155,4 +153,9 @@
public SkyFunctionName functionName() {
return SkyFunctions.GLOB;
}
+
+ @Override
+ public SkyKeyInterner<GlobDescriptor> 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 82af376..71c5716 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 @@
@AutoCodec.VisibleForSerialization
@AutoCodec
static class Key extends AbstractSkyKey<RepositoryName> {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private Key(RepositoryName arg) {
super(arg);
@@ -89,5 +87,10 @@
public SkyFunctionName functionName() {
return SkyFunctions.IGNORED_PACKAGE_PREFIXES;
}
+
+ @Override
+ public SkyKeyInterner<Key> 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 562ce5e..d3a4977 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 @@
@AutoCodec.VisibleForSerialization
@AutoCodec
static class Key extends AbstractSkyKey<PackageIdentifier> {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private Key(PackageIdentifier arg) {
super(arg);
@@ -154,6 +152,11 @@
public SkyFunctionName functionName() {
return SkyFunctions.PACKAGE_LOOKUP;
}
+
+ @Override
+ public SkyKeyInterner<Key> 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 1918e83..26cc390 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 @@
@AutoCodec.VisibleForSerialization
@AutoCodec
public static class Key extends AbstractSkyKey<PackageIdentifier> implements CPUHeavySkyKey {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private Key(PackageIdentifier arg) {
super(arg);
@@ -80,6 +78,11 @@
public SkyFunctionName functionName() {
return SkyFunctions.PACKAGE;
}
+
+ @Override
+ public SkyKeyInterner<Key> getSkyKeyInterner() {
+ return interner;
+ }
}
public static ImmutableList<SkyKey> keys(Iterable<PackageIdentifier> 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 61a1ca8..389f48e 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 @@
@ThreadSafety.Immutable
@AutoCodec
public static final class Key implements SkyKey {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
/**
* Creates a new platform mappings key with the given, main workspace-relative path to the
@@ -134,6 +132,11 @@
+ wasExplicitlySetByUser
+ "}";
}
+
+ @Override
+ public SkyKeyInterner<Key> getSkyKeyInterner() {
+ return interner;
+ }
}
private final ImmutableMap<Label, ImmutableSet<String>> 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 f77646d..1b56eca 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 @@
/** {@link com.google.devtools.build.skyframe.SkyKey} for {@code PrecomputedValue}. */
@AutoCodec
public static final class Key extends AbstractSkyKey<String> {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private Key(String arg) {
super(arg);
@@ -202,13 +200,18 @@
public SkyFunctionName functionName() {
return SkyFunctions.PRECOMPUTED;
}
+
+ @Override
+ public SkyKeyInterner<Key> getSkyKeyInterner() {
+ return interner;
+ }
}
/** Unshareable version of {@link Key}. */
@AutoCodec
@VisibleForSerialization
static final class UnshareableKey extends AbstractSkyKey<String> {
- private static final Interner<UnshareableKey> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<UnshareableKey> interner = SkyKey.newInterner();
private UnshareableKey(String arg) {
super(arg);
@@ -229,5 +232,10 @@
public boolean valueIsShareable() {
return false;
}
+
+ @Override
+ public SkyKeyInterner<UnshareableKey> 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 df534c0..f8ee577 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 @@
@AutoCodec
@AutoCodec.VisibleForSerialization
static class Key implements SkyKey {
- private static final Interner<Key> interners = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private final BuildConfigurationKey configurationKey;
@@ -50,7 +48,7 @@
@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 int hashCode() {
return configurationKey.hashCode();
}
+
+ @Override
+ public final SkyKeyInterner<Key> 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 bb14011..01fa349 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 @@
/** A {@link SkyKey} for {@code RegisteredToolchainsValue}. */
@AutoCodec
static class Key implements SkyKey {
- private static final Interner<Key> interners = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
private final BuildConfigurationKey configurationKey;
@@ -50,7 +48,7 @@
@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 int hashCode() {
return configurationKey.hashCode();
}
+
+ @Override
+ public final SkyKeyInterner<Key> 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 1ed0f2f..6af4ac1 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 @@
@AutoValue
public abstract static class Key implements SkyKey {
- private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner<Key> interner = SkyKey.newInterner();
/** The name of the repo to grab mappings for. */
public abstract RepositoryName repoName();
@@ -124,6 +122,11 @@
public SkyFunctionName functionName() {
return SkyFunctions.REPOSITORY_MAPPING;
}
+
+ @Override
+ public SkyKeyInterner<Key> getSkyKeyInterner() {
+ return interner;
+ }
}
/**