diff options
author | janakr <janakr@google.com> | 2018-01-24 08:43:35 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-01-24 08:44:59 -0800 |
commit | a39a562850bc17182d2ee0d86177457f27453bef (patch) | |
tree | 29077fc35356e20034b0402e546a157faebd4d02 /src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java | |
parent | 86d206129aae21567c3d7e6adba7d3939970b019 (diff) |
Introduce a wrapper around the ImmutableSortedSet<Class<? extends BuildConfiguration.Fragment>> set of Fragment classes that is part of the BuildConfigurationValue.Key. This class allows us to compute a fingerprint of the wrapped ImmutableSortedSet, making equality comparisons fast. The number of additional wrapper objects is the number of distinct sets of fragment classes, so 1. (In fact, we don't even need to compute a fingerprint, since reference equality does the job for us here, but we do it just to be conservative.)
This CL has a performance benefit for Bazel currently, but has a bigger performance benefit in the following changes, where there are more BuildConfigurationValue.Key objects to compare.
PiperOrigin-RevId: 183090122
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java index 5d4e24aad7..118a636294 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java @@ -47,6 +47,7 @@ import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildIn import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; +import com.google.devtools.build.lib.analysis.config.FragmentClassSet; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.events.Event; @@ -112,8 +113,8 @@ public final class SkyframeBuildView { private BuildConfiguration topLevelHostConfiguration; // Fragment-limited versions of the host configuration. It's faster to create/cache these here // than to store them in Skyframe. - private Map<Set<Class<? extends BuildConfiguration.Fragment>>, BuildConfiguration> - hostConfigurationCache = Maps.newConcurrentMap(); + private Map<FragmentClassSet, BuildConfiguration> hostConfigurationCache = + Maps.newConcurrentMap(); private BuildConfigurationCollection configurations; @@ -545,10 +546,10 @@ public final class SkyframeBuildView { // trims a host configuration to the same scope as a target configuration. Since their options // are different, the host instance may actually be able to produce the fragment. So it's // wrong and potentially dangerous to unilaterally exclude it. - Set<Class<? extends BuildConfiguration.Fragment>> fragmentClasses = + FragmentClassSet fragmentClasses = config.trimConfigurations() ? config.fragmentClasses() - : ruleClassProvider.getAllFragments(); + : FragmentClassSet.of(ruleClassProvider.getAllFragments()); BuildConfiguration hostConfig = hostConfigurationCache.get(fragmentClasses); if (hostConfig != null) { return hostConfig; |