aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-03-17 18:05:56 +0000
committerGravatar Yue Gan <yueg@google.com>2017-03-20 11:38:41 +0000
commita58f245a4b40c0ef961b1f30d96b16a9349711c3 (patch)
tree3634b54d040ebfc362b935f783050e44aaecf29e /src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java
parent3e830928975db0c911ee195f75ce17a0befd16d6 (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.java34
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.