diff options
author | 2018-03-10 05:14:09 -0800 | |
---|---|---|
committer | 2018-03-10 05:15:51 -0800 | |
commit | 50f99d56bb710f01524bd3f04882dada16a792c3 (patch) | |
tree | 09e3902e29ebf3a8a7d41db5af4d310989fbe591 /src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java | |
parent | deccc485603c004daad959fd747f1c0c9efc4f00 (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.java | 45 |
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()); } } |