diff options
7 files changed, 18 insertions, 7 deletions
diff --git a/build/android/pylib/gtest/gtest_test_instance.py b/build/android/pylib/gtest/gtest_test_instance.py index 538376d..ce5af45 100644 --- a/build/android/pylib/gtest/gtest_test_instance.py +++ b/build/android/pylib/gtest/gtest_test_instance.py @@ -135,6 +135,7 @@ class GtestTestInstance(test_instance.TestInstance): raise ValueError('Platform mode currently supports only 1 gtest suite') self._extract_test_list_from_filter = args.extract_test_list_from_filter self._shard_timeout = args.shard_timeout + self._skip_clear_data = args.skip_clear_data self._suite = args.suite_name[0] incremental_part = '_incremental' if args.incremental_install else '' @@ -248,6 +249,10 @@ class GtestTestInstance(test_instance.TestInstance): return self._shard_timeout @property + def skip_clear_data(self): + return self._skip_clear_data + + @property def suite(self): return self._suite diff --git a/build/android/pylib/instrumentation/test_options.py b/build/android/pylib/instrumentation/test_options.py index 0d9c46d..e280c33 100644 --- a/build/android/pylib/instrumentation/test_options.py +++ b/build/android/pylib/instrumentation/test_options.py @@ -28,4 +28,5 @@ InstrumentationOptions = collections.namedtuple('InstrumentationOptions', [ 'timeout_scale', 'apk_under_test', 'additional_apks', - 'strict_mode']) + 'strict_mode', + 'skip_clear_data']) diff --git a/build/android/pylib/instrumentation/test_runner.py b/build/android/pylib/instrumentation/test_runner.py index b4bbb62..795e817 100644 --- a/build/android/pylib/instrumentation/test_runner.py +++ b/build/android/pylib/instrumentation/test_runner.py @@ -229,11 +229,12 @@ class TestRunner(base_test_runner.BaseTestRunner): self.coverage_device_file, self.coverage_host_file) self.device.RunShellCommand( 'rm -f %s' % self.coverage_device_file) - elif self.package_info: + elif self.package_info and not self.options.skip_clear_data: apk_under_test = self.test_pkg.GetApkUnderTest() permissions = apk_under_test.GetPermissions() if apk_under_test else None self.device.ClearApplicationState( self.package_info.package, permissions=permissions) + self.device.ClearApplicationState(self.package_info.package) def TearDownPerfMonitoring(self, test): """Cleans up performance monitoring if the specified test required it. diff --git a/build/android/pylib/local/device/local_device_gtest_run.py b/build/android/pylib/local/device/local_device_gtest_run.py index 740a8c3..4217890 100644 --- a/build/android/pylib/local/device/local_device_gtest_run.py +++ b/build/android/pylib/local/device/local_device_gtest_run.py @@ -345,9 +345,7 @@ class LocalDeviceGtestRun(local_device_test_run.LocalDeviceTestRun): if self._test_instance.app_files: self._delegate.PullAppFiles(device, self._test_instance.app_files, self._test_instance.app_file_dir) - # Clearing data when using incremental install wipes out cached optimized - # dex files (and shouldn't be necessary by tests anyways). - if not self._env.incremental_install: + if not self._test_instance.skip_clear_data: self._delegate.Clear(device) # Parse the output. diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/build/android/pylib/local/device/local_device_instrumentation_test_run.py index ef78c89..c0850fa 100644 --- a/build/android/pylib/local/device/local_device_instrumentation_test_run.py +++ b/build/android/pylib/local/device/local_device_instrumentation_test_run.py @@ -219,7 +219,7 @@ class LocalDeviceInstrumentationTestRun( if r.GetType() == base_test_result.ResultType.UNKNOWN: r.SetType(base_test_result.ResultType.CRASH) # TODO(jbudorick): ClearApplicationState on failure before switching - # instrumentation tests to platform mode. + # instrumentation tests to platform mode (but respect --skip-clear-data). return results #override diff --git a/build/android/test_runner.py b/build/android/test_runner.py index 6921ded..e16acbf 100755 --- a/build/android/test_runner.py +++ b/build/android/test_runner.py @@ -216,6 +216,10 @@ def AddDeviceOptions(parser): group.add_argument('--enable-concurrent-adb', action='store_true', help='Run multiple adb commands at the same time, even ' 'for the same device.') + group.add_argument('--skip-clear-data', action='store_true', + help='Do not wipe app data between tests. Use this to ' + 'speed up local development and never on bots ' + '(increases flakiness)') def AddGTestOptions(parser): @@ -467,7 +471,8 @@ def ProcessInstrumentationOptions(args): args.timeout_scale, args.apk_under_test, args.additional_apks, - args.strict_mode) + args.strict_mode, + args.skip_clear_data) def AddUIAutomatorTestOptions(parser): diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index 7e279c3..25b9a00 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni @@ -2100,6 +2100,7 @@ template("test_runner_script") { "--enable-device-cache", "--extract-test-list-from-filter", "--num_retries=0", + "--skip-clear-data", # Clearing wipes optimized dex files. ] } if (is_asan) { |