Skip to content

Commit

Permalink
Streamline code to cache configurations.
Browse files Browse the repository at this point in the history
Work towards platform-based flags: bazelbuild#19409.

PiperOrigin-RevId: 580452068
Change-Id: If94e0fbd9a815bfe3decca21ef1fd58003b4c366
  • Loading branch information
katre authored and copybara-github committed Nov 8, 2023
1 parent 371e927 commit 926b2c4
Showing 1 changed file with 18 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.google.devtools.build.lib.analysis.AnalysisProtosV2.CqueryResult;
import com.google.devtools.build.lib.analysis.AnalysisProtosV2.CqueryResultOrBuilder;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
Expand Down Expand Up @@ -56,6 +57,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

/** Proto output formatter for cquery results. */
class ProtoOutputFormatterCallback extends CqueryThreadsafeCallback {
Expand All @@ -80,11 +82,24 @@ public String formatName() {

private static class ConfigurationCache {
private final Map<BuildConfigurationEvent, Integer> cache = new HashMap<>();
private final Function<BuildConfigurationKey, BuildConfigurationValue> configurationGetter;

private ConfigurationCache(
Function<BuildConfigurationKey, BuildConfigurationValue> configurationGetter) {
this.configurationGetter = configurationGetter;
}

public int getId(BuildConfigurationEvent buildConfigurationEvent) {
return cache.computeIfAbsent(buildConfigurationEvent, event -> cache.size() + 1);
}

public int getId(BuildOptions options) {
BuildConfigurationValue configurationValue =
configurationGetter.apply(BuildConfigurationKey.create(options));
BuildConfigurationEvent buildConfigurationEvent = configurationValue.toBuildEvent();
return getId(buildConfigurationEvent);
}

public ImmutableList<Configuration> getConfigurations() {
return cache.entrySet().stream()
.map(
Expand All @@ -110,7 +125,8 @@ public ImmutableList<Configuration> getConfigurations() {
private final OutputType outputType;
private final AspectResolver resolver;
private final SkyframeExecutor skyframeExecutor;
private final ConfigurationCache configurationCache = new ConfigurationCache();
private final ConfigurationCache configurationCache =
new ConfigurationCache(this::getConfiguration);
private final JsonFormat.Printer jsonPrinter = JsonFormat.printer();
private final RuleClassProvider ruleClassProvider;

Expand Down Expand Up @@ -261,9 +277,7 @@ public void processOutput(Iterable<ConfiguredTarget> partialResult)
.setLabel(labelPrinter.toString(resolvedTransition.label())));
} else {
for (BuildOptions options : resolvedTransition.options()) {
BuildConfigurationEvent buildConfigurationEvent =
getConfiguration(BuildConfigurationKey.create(options)).toBuildEvent();
int configurationId = configurationCache.getId(buildConfigurationEvent);
int configurationId = configurationCache.getId(options);

targetBuilder
.getRuleBuilder()
Expand Down

0 comments on commit 926b2c4

Please sign in to comment.