aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-03-10 05:14:09 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-10 05:15:51 -0800
commit50f99d56bb710f01524bd3f04882dada16a792c3 (patch)
tree09e3902e29ebf3a8a7d41db5af4d310989fbe591 /src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
parentdeccc485603c004daad959fd747f1c0c9efc4f00 (diff)
ActionOwner references only BuildEvent instead of full BuildConfiguration
This reduces the size of its serialized representation. PiperOrigin-RevId: 188597127
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java45
1 files changed, 25 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index ce0a75a63b..dc95254181 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -18,6 +18,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
+import com.google.common.base.Suppliers;
import com.google.common.base.Verify;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ClassToInstanceMap;
@@ -34,16 +35,14 @@ import com.google.common.collect.Multimap;
import com.google.common.collect.MutableClassToInstanceMap;
import com.google.devtools.build.lib.actions.ActionEnvironment;
import com.google.devtools.build.lib.actions.ArtifactRoot;
-import com.google.devtools.build.lib.actions.BuildConfigurationInterface;
+import com.google.devtools.build.lib.actions.BuildConfigurationEvent;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
import com.google.devtools.build.lib.analysis.config.transitions.ComposingPatchTransition;
import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
-import com.google.devtools.build.lib.buildeventstream.BuildEventConverters;
import com.google.devtools.build.lib.buildeventstream.BuildEventId;
import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
-import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.RepositoryName;
@@ -71,7 +70,6 @@ import com.google.devtools.common.options.OptionMetadataTag;
import com.google.devtools.common.options.OptionsParsingException;
import com.google.devtools.common.options.TriState;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@@ -82,6 +80,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
+import java.util.function.Supplier;
import javax.annotation.Nullable;
/**
@@ -113,7 +112,7 @@ import javax.annotation.Nullable;
// TODO(janakr): If overhead of fragments class names is too high, add constructor that just takes
// fragments and gets names from them.
@AutoCodec
-public class BuildConfiguration implements BuildConfigurationInterface {
+public class BuildConfiguration {
/**
* Sorts fragments by class name. This produces a stable order which, e.g., facilitates consistent
* output from buildMnemonic.
@@ -1180,6 +1179,8 @@ public class BuildConfiguration implements BuildConfigurationInterface {
/** Data for introspecting the options used by this configuration. */
private final TransitiveOptionDetails transitiveOptionDetails;
+ private final Supplier<BuildConfigurationEvent> buildEventSupplier;
+
/**
* Returns true if this configuration is semantically equal to the other, with
* the possible exception that the other has fewer fragments.
@@ -1406,6 +1407,7 @@ public class BuildConfiguration implements BuildConfigurationInterface {
reservedActionMnemonics.addAll(fragment.getReservedActionMnemonics());
}
this.reservedActionMnemonics = reservedActionMnemonics.build();
+ this.buildEventSupplier = Suppliers.memoize(this::createBuildEvent);
}
/**
@@ -2068,24 +2070,27 @@ public class BuildConfiguration implements BuildConfigurationInterface {
return currentTransition;
}
- @Override
public BuildEventId getEventId() {
return BuildEventId.configurationId(checksum());
}
- @Override
- public Collection<BuildEventId> getChildrenEvents() {
- return ImmutableList.of();
- }
-
- @Override
- public BuildEventStreamProtos.BuildEvent asStreamProto(BuildEventConverters converters) {
- BuildEventStreamProtos.Configuration.Builder builder =
- BuildEventStreamProtos.Configuration.newBuilder()
- .setMnemonic(getMnemonic())
- .setPlatformName(getCpu())
- .putAllMakeVariable(getMakeEnvironment())
- .setCpu(getCpu());
- return GenericBuildEvent.protoChaining(this).setConfiguration(builder.build()).build();
+ public BuildConfigurationEvent toBuildEvent() {
+ return buildEventSupplier.get();
+ }
+
+ private BuildConfigurationEvent createBuildEvent() {
+ BuildEventId eventId = getEventId();
+ BuildEventStreamProtos.BuildEvent.Builder builder =
+ BuildEventStreamProtos.BuildEvent.newBuilder();
+ builder
+ .setId(eventId.asStreamProto())
+ .setConfiguration(
+ BuildEventStreamProtos.Configuration.newBuilder()
+ .setMnemonic(getMnemonic())
+ .setPlatformName(getCpu())
+ .putAllMakeVariable(getMakeEnvironment())
+ .setCpu(getCpu())
+ .build());
+ return new BuildConfigurationEvent(eventId, builder.build());
}
}