| Index: experimental/telemetry_mini/telemetry_mini.py
|
| diff --git a/experimental/telemetry_mini/telemetry_mini.py b/experimental/telemetry_mini/telemetry_mini.py
|
| index d6f5afc1390f8b385b94a4c8c26f9f1ab3401841..ea7be36f263372c43e74c072534451b9645034ad 100644
|
| --- a/experimental/telemetry_mini/telemetry_mini.py
|
| +++ b/experimental/telemetry_mini/telemetry_mini.py
|
| @@ -407,6 +407,8 @@ class ChromiumApp(AndroidApp):
|
| def __init__(self, *args, **kwargs):
|
| super(ChromiumApp, self).__init__(*args, **kwargs)
|
| self._devtools_local_port = None
|
| + self._browser_flags = None
|
| + self._trace_config = None
|
| self.startup_time = None
|
|
|
| def RemoveProfile(self):
|
| @@ -420,13 +422,20 @@ class ChromiumApp(AndroidApp):
|
| self.device.RunShellCommand(*args)
|
|
|
| @contextlib.contextmanager
|
| - def CommandLineFlags(self, flags):
|
| - self.device.WriteText(' '.join(['_'] + flags), self.COMMAND_LINE_FILE)
|
| + def CommandLineFlags(self):
|
| + command_line = ' '.join(['_'] + self._browser_flags)
|
| + self.device.WriteText(command_line, self.COMMAND_LINE_FILE)
|
| try:
|
| yield
|
| finally:
|
| self.device.RunShellCommand('rm', '-f', self.COMMAND_LINE_FILE)
|
|
|
| + def SetBrowserFlags(self, browser_flags):
|
| + self._browser_flags = browser_flags
|
| +
|
| + def SetTraceConfig(self, trace_config):
|
| + self._trace_config = trace_config
|
| +
|
| def SetDevToolsLocalPort(self, port):
|
| self._devtools_local_port = port
|
|
|
| @@ -449,16 +458,17 @@ class ChromiumApp(AndroidApp):
|
| self.device.RunCommand('forward', '--remove', local)
|
|
|
| @contextlib.contextmanager
|
| - def StartupTracing(self, trace_config):
|
| + def StartupTracing(self):
|
| self.device.WriteText(
|
| - json.dumps({'trace_config': trace_config}), self.TRACE_CONFIG_FILE)
|
| + json.dumps({'trace_config': self._trace_config}),
|
| + self.TRACE_CONFIG_FILE)
|
| try:
|
| yield
|
| finally:
|
| self.device.RunShellCommand('rm', '-f', self.TRACE_CONFIG_FILE)
|
|
|
| @contextlib.contextmanager
|
| - def Session(self, flags, trace_config):
|
| + def Session(self):
|
| """A context manager to guard the lifetime of a browser process.
|
|
|
| Ensures that command line flags and port forwarding are ready, the browser
|
| @@ -475,8 +485,8 @@ class ChromiumApp(AndroidApp):
|
| # TODO: Figure out a way to automatically create the shortcuts before
|
| # running the story.
|
| # self.RemoveProfile()
|
| - with self.CommandLineFlags(flags):
|
| - with self.StartupTracing(trace_config):
|
| + with self.CommandLineFlags():
|
| + with self.StartupTracing():
|
| # Ensure browser is closed after setting command line flags and
|
| # trace config to ensure they are read on startup.
|
| self.ForceStop()
|
| @@ -557,8 +567,8 @@ class UserStory(object):
|
| self.browser = browser
|
| self.actions = AndroidActions(self.device)
|
|
|
| - def Run(self, browser_flags, trace_config, trace_file):
|
| - with self.browser.Session(browser_flags, trace_config):
|
| + def Run(self, trace_file):
|
| + with self.browser.Session():
|
| self.RunPrepareSteps()
|
| try:
|
| self.RunStorySteps()
|
| @@ -610,3 +620,21 @@ def ReadProcessMetrics(trace_file):
|
| processes[event['pid']]['name'] = event['args']['name']
|
|
|
| return processes.values()
|
| +
|
| +
|
| +def RunStories(browser, stories, repeat, output_dir):
|
| + for repeat_idx in range(1, repeat + 1):
|
| + for story_cls in stories:
|
| + trace_file = os.path.join(
|
| + output_dir, 'trace_%s_%d.json' % (story_cls.NAME, repeat_idx))
|
| + print '[ RUN ]', story_cls.NAME
|
| + status = '[ OK ]'
|
| + start = time.time()
|
| + try:
|
| + story_cls(browser).Run(trace_file)
|
| + except Exception: # pylint: disable=broad-except
|
| + logging.exception('Exception raised while running story')
|
| + status = '[ FAILED ]'
|
| + finally:
|
| + elapsed = '(%.1f secs)' % (time.time() - start)
|
| + print status, story_cls.NAME, elapsed
|
|
|