Index: build/android/run_tests.py |
diff --git a/build/android/run_tests.py b/build/android/run_tests.py |
index 1a628d1528e1d6c00276dc3ca57d1bd4e4efbfc9..aa4e7dc482e73ae73da6febe95dc3f4f32f758c7 100755 |
--- a/build/android/run_tests.py |
+++ b/build/android/run_tests.py |
@@ -55,6 +55,8 @@ from pylib import run_tests_helper |
from pylib import test_options_parser |
from pylib.base_test_sharder import BaseTestSharder |
from pylib.single_test_runner import SingleTestRunner |
+from pylib.utils import time_profile |
+from pylib.utils import xvfb |
_TEST_SUITES = ['base_unittests', |
@@ -105,71 +107,6 @@ def FullyQualifiedTestSuites(exe, option_test_suite, build_type): |
return qualified_test_suites |
-class TimeProfile(object): |
- """Class for simple profiling of action, with logging of cost.""" |
- |
- def __init__(self, description): |
- self._description = description |
- self.Start() |
- |
- def Start(self): |
- self._starttime = time.time() |
- |
- def Stop(self): |
- """Stop profiling and dump a log.""" |
- if self._starttime: |
- stoptime = time.time() |
- logging.info('%fsec to perform %s', |
- stoptime - self._starttime, self._description) |
- self._starttime = None |
- |
- |
-class Xvfb(object): |
- """Class to start and stop Xvfb if relevant. Nop if not Linux.""" |
- |
- def __init__(self): |
- self._pid = 0 |
- |
- def _IsLinux(self): |
- """Return True if on Linux; else False.""" |
- return sys.platform.startswith('linux') |
- |
- def Start(self): |
- """Start Xvfb and set an appropriate DISPLAY environment. Linux only. |
- |
- Copied from tools/code_coverage/coverage_posix.py |
- """ |
- if not self._IsLinux(): |
- return |
- proc = subprocess.Popen(['Xvfb', ':9', '-screen', '0', '1024x768x24', |
- '-ac'], |
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT) |
- self._pid = proc.pid |
- if not self._pid: |
- raise Exception('Could not start Xvfb') |
- os.environ['DISPLAY'] = ':9' |
- |
- # Now confirm, giving a chance for it to start if needed. |
- for _ in range(10): |
- proc = subprocess.Popen('xdpyinfo >/dev/null', shell=True) |
- _, retcode = os.waitpid(proc.pid, 0) |
- if retcode == 0: |
- break |
- time.sleep(0.25) |
- if retcode != 0: |
- raise Exception('Could not confirm Xvfb happiness') |
- |
- def Stop(self): |
- """Stop Xvfb if needed. Linux only.""" |
- if self._pid: |
- try: |
- os.kill(self._pid, signal.SIGKILL) |
- except: |
- pass |
- del os.environ['DISPLAY'] |
- self._pid = 0 |
- |
- |
class TestSharder(BaseTestSharder): |
"""Responsible for sharding the tests on the connected devices.""" |
@@ -311,7 +248,7 @@ def _RunATestSuite(options): |
if options.use_emulator: |
for n in range(options.emulator_count): |
- t = TimeProfile('Emulator launch %d' % n) |
+ t = time_profile.TimeProfile('Emulator launch %d' % n) |
avd_name = None |
if n > 0: |
# Creates a temporary AVD for the extra emulators. |
@@ -381,8 +318,8 @@ def Dispatch(options): |
return 0 |
if options.use_xvfb: |
- xvfb = Xvfb() |
- xvfb.Start() |
+ framebuffer = xvfb.Xvfb() |
+ framebuffer.Start() |
all_test_suites = FullyQualifiedTestSuites(options.exe, options.test_suite, |
options.build_type) |
@@ -394,7 +331,7 @@ def Dispatch(options): |
failures += _RunATestSuite(test_options) |
if options.use_xvfb: |
- xvfb.Stop() |
+ framebuffer.Stop() |
return failures |