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/analysis/config/BuildConfiguration.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/analysis/config/BuildConfiguration.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java | 12 |
1 files changed, 6 insertions, 6 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 10daadda48..3b54a8b17c 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 @@ -26,7 +26,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedMap; -import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Interner; import com.google.common.collect.Interners; import com.google.common.collect.Iterables; @@ -1112,6 +1111,7 @@ public class BuildConfiguration implements BuildEvent { private final String checksum; private final ImmutableSortedMap<Class<? extends Fragment>, Fragment> fragments; + private final FragmentClassSet fragmentClassSet; private final ImmutableMap<String, Class<? extends Fragment>> skylarkVisibleFragments; private final String repositoryName; @@ -1390,6 +1390,7 @@ public class BuildConfiguration implements BuildEvent { String repositoryName) { this.directories = directories; this.fragments = makeFragmentsMap(fragmentsMap); + this.fragmentClassSet = FragmentClassSet.of(this.fragments.keySet()); this.skylarkVisibleFragments = buildIndexOfSkylarkVisibleFragments(); this.repositoryName = repositoryName; @@ -1475,12 +1476,11 @@ public class BuildConfiguration implements BuildEvent { * configuration is assumed to have). */ public BuildConfiguration clone( - Set<Class<? extends BuildConfiguration.Fragment>> fragmentClasses, - RuleClassProvider ruleClassProvider) { + FragmentClassSet fragmentClasses, RuleClassProvider ruleClassProvider) { ClassToInstanceMap<Fragment> fragmentsMap = MutableClassToInstanceMap.create(); for (Fragment fragment : fragments.values()) { - if (fragmentClasses.contains(fragment.getClass())) { + if (fragmentClasses.fragmentClasses().contains(fragment.getClass())) { fragmentsMap.put(fragment.getClass(), fragment); } } @@ -1847,8 +1847,8 @@ public class BuildConfiguration implements BuildEvent { } /** Which fragments does this configuration contain? */ - public ImmutableSortedSet<Class<? extends Fragment>> fragmentClasses() { - return fragments.keySet(); + public FragmentClassSet fragmentClasses() { + return fragmentClassSet; } /** |