diff options
author | Sergio Campama <kaipi@google.com> | 2016-08-26 20:21:27 +0000 |
---|---|---|
committer | John Cater <jcater@google.com> | 2016-08-27 00:36:09 +0000 |
commit | 60f919cb22e8c26564668c09eac754b54b624f45 (patch) | |
tree | 8cd8dfe37751a85c3340d7c17915b005dec92147 /src/main/java/com/google/devtools/build/lib | |
parent | 9ab9fefc9199819f7adb305a3d31fd690202f3fa (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.java | 12 |
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(); } |