From a58f245a4b40c0ef961b1f30d96b16a9349711c3 Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 17 Mar 2017 18:05:56 +0000 Subject: Move library R generation to a separate action, ensuring the merging happens off the java critical path. -- PiperOrigin-RevId: 150460041 MOS_MIGRATED_REVID=150460041 --- .../build/android/AndroidResourceMerger.java | 34 ++++++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java') 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 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 transitive, + List 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. -- cgit v1.2.3