diff options
author | michajlo <michajlo@google.com> | 2017-08-04 18:49:49 +0200 |
---|---|---|
committer | Jakob Buchgraber <buchgr@google.com> | 2017-08-07 11:22:03 +0200 |
commit | 2266a6f88030e7121031db19fb5efc3fc7cb149c (patch) | |
tree | b2e50e652da50730e8676e86f32f68b55b62b567 /src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java | |
parent | 652046954c9479a91cb7f07014d805525091a0b1 (diff) |
Micro-optimization for TransitiveBaseTraversalFunction
No need to create 2-3 collections when we only need one.
PiperOrigin-RevId: 164273126
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java index 3bc1f30845..c622340c3a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java @@ -13,6 +13,8 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe; +import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import com.google.devtools.build.lib.cmdline.Label; @@ -123,7 +125,8 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky TProcessedTargets processedTargets = processTarget(label, targetAndErrorIfAny); // Process deps from attributes. - Iterable<SkyKey> labelDepKeys = getLabelDepKeys(targetAndErrorIfAny.getTarget()); + Collection<SkyKey> labelDepKeys = + Collections2.transform(getLabelDeps(targetAndErrorIfAny.getTarget()), this::getKey); Map<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>> depMap = env.getValuesOrThrow(labelDepKeys, NoSuchPackageException.class, @@ -195,42 +198,41 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky Environment env) throws InterruptedException; - private Iterable<SkyKey> getLabelDepKeys(Target target) throws InterruptedException { - List<SkyKey> depKeys = Lists.newArrayList(); - for (Label depLabel : getLabelDeps(target)) { - depKeys.add(getKey(depLabel)); - } - return depKeys; - } - // TODO(bazel-team): Unify this logic with that in LabelVisitor, and possibly DependencyResolver. - private static Iterable<Label> getLabelDeps(Target target) throws InterruptedException { - final Set<Label> labels = new HashSet<>(); + private static Collection<Label> getLabelDeps(Target target) throws InterruptedException { if (target instanceof OutputFile) { Rule rule = ((OutputFile) target).getGeneratingRule(); - labels.add(rule.getLabel()); - visitTargetVisibility(target, labels); + List<Label> visibilityLabels = visitTargetVisibility(target); + HashSet<Label> result = new HashSet<>(visibilityLabels.size() + 1); + result.add(rule.getLabel()); + result.addAll(visibilityLabels); + return result; } else if (target instanceof InputFile) { - visitTargetVisibility(target, labels); + return new HashSet<>(visitTargetVisibility(target)); } else if (target instanceof Rule) { - visitTargetVisibility(target, labels); - visitRule(target, labels); + List<Label> visibilityLabels = visitTargetVisibility(target); + Collection<Label> ruleLabels = visitRule(target); + HashSet<Label> result = new HashSet<>(visibilityLabels.size() + ruleLabels.size()); + result.addAll(visibilityLabels); + result.addAll(ruleLabels); + return result; } else if (target instanceof PackageGroup) { - visitPackageGroup((PackageGroup) target, labels); + return new HashSet<>(visitPackageGroup((PackageGroup) target)); + } else { + return ImmutableSet.of(); } - return labels; } - private static void visitRule(Target target, Set<Label> labels) throws InterruptedException { - labels.addAll(((Rule) target).getTransitions(DependencyFilter.NO_NODEP_ATTRIBUTES).values()); + private static Collection<Label> visitRule(Target target) throws InterruptedException { + return ((Rule) target).getTransitions(DependencyFilter.NO_NODEP_ATTRIBUTES).values(); } - private static void visitTargetVisibility(Target target, Set<Label> labels) { - labels.addAll(target.getVisibility().getDependencyLabels()); + private static List<Label> visitTargetVisibility(Target target) { + return target.getVisibility().getDependencyLabels(); } - private static void visitPackageGroup(PackageGroup packageGroup, Set<Label> labels) { - labels.addAll(packageGroup.getIncludes()); + private static List<Label> visitPackageGroup(PackageGroup packageGroup) { + return packageGroup.getIncludes(); } enum LoadTargetResultsType { |