aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2017-08-03 03:27:55 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-08-03 12:10:06 +0200
commit781b23a6e161d2d32e0a1d8fd699a7a0bda113a1 (patch)
tree723c807acacadfbeeb381bd58ee93d5a3abf5771 /src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java
parenta08bb897569f6d8fd5e0459b67d26c3e9ac69a82 (diff)
Compute progress message lazily in spawn action.
Consumers using spawn action builder now have access to handy overloads that behind the scene do a lazy String.format. In 95% of cases progress messages are expressible as 0, 1, or 2 argument String.formats. This saves memory because the format string is constant and shared between all actions, and the captured subjects are usually live on the heap anyway (eg. labels). Skylark still computes its progress messages eagerly. If we want similar savings there I'd have to follow up with a Skylark proposal. PiperOrigin-RevId: 164068816
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java54
1 files changed, 28 insertions, 26 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java
index 038974b993..078f558f8e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java
@@ -304,7 +304,7 @@ public class ApkActionsBuilder {
new SpawnAction.Builder()
.setExecutable(resourceExtractor)
.setMnemonic("ResourceExtractor")
- .setProgressMessage("Extracting Java resources from deploy jar for " + apkName)
+ .setProgressMessage("Extracting Java resources from deploy jar for %s", apkName)
.addInputArgument(javaResourceZip)
.addOutputArgument(extractedJavaResourceZip)
.build(ruleContext));
@@ -365,16 +365,17 @@ public class ApkActionsBuilder {
/** Uses the zipalign tool to align the zip boundaries for uncompressed resources by 4 bytes. */
private void zipalignApk(RuleContext ruleContext, Artifact inputApk, Artifact zipAlignedApk) {
- ruleContext.registerAction(new SpawnAction.Builder()
- .addInput(inputApk)
- .addOutput(zipAlignedApk)
- .setExecutable(AndroidSdkProvider.fromRuleContext(ruleContext).getZipalign())
- .addArgument("4")
- .addInputArgument(inputApk)
- .addOutputArgument(zipAlignedApk)
- .setProgressMessage("Zipaligning " + apkName)
- .setMnemonic("AndroidZipAlign")
- .build(ruleContext));
+ ruleContext.registerAction(
+ new SpawnAction.Builder()
+ .addInput(inputApk)
+ .addOutput(zipAlignedApk)
+ .setExecutable(AndroidSdkProvider.fromRuleContext(ruleContext).getZipalign())
+ .addArgument("4")
+ .addInputArgument(inputApk)
+ .addOutputArgument(zipAlignedApk)
+ .setProgressMessage("Zipaligning %s", apkName)
+ .setMnemonic("AndroidZipAlign")
+ .build(ruleContext));
}
/**
@@ -386,21 +387,22 @@ public class ApkActionsBuilder {
RuleContext ruleContext, Artifact unsignedApk, Artifact signedAndZipalignedApk) {
ApkSigningMethod signingMethod =
ruleContext.getFragment(AndroidConfiguration.class).getApkSigningMethod();
- ruleContext.registerAction(new SpawnAction.Builder()
- .setExecutable(AndroidSdkProvider.fromRuleContext(ruleContext).getApkSigner())
- .setProgressMessage("Signing " + apkName)
- .setMnemonic("ApkSignerTool")
- .addArgument("sign")
- .addArgument("--ks")
- .addInputArgument(signingKey)
- .addArguments("--ks-pass", "pass:android")
- .addArguments("--v1-signing-enabled", Boolean.toString(signingMethod.signV1()))
- .addArguments("--v1-signer-name", "CERT")
- .addArguments("--v2-signing-enabled", Boolean.toString(signingMethod.signV2()))
- .addArgument("--out")
- .addOutputArgument(signedAndZipalignedApk)
- .addInputArgument(unsignedApk)
- .build(ruleContext));
+ ruleContext.registerAction(
+ new SpawnAction.Builder()
+ .setExecutable(AndroidSdkProvider.fromRuleContext(ruleContext).getApkSigner())
+ .setProgressMessage("Signing %s", apkName)
+ .setMnemonic("ApkSignerTool")
+ .addArgument("sign")
+ .addArgument("--ks")
+ .addInputArgument(signingKey)
+ .addArguments("--ks-pass", "pass:android")
+ .addArguments("--v1-signing-enabled", Boolean.toString(signingMethod.signV1()))
+ .addArguments("--v1-signer-name", "CERT")
+ .addArguments("--v2-signing-enabled", Boolean.toString(signingMethod.signV2()))
+ .addArgument("--out")
+ .addOutputArgument(signedAndZipalignedApk)
+ .addInputArgument(unsignedApk)
+ .build(ruleContext));
}
// Adds the appropriate SpawnAction options depending on if SingleJar is a jar or not.