summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2020-04-01 12:39:09 -0700
committerIgor Murashkin <iam@google.com>2020-04-08 12:54:11 -0700
commit69dfddf46e665c5c29f23b6aa42d461bfde178aa (patch)
tree507c2a8b56600f560e2ee7c593e8abf42e68d627
parent87776bdcf055ee3024c189373d813571b5aab595 (diff)
AppLaunch: use iorapd's dumpsys command interface
Make the iorapd compilation more robust by introducing retries and switching to direct iorapd dumpsys commands instead of indirect commands. Test: forrest runs Test: am instrument (manual) Bug: 152322429 Change-Id: I7f75f0df95a1a5272237295a75bed8c34f95f859
-rw-r--r--tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java59
1 files changed, 34 insertions, 25 deletions
diff --git a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
index 13bf17954aa4..2d2f4dbdf907 100644
--- a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
+++ b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
@@ -107,7 +107,9 @@ public class AppLaunch extends InstrumentationTestCase {
private static final int PROFILE_SAVE_SLEEP_TIMEOUT = 1000; // Allow 1s for the profile to save
private static final int IORAP_TRACE_DURATION_TIMEOUT = 7000; // Allow 7s for trace to complete.
private static final int IORAP_TRIAL_LAUNCH_ITERATIONS = 3; // min 3 launches to merge traces.
- private static final int IORAP_COMPILE_CMD_TIMEOUT = 600; // in seconds: 10 minutes
+ private static final int IORAP_COMPILE_CMD_TIMEOUT = 60; // in seconds: 1 minutes
+ private static final int IORAP_COMPILE_MIN_TRACES = 1; // configure iorapd to need 1 trace.
+ private static final int IORAP_COMPILE_RETRIES = 3; // retry compiler 3 times if it fails.
private static final String LAUNCH_SUB_DIRECTORY = "launch_logs";
private static final String LAUNCH_FILE = "applaunch.txt";
private static final String TRACE_SUB_DIRECTORY = "atrace_logs";
@@ -132,9 +134,9 @@ public class AppLaunch extends InstrumentationTestCase {
private static final String LAUNCH_ORDER_CYCLIC = "cyclic";
private static final String LAUNCH_ORDER_SEQUENTIAL = "sequential";
private static final String COMPILE_CMD = "cmd package compile -f -m %s %s";
- private static final String IORAP_COMPILE_CMD = "cmd jobscheduler run -f android 283673059";
+ private static final String IORAP_COMPILE_CMD = "dumpsys iorapd --compile-package %s";
private static final String IORAP_MAINTENANCE_CMD =
- "iorap.cmd.maintenance --purge-package %s /data/misc/iorapd/sqlite.db";
+ "dumpsys iorapd --purge-package %s";
private static final String IORAP_DUMPSYS_CMD = "dumpsys iorapd";
private static final String SPEED_PROFILE_FILTER = "speed-profile";
private static final String VERIFY_FILTER = "verify";
@@ -350,9 +352,9 @@ public class AppLaunch extends InstrumentationTestCase {
sleep(IORAP_TRACE_DURATION_TIMEOUT);
if (launch.getLaunchReason().equals(IORAP_TRIAL_LAUNCH_LAST)) {
- // run the iorap job scheduler and wait for iorap to compile fully.
- assertTrue(String.format("Not able to iorap-compile the app : %s", appPkgName),
- compileAppForIorap(appPkgName));
+ // run the iorap compiler and wait for iorap to compile fully.
+ // this throws an exception if it fails.
+ compileAppForIorapWithRetries(appPkgName, IORAP_COMPILE_RETRIES);
}
}
@@ -506,6 +508,22 @@ public class AppLaunch extends InstrumentationTestCase {
}
/**
+ * Compile the app package using compilerFilter,
+ * retrying if the compilation command fails in between.
+ */
+ private void compileAppForIorapWithRetries(String appPkgName, int retries) throws IOException {
+ for (int i = 0; i < retries; ++i) {
+ if (compileAppForIorap(appPkgName)) {
+ return;
+ }
+ sleep(1000);
+ }
+
+ throw new IllegalStateException("compileAppForIorapWithRetries: timed out after "
+ + retries + " retries");
+ }
+
+ /**
* Compile the app package using compilerFilter and return true or false
* based on status of the compilation command.
*/
@@ -513,7 +531,7 @@ public class AppLaunch extends InstrumentationTestCase {
String logcatTimestamp = getTimeNowForLogcat();
getInstrumentation().getUiAutomation().
- executeShellCommand(IORAP_COMPILE_CMD);
+ executeShellCommand(String.format(IORAP_COMPILE_CMD, appPkgName));
int i = 0;
for (i = 0; i < IORAP_COMPILE_CMD_TIMEOUT; ++i) {
@@ -525,7 +543,8 @@ public class AppLaunch extends InstrumentationTestCase {
} else if (status == IorapCompilationStatus.INSUFFICIENT_TRACES) {
Log.e(TAG, "compileAppForIorap: failed due to insufficient traces");
logDumpsysIorapd(appPkgName);
- return false;
+ throw new IllegalStateException(
+ "compileAppForIorap: failed due to insufficient traces");
} // else INCOMPLETE. keep asking iorapd if it's done yet.
sleep(1000);
}
@@ -536,19 +555,7 @@ public class AppLaunch extends InstrumentationTestCase {
return false;
}
- // Wait for the job to finish completely.
- // Other packages could be compiled in cyclic runs.
- int currentAttempt = 0;
- do {
- String logcatLines = getLogcatSinceTime(logcatTimestamp);
- if (logcatLines.contains("IorapForwardingService: Finished background job")) {
- return true;
- }
- sleep(1000);
- } while (currentAttempt++ < IORAP_COMPILE_CMD_TIMEOUT);
-
- Log.e(TAG, "compileAppForIorap: failed due to jobscheduler timeout.");
- return false;
+ return true;
}
/** Save the contents of $(adb shell dumpsys iorapd) to the launch_logs directory. */
@@ -808,11 +815,9 @@ public class AppLaunch extends InstrumentationTestCase {
}
Log.v(TAG, "Purge iorap package: " + packageName);
- stopIorapd();
getInstrumentation().getUiAutomation()
.executeShellCommand(String.format(IORAP_MAINTENANCE_CMD, packageName));
Log.v(TAG, "Executed: " + String.format(IORAP_MAINTENANCE_CMD, packageName));
- startIorapd();
}
String executeShellCommandWithTempFile(String cmd) {
@@ -892,12 +897,16 @@ public class AppLaunch extends InstrumentationTestCase {
throw new AssertionError(e);
}
- stopIorapd();
getInstrumentation().getUiAutomation()
.executeShellCommand(String.format("setprop iorapd.perfetto.enable %b", enable));
getInstrumentation().getUiAutomation()
.executeShellCommand(String.format("setprop iorapd.readahead.enable %b", enable));
- startIorapd();
+ getInstrumentation().getUiAutomation()
+ .executeShellCommand(String.format(
+ "setprop iorapd.maintenance.min_traces %d", IORAP_COMPILE_MIN_TRACES));
+ // this last command blocks until iorapd refreshes its system properties
+ getInstrumentation().getUiAutomation()
+ .executeShellCommand(String.format("dumpsys iorapd --refresh-properties"));
if (enable) {
mIorapStatus = IorapStatus.ENABLED;