diff options
author | 2017-03-17 18:05:56 +0000 | |
---|---|---|
committer | 2017-03-20 11:38:41 +0000 | |
commit | a58f245a4b40c0ef961b1f30d96b16a9349711c3 (patch) | |
tree | 3634b54d040ebfc362b935f783050e44aaecf29e /src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java | |
parent | 3e830928975db0c911ee195f75ce17a0befd16d6 (diff) |
Move library R generation to a separate action, ensuring the merging happens
off the java critical path.
--
PiperOrigin-RevId: 150460041
MOS_MIGRATED_REVID=150460041
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java index 0ab4c32275..e0a40362f7 100644 --- a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java +++ b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java @@ -28,12 +28,13 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; -/** Collects all the functionationality for an action to merge resources. */ +/** Collects all the functionality for an action to merge resources. */ +// TODO(bazel-team): Turn into an instance object, in order to use an external ExecutorService. public class AndroidResourceMerger { static final Logger logger = Logger.getLogger(AndroidResourceProcessor.class.getName()); /** Merges all secondary resources with the primary resources. */ - static MergedAndroidData mergeData( + public static MergedAndroidData mergeData( final ParsedAndroidData primary, final Path primaryManifest, final List<? extends SerializedAndroidData> direct, @@ -49,11 +50,14 @@ public class AndroidResourceMerger { final ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(15)); try (Closeable closeable = ExecutorServiceCloser.createWith(executorService)) { - AndroidDataMerger merger = AndroidDataMerger.createWithPathDeduplictor(executorService); UnwrittenMergedAndroidData merged = - merger.loadAndMerge( - transitive, direct, primary, primaryManifest, type != VariantType.LIBRARY); - logger.fine(String.format("merge finished in %sms", timer.elapsed(TimeUnit.MILLISECONDS))); + mergeData( + executorService, + transitive, + direct, + primary, + primaryManifest, + type != VariantType.LIBRARY); timer.reset().start(); if (symbolsOut != null) { AndroidDataSerializer serializer = AndroidDataSerializer.create(); @@ -82,6 +86,24 @@ public class AndroidResourceMerger { } } + public static UnwrittenMergedAndroidData mergeData( + ListeningExecutorService executorService, + List<? extends SerializedAndroidData> transitive, + List<? extends SerializedAndroidData> direct, + ParsedAndroidData primary, + Path primaryManifest, + boolean allowPrimaryOverrideAll) + throws MergingException { + Stopwatch timer = Stopwatch.createStarted(); + try { + AndroidDataMerger merger = AndroidDataMerger.createWithPathDeduplictor(executorService); + return merger.loadAndMerge( + transitive, direct, primary, primaryManifest, allowPrimaryOverrideAll); + } finally { + logger.fine(String.format("merge finished in %sms", timer.elapsed(TimeUnit.MILLISECONDS))); + } + } + /** * Merges all secondary resources with the primary resources, given that the primary resources * have not yet been parsed and serialized. |