aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Sergio Campama <kaipi@google.com>2016-08-26 20:21:27 +0000
committerGravatar John Cater <jcater@google.com>2016-08-27 00:36:09 +0000
commit60f919cb22e8c26564668c09eac754b54b624f45 (patch)
tree8cd8dfe37751a85c3340d7c17915b005dec92147 /src/main/java/com/google/devtools/build/lib
parent9ab9fefc9199819f7adb305a3d31fd690202f3fa (diff)
Instead of using the smallest group as the inputs for the generation actions, use instead the intersection of all the groups in which each proto appears. This further minimizes the average number of inputs per generation/compilation action.
-- MOS_MIGRATED_REVID=131434027
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
index 9187d41d2f..0af84d64d1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
@@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSetMultimap;
import com.google.common.collect.Ordering;
+import com.google.common.collect.Sets;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
@@ -40,6 +41,7 @@ import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Set;
/**
* Support for generating Objective C proto static libraries that registers actions which generate
@@ -330,8 +332,7 @@ final class ProtobufSupport {
protoSets.add(protoProvider.getTransitiveProtoSources());
}
- HashMap<Artifact, ImmutableSet<Artifact>> protoToGroupMap =
- new HashMap<Artifact, ImmutableSet<Artifact>>();
+ HashMap<Artifact, Set<Artifact>> protoToGroupMap = new HashMap<>();
// For each proto in each proto group, store the smallest group in which it is contained. This
// group will be considered the smallest input group with which the proto can be generated.
@@ -343,9 +344,10 @@ final class ProtobufSupport {
if (attributes.isProtoWellKnown(proto)) {
continue;
}
- if (!protoToGroupMap.containsKey(proto)
- || protoToGroupMap.get(proto).size() > protoSet.size()) {
+ if (!protoToGroupMap.containsKey(proto)) {
protoToGroupMap.put(proto, protoSet);
+ } else {
+ protoToGroupMap.put(proto, Sets.intersection(protoSet, protoToGroupMap.get(proto)));
}
}
}
@@ -361,7 +363,7 @@ final class ProtobufSupport {
ImmutableSetMultimap.builder();
for (Artifact proto : protoToGroupMap.keySet()) {
- inputsToOutputsMapBuilder.put(protoToGroupMap.get(proto), proto);
+ inputsToOutputsMapBuilder.put(ImmutableSet.copyOf(protoToGroupMap.get(proto)), proto);
}
return inputsToOutputsMapBuilder.build();
}