Merge "AppLaunch: use iorapd's dumpsys command interface" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-04-09 23:02:47 +00:00
committed by Android (Google) Code Review

View File

@@ -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);
}
}
@@ -505,6 +507,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;