Index: build/android/pylib/instrumentation/test_runner.py |
diff --git a/build/android/pylib/instrumentation/test_runner.py b/build/android/pylib/instrumentation/test_runner.py |
index dcf3d20613d6e5b867688d5c83d0c492da6f8554..5fa98abf59b736e2d0ba0b96f38c9ef128d91792 100644 |
--- a/build/android/pylib/instrumentation/test_runner.py |
+++ b/build/android/pylib/instrumentation/test_runner.py |
@@ -47,6 +47,7 @@ class TestRunner(base_test_runner.BaseTestRunner): |
"""Responsible for running a series of tests connected to a single device.""" |
_DEVICE_DATA_DIR = 'chrome/test/data' |
+ _DEVICE_COVERAGE_DIR = 'chrome/test/coverage' |
_HOSTMACHINE_PERF_OUTPUT_FILE = '/tmp/chrome-profile' |
_DEVICE_PERF_OUTPUT_SEARCH_PREFIX = (constants.DEVICE_PERF_OUTPUT_DIR + |
'/chrome-profile*') |
@@ -55,7 +56,7 @@ class TestRunner(base_test_runner.BaseTestRunner): |
def __init__(self, build_type, test_data, install_apk, save_perf_json, |
screenshot_failures, tool, wait_for_debugger, disable_assertions, |
push_deps, cleanup_test_files, device, shard_index, test_pkg, |
- ports_to_forward): |
+ ports_to_forward, coverage, coverage_dir): |
"""Create a new TestRunner. |
Args: |
@@ -74,6 +75,9 @@ class TestRunner(base_test_runner.BaseTestRunner): |
test_pkg: A TestPackage object. |
ports_to_forward: A list of port numbers for which to set up forwarders. |
Can be optionally requested by a test case. |
+ coverage: If True, instrument with EMMA coverage tool. |
+ coverage_dir: Directory to pull all EMMA coverage files into, or None if |
+ coverage is not being used. |
""" |
super(TestRunner, self).__init__(device, tool, build_type, push_deps, |
cleanup_test_files) |
@@ -88,6 +92,8 @@ class TestRunner(base_test_runner.BaseTestRunner): |
self.test_pkg = test_pkg |
self.ports_to_forward = ports_to_forward |
self.install_apk = install_apk |
+ self.coverage = coverage |
+ self.coverage_dir = coverage_dir |
#override |
def InstallTestPackage(self): |
@@ -126,10 +132,14 @@ class TestRunner(base_test_runner.BaseTestRunner): |
self.tool.CopyFiles() |
TestRunner._DEVICE_HAS_TEST_FILES[self.device] = True |
- def _GetInstrumentationArgs(self): |
+ def _GetInstrumentationArgs(self, test): |
frankf
2013/07/25 18:53:44
where test used?
gkanwar1
2013/07/25 19:06:38
Oops, this a remnant of something else I was doing
|
ret = {} |
if self.wait_for_debugger: |
ret['debug'] = 'true' |
+ if self.coverage: |
+ ret['coverage'] = 'true' |
+ ret['coverageFile'] = self.coverage_file |
+ |
return ret |
def _TakeScreenshot(self, test): |
@@ -174,6 +184,12 @@ class TestRunner(base_test_runner.BaseTestRunner): |
# Make sure the forwarder is still running. |
self.RestartHttpServerForwarderIfNecessary() |
+ if self.coverage: |
+ self.coverage_basename = test + '.ec' |
frankf
2013/07/25 18:53:44
Use string formatter: '%s.ec' % test
also below
gkanwar1
2013/07/25 19:06:38
Done. Fixed in several other places in this file a
|
+ self.coverage_file = (self.adb.GetExternalStorage() + '/' + |
frankf
2013/07/25 18:53:44
-> coverage_device_file
gkanwar1
2013/07/25 19:06:38
Done.
|
+ TestRunner._DEVICE_COVERAGE_DIR + '/' + |
+ self.coverage_basename) |
frankf
2013/07/25 18:53:44
define coverage_host_file here
gkanwar1
2013/07/25 19:06:38
Done.
|
+ |
def _IsPerfTest(self, test): |
"""Determines whether a test is a performance test. |
@@ -216,6 +232,11 @@ class TestRunner(base_test_runner.BaseTestRunner): |
self.TearDownPerfMonitoring(test) |
+ if self.coverage: |
+ self.adb.Adb().Pull(self.coverage_file, os.path.join( |
+ self.coverage_dir, self.coverage_basename)) |
+ self.adb.RunShellCommand('rm %s' % self.coverage_file) |
+ |
def TearDownPerfMonitoring(self, test): |
"""Cleans up performance monitoring if the specified test required it. |
@@ -308,7 +329,7 @@ class TestRunner(base_test_runner.BaseTestRunner): |
try: |
return self.adb.RunInstrumentationTest( |
test, self.test_pkg.GetPackageName(), |
- self._GetInstrumentationArgs(), timeout) |
+ self._GetInstrumentationArgs(test), timeout) |
except android_commands.errors.WaitForResponseTimedOutError: |
logging.info('Ran the test with timeout of %ds.' % timeout) |
raise |