diff options
author | Nikita Iashchenko <nikitai@google.com> | 2022-07-19 23:13:23 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-07-19 23:13:23 +0000 |
commit | d668118a296bda637ac216b33925075384217b1e (patch) | |
tree | 60bf63e912ce4a7ea73863fbe6448b6955bfe347 | |
parent | 797ea3aa08e0f72cdc546505017903f79ef1f341 (diff) | |
parent | 98bdb39d5e7c5cdc2a14eed33f2b4246cbb46fce (diff) | |
download | vogar-d668118a296bda637ac216b33925075384217b1e.tar.gz |
Merge "Add --serial-dexing and --verbose-dex-stats flags to Vogar" am: ded9550581 am: 602bd6ca24 am: 60e49e9e22 am: e0c0348b87 am: 98bdb39d5e
Original change: https://android-review.googlesource.com/c/platform/external/vogar/+/2150073
Change-Id: I0c45280b1fc25fb45c232d70b13888a3bc7fdfa8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | src/vogar/Run.java | 4 | ||||
-rw-r--r-- | src/vogar/Vogar.java | 19 | ||||
-rw-r--r-- | src/vogar/android/AndroidSdk.java | 14 | ||||
-rw-r--r-- | src/vogar/android/DeviceRuntime.java | 14 | ||||
-rw-r--r-- | test/vogar/android/AbstractModeTest.java | 2 |
5 files changed, 45 insertions, 8 deletions
diff --git a/src/vogar/Run.java b/src/vogar/Run.java index ba36594..402b1c4 100644 --- a/src/vogar/Run.java +++ b/src/vogar/Run.java @@ -106,6 +106,8 @@ public final class Run { public final boolean checkJni; public final boolean debugging; public final Integer sdkVersion; + public final boolean serialDexing; + public final boolean verboseDexStats; public Run(Vogar vogar, Toolchain toolchain, Console console, Mkdir mkdir, AndroidSdk androidSdk, Rm rm, Target target, File runnerDir) @@ -186,6 +188,8 @@ public final class Run { this.checkJni = vogar.checkJni; this.debugging = (vogar.debugPort != null) || vogar.debugApp; this.sdkVersion = vogar.sdkVersion; + this.serialDexing = vogar.serialDexing; + this.verboseDexStats = vogar.verboseDexStats; } private Mode createMode(ModeId modeId, Variant variant) { diff --git a/src/vogar/Vogar.java b/src/vogar/Vogar.java index 59a0616..2be22e9 100644 --- a/src/vogar/Vogar.java +++ b/src/vogar/Vogar.java @@ -221,6 +221,12 @@ public final class Vogar { @Option(names = {"--sdk-version"}) Integer sdkVersion = 28; + @Option(names = {"--serial-dexing"}) + boolean serialDexing = false; + + @Option(names = {"--verbose-dex-stats"}) + boolean verboseDexStats = false; + @VisibleForTesting public Vogar() {} private void printUsage() { @@ -327,6 +333,17 @@ public final class Vogar { System.out.println(); System.out.println(" --verbose: turn on persistent verbose output."); System.out.println(); + System.out.println(" --serial-dexing: disallow Vogar spawn multiple simultaneous dex tasks"); + System.out.println(" Enabling this is useful when there is a memory constraint;"); + System.out.println(" and each dex task could easily consume around 1.5G of memory."); + System.out.println(" Default is: " + serialDexing); + System.out.println(); + System.out.println(" --verbose-dex-stats: print verbose stats of used resources by dex tasks"); + System.out.println(" Enabling this wraps each dex task in '/usr/bin/time -v' call"); + System.out.println(" and adds its output to the stdout log. Useful to get a sense of"); + System.out.println(" resource usage such as RSS memory, CPU usage and wall-clock time."); + System.out.println(" Default is: " + verboseDexStats); + System.out.println(); System.out.println(" --check-jni: enable CheckJNI mode."); System.out.println(" See http://developer.android.com/training/articles/perf-jni.html."); System.out.println(" Default is: " + checkJni + ", but disabled for --benchmark."); @@ -666,7 +683,7 @@ public final class Vogar { AndroidSdk androidSdk = null; if (modeId.requiresAndroidSdk()) { androidSdk = AndroidSdk.createAndroidSdk(console, mkdir, modeId, language, - !actionFiles.isEmpty()); + !actionFiles.isEmpty(), serialDexing, verboseDexStats); } if (runnerType == null) { diff --git a/src/vogar/android/AndroidSdk.java b/src/vogar/android/AndroidSdk.java index c4b06ab..6dc5f4a 100644 --- a/src/vogar/android/AndroidSdk.java +++ b/src/vogar/android/AndroidSdk.java @@ -58,6 +58,8 @@ public class AndroidSdk { private final String desugarJarPath; private final Md5Cache dexCache; private final Language language; + private final boolean serialDexing; + private final boolean verboseDexStats; public static Collection<File> defaultExpectations() { return Collections.singletonList(new File("libcore/expectations/knownfailures.txt")); @@ -71,7 +73,7 @@ public class AndroidSdk { */ public static AndroidSdk createAndroidSdk( Log log, Mkdir mkdir, ModeId modeId, Language language, - boolean supportBuildFromSource) { + boolean supportBuildFromSource, boolean serialDexing, boolean verboseDexStats) { List<String> path = new Command.Builder(log).args("which", ARBITRARY_BUILD_TOOL_NAME) .permitNonZeroExitStatus(true) .execute(); @@ -220,7 +222,7 @@ public class AndroidSdk { } return new AndroidSdk(log, mkdir, compilationClasspath, androidJarPath, desugarJarPath, - new HostFileCache(log, mkdir), language); + new HostFileCache(log, mkdir), language, serialDexing, verboseDexStats); } /** Logs jars that couldn't be found ands suggests a command for building them */ @@ -261,7 +263,8 @@ public class AndroidSdk { @VisibleForTesting AndroidSdk(Log log, Mkdir mkdir, File[] compilationClasspath, String androidJarPath, - String desugarJarPath, HostFileCache hostFileCache, Language language) { + String desugarJarPath, HostFileCache hostFileCache, Language language, + boolean serialDexing, boolean verboseDexStats) { this.log = log; this.mkdir = mkdir; this.compilationClasspath = compilationClasspath; @@ -269,6 +272,8 @@ public class AndroidSdk { this.desugarJarPath = desugarJarPath; this.dexCache = new Md5Cache(log, "dex", hostFileCache); this.language = language; + this.serialDexing = serialDexing; + this.verboseDexStats = verboseDexStats; } // Goes up N levels in the filesystem hierarchy. Return the last file that exists if this goes @@ -382,6 +387,9 @@ public class AndroidSdk { */ Command.Builder builder = new Command.Builder(log); + if (verboseDexStats) { + builder.args("/usr/bin/time").args("-v"); + } switch (dexer) { case DX: builder.args(DX_COMMAND_NAME); diff --git a/src/vogar/android/DeviceRuntime.java b/src/vogar/android/DeviceRuntime.java index 1c85793..5c317ce 100644 --- a/src/vogar/android/DeviceRuntime.java +++ b/src/vogar/android/DeviceRuntime.java @@ -25,7 +25,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import vogar.Action; -import vogar.Toolchain; import vogar.Variant; import vogar.Classpath; import vogar.Mode; @@ -56,10 +55,18 @@ public final class DeviceRuntime implements Mode { @Override public Set<Task> installTasks() { Set<Task> result = new HashSet<Task>(); + Task lastDexTask = null; // dex everything on the classpath and push it to the device. for (File classpathElement : run.classpath.getElements()) { - addCreateDexJarAndPushTasks(result, run.basenameOfJar(classpathElement), + Task currentDexTask = addCreateDexJarAndPushTasks(result, run.basenameOfJar(classpathElement), classpathElement, null); + // If {@code serialDexing} is enabled, make each subsequent dex task + // depend on previous so any moment of time only one dexer (d8 or dx) instance is run + // simultaneously. + if (lastDexTask != null && run.serialDexing) { + currentDexTask.afterSuccess(lastDexTask); + } + lastDexTask = currentDexTask; } return result; } @@ -131,7 +138,7 @@ public final class DeviceRuntime implements Mode { return result; } - private void addCreateDexJarAndPushTasks( + private Task addCreateDexJarAndPushTasks( Set<Task> tasks, String name, File jar, Action action) { File localDex = run.localDexFile(name); File localTempDir = run.localDir(name); @@ -140,6 +147,7 @@ public final class DeviceRuntime implements Mode { localTempDir); tasks.add(createDexJarTask); tasks.add(run.target.pushTask(localDex, deviceDex).afterSuccess(createDexJarTask)); + return createDexJarTask; } private Task newCreateDexJarTask(Classpath classpath, File classpathElement, String name, diff --git a/test/vogar/android/AbstractModeTest.java b/test/vogar/android/AbstractModeTest.java index 225883c..8f60b78 100644 --- a/test/vogar/android/AbstractModeTest.java +++ b/test/vogar/android/AbstractModeTest.java @@ -73,7 +73,7 @@ public abstract class AbstractModeTest { androidSdk = new AndroidSdk(console, mkdir, new File[] {new File("classpath")}, "android.jar", "desugar.jar", new HostFileCache(console, mkdir), - Language.CUR); + Language.CUR, false, false); Target target = createTarget(); final Vogar vogar = new Vogar(); |