Chromium Code Reviews| Index: build/android/pylib/local/device/local_device_instrumentation_test_run.py |
| 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 65c9e5e658c9ef3f572c1020bcf9f46ccb5fe245..5d4165fb79aa1cb22253bab7b433f216e837bcfd 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 |
| @@ -2,6 +2,7 @@ |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| +import contextlib |
| import logging |
| import os |
| import posixpath |
| @@ -50,7 +51,8 @@ TIMEOUT_ANNOTATIONS = [ |
| ('SmallTest', 1 * 60), |
| ] |
| -LOGCAT_FILTERS = ['*:e', 'chromium:v', 'cr_*:v', 'DEBUG:I'] |
| +LOGCAT_FILTERS = ['*:e', 'chromium:v', 'cr_*:v', 'DEBUG:I', |
| + 'StrictMode:D', '%s:I' % _TAG] |
| EXTRA_SCREENSHOT_FILE = ( |
| 'org.chromium.base.test.ScreenshotOnFailureStatement.ScreenshotFile') |
| @@ -65,6 +67,18 @@ RE_RENDER_IMAGE_NAME = re.compile( |
| r'(?P<device_model>\w+)\.' |
| r'(?P<orientation>port|land)\.png') |
| +@contextlib.contextmanager |
| +def log_test_endpoints(device, test_name): |
|
jbudorick
2017/05/23 00:42:21
nit: _LogTestEndpoints, since this is at module sc
|
| + device.RunShellCommand( |
| + ['log', '-p', 'i', '-t', _TAG, 'START %s' % test_name], |
| + check_return=True) |
| + try: |
| + yield |
| + finally: |
| + device.RunShellCommand( |
| + ['log', '-p', 'i', '-t', _TAG, 'END %s' % test_name], |
| + check_return=True) |
| + |
| # TODO(jbudorick): Make this private once the instrumentation test_runner is |
| # deprecated. |
| def DidPackageCrashOnDevice(package_name, device): |
| @@ -354,38 +368,32 @@ class LocalDeviceInstrumentationTestRun( |
| self._flag_changers[str(device)].PushFlags( |
| add=flags_to_add, remove=flags_to_remove) |
| - try: |
| - device.RunShellCommand( |
| - ['log', '-p', 'i', '-t', _TAG, 'START %s' % test_name], |
| - check_return=True) |
| - time_ms = lambda: int(time.time() * 1e3) |
| - start_ms = time_ms() |
| - |
| - stream_name = 'logcat_%s_%s_%s' % ( |
| - test_name.replace('#', '.'), |
| - time.strftime('%Y%m%dT%H%M%S-UTC', time.gmtime()), |
| - device.serial) |
| - logmon = logdog_logcat_monitor.LogdogLogcatMonitor( |
| - device.adb, stream_name, filter_specs=LOGCAT_FILTERS) |
| + time_ms = lambda: int(time.time() * 1e3) |
| + start_ms = time_ms() |
| - with contextlib_ext.Optional( |
| - logmon, self._test_instance.should_save_logcat): |
| + stream_name = 'logcat_%s_%s_%s' % ( |
| + test_name.replace('#', '.'), |
| + time.strftime('%Y%m%dT%H%M%S-UTC', time.gmtime()), |
| + device.serial) |
| + logmon = logdog_logcat_monitor.LogdogLogcatMonitor( |
| + device.adb, stream_name, filter_specs=LOGCAT_FILTERS) |
| + |
| + with contextlib_ext.Optional( |
| + logmon, self._test_instance.should_save_logcat): |
| + with log_test_endpoints(device, test_name): |
| with contextlib_ext.Optional( |
| trace_event.trace(test_name), |
| self._env.trace_output): |
| output = device.StartInstrumentation( |
| target, raw=True, extras=extras, timeout=timeout, retries=0) |
| - logcat_url = logmon.GetLogcatURL() |
| - finally: |
| - device.RunShellCommand( |
| - ['log', '-p', 'i', '-t', _TAG, 'END %s' % test_name], |
| - check_return=True) |
| - duration_ms = time_ms() - start_ms |
| - if flags_to_add or flags_to_remove: |
| - self._flag_changers[str(device)].Restore() |
| - if test_timeout_scale: |
| - valgrind_tools.SetChromeTimeoutScale( |
| - device, self._test_instance.timeout_scale) |
| + |
| + logcat_url = logmon.GetLogcatURL() |
| + duration_ms = time_ms() - start_ms |
| + if flags_to_add or flags_to_remove: |
| + self._flag_changers[str(device)].Restore() |
| + if test_timeout_scale: |
| + valgrind_tools.SetChromeTimeoutScale( |
| + device, self._test_instance.timeout_scale) |
| # TODO(jbudorick): Make instrumentation tests output a JSON so this |
| # doesn't have to parse the output. |