summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
index f4b85b209e4f..dd56e0e41164 100644
--- a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
+++ b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java
@@ -76,6 +76,7 @@ public class AppLaunch extends InstrumentationTestCase {
private static final String KEY_DROP_CACHE = "drop_cache";
private static final String KEY_SIMPLEPERF_CMD = "simpleperf_cmd";
private static final String KEY_SIMPLEPERF_APP = "simpleperf_app";
+ private static final String KEY_CYCLE_CLEAN = "cycle_clean";
private static final String KEY_TRACE_ITERATIONS = "trace_iterations";
private static final String KEY_LAUNCH_DIRECTORY = "launch_directory";
private static final String KEY_TRACE_DIRECTORY = "trace_directory";
@@ -137,6 +138,11 @@ public class AppLaunch extends InstrumentationTestCase {
private BufferedWriter mBufferedWriter = null;
private boolean mSimplePerfAppOnly = false;
private String[] mCompilerFilters = null;
+ private String mLastAppName = "";
+ private boolean mCycleCleanUp = false;
+ private boolean mIterationCycle = false;
+ private long mCycleTime = 0;
+ private StringBuilder mCycleTimes = new StringBuilder();
@Override
protected void setUp() throws Exception {
@@ -236,6 +242,7 @@ public class AppLaunch extends InstrumentationTestCase {
// App launch times for trial launch will not be used for final
// launch time calculations.
if (launch.getLaunchReason().equals(TRIAL_LAUNCH)) {
+ mIterationCycle = false;
// In the "applaunch.txt" file, trail launches is referenced using
// "TRIAL_LAUNCH"
String appPkgName = mNameToIntent.get(launch.getApp())
@@ -273,6 +280,7 @@ public class AppLaunch extends InstrumentationTestCase {
// App launch times used for final calculation
else if (launch.getLaunchReason().contains(LAUNCH_ITERATION_PREFIX)) {
+ mIterationCycle = true;
AppLaunchResult launchResults = null;
if (hasFailureOnFirstLaunch(launch)) {
// skip if the app has failures while launched first
@@ -286,6 +294,7 @@ public class AppLaunch extends InstrumentationTestCase {
// if it fails once, skip the rest of the launches
continue;
} else {
+ mCycleTime += launchResults.mLaunchTime;
addLaunchResult(launch, launchResults);
}
sleep(POST_LAUNCH_IDLE_TIMEOUT);
@@ -294,6 +303,7 @@ public class AppLaunch extends InstrumentationTestCase {
// App launch times for trace launch will not be used for final
// launch time calculations.
else if (launch.getLaunchReason().contains(TRACE_ITERATION_PREFIX)) {
+ mIterationCycle = false;
AtraceLogger atraceLogger = AtraceLogger
.getAtraceLoggerInstance(getInstrumentation());
// Start the trace
@@ -314,6 +324,20 @@ public class AppLaunch extends InstrumentationTestCase {
startHomeIntent();
}
sleep(BETWEEN_LAUNCH_SLEEP_TIMEOUT);
+
+ // If cycle clean up is enabled and last app launched is
+ // current app then the cycle is completed and eligible for
+ // cleanup.
+ if (LAUNCH_ORDER_CYCLIC.equalsIgnoreCase(mLaunchOrder) && mCycleCleanUp
+ && launch.getApp().equalsIgnoreCase(mLastAppName)) {
+ // Kill all the apps and drop all the cache
+ cleanUpAfterCycle();
+ if (mIterationCycle) {
+ // Save the previous cycle time and reset the cycle time to 0
+ mCycleTimes.append(String.format("%d,", mCycleTime));
+ mCycleTime = 0;
+ }
+ }
}
} finally {
if (null != mBufferedWriter) {
@@ -321,6 +345,9 @@ public class AppLaunch extends InstrumentationTestCase {
}
}
+ if (mCycleTimes.length() != 0) {
+ mResult.putString("Cycle_Times", mCycleTimes.toString());
+ }
for (String app : mNameToResultKey.keySet()) {
for (String compilerFilter : mCompilerFilters) {
StringBuilder launchTimes = new StringBuilder();
@@ -453,6 +480,7 @@ public class AppLaunch extends InstrumentationTestCase {
mNameToResultKey.put(parts[0], parts[1]);
mNameToLaunchTime.put(parts[0], null);
+ mLastAppName = parts[0];
}
String requiredAccounts = args.getString(KEY_REQUIRED_ACCOUNTS);
if (requiredAccounts != null) {
@@ -487,6 +515,7 @@ public class AppLaunch extends InstrumentationTestCase {
mSimplePerfCmd = args.getString(KEY_SIMPLEPERF_CMD);
mLaunchOrder = args.getString(KEY_LAUNCH_ORDER, LAUNCH_ORDER_CYCLIC);
mSimplePerfAppOnly = Boolean.parseBoolean(args.getString(KEY_SIMPLEPERF_APP));
+ mCycleCleanUp = Boolean.parseBoolean(args.getString(KEY_CYCLE_CLEAN));
mTrialLaunch = mTrialLaunch || Boolean.parseBoolean(args.getString(KEY_TRIAL_LAUNCH));
if (mSimplePerfCmd != null && mSimplePerfAppOnly) {
@@ -597,6 +626,18 @@ public class AppLaunch extends InstrumentationTestCase {
sleep(POST_LAUNCH_IDLE_TIMEOUT);
}
+ private void cleanUpAfterCycle() {
+ // Kill all the apps
+ for (String appName : mNameToIntent.keySet()) {
+ Log.w(TAG, String.format("killing %s", appName));
+ closeApp(appName);
+ }
+ // Drop all the cache.
+ assertNotNull("Issue in dropping the cache",
+ getInstrumentation().getUiAutomation()
+ .executeShellCommand(DROP_CACHE_SCRIPT));
+ }
+
private void closeApp(String appName) {
Intent startIntent = mNameToIntent.get(appName);
if (startIntent != null) {