Index: tools/telemetry/telemetry/internal/backends/android_app_backend.py |
diff --git a/tools/telemetry/telemetry/internal/backends/android_app_backend.py b/tools/telemetry/telemetry/internal/backends/android_app_backend.py |
deleted file mode 100644 |
index ada3eb4480e77376b75eb13725ebc07e44096e35..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/internal/backends/android_app_backend.py |
+++ /dev/null |
@@ -1,132 +0,0 @@ |
-# Copyright 2012 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import re |
- |
-from telemetry.core import util |
-from telemetry.internal.app import android_process |
-from telemetry.internal.backends import android_browser_backend_settings |
-from telemetry.internal.backends import android_command_line_backend |
-from telemetry.internal.backends import app_backend |
- |
-from devil.android import app_ui |
- |
- |
-class AndroidAppBackend(app_backend.AppBackend): |
- |
- def __init__(self, android_platform_backend, start_intent, |
- is_app_ready_predicate=None, app_has_webviews=True): |
- super(AndroidAppBackend, self).__init__( |
- start_intent.package, android_platform_backend) |
- self._default_process_name = start_intent.package |
- self._start_intent = start_intent |
- self._is_app_ready_predicate = is_app_ready_predicate |
- self._is_running = False |
- self._app_has_webviews = app_has_webviews |
- self._existing_processes_by_pid = {} |
- self._app_ui = None |
- |
- @property |
- def device(self): |
- return self.platform_backend.device |
- |
- def GetAppUi(self): |
- if self._app_ui is None: |
- self._app_ui = app_ui.AppUi(self.device, self._start_intent.package) |
- return self._app_ui |
- |
- def _LaunchAndWaitForApplication(self): |
- """Launch the app and wait for it to be ready.""" |
- def is_app_ready(): |
- return self._is_app_ready_predicate(self.app) |
- |
- # When "is_app_ready_predicate" is provided, we use it to wait for the |
- # app to become ready, otherwise "blocking=True" is used as a fall back. |
- # TODO(slamm): check if the wait for "ps" check is really needed, or |
- # whether the "blocking=True" fall back is sufficient. |
- has_ready_predicate = self._is_app_ready_predicate is not None |
- self.device.StartActivity( |
- self._start_intent, |
- blocking=not has_ready_predicate, |
- force_stop=True, # Ensure app was not running. |
- ) |
- if has_ready_predicate: |
- util.WaitFor(is_app_ready, timeout=60) |
- |
- def Start(self): |
- """Start an Android app and wait for it to finish launching. |
- |
- If the app has webviews, the app is launched with the suitable |
- command line arguments. |
- |
- AppStory derivations can customize the wait-for-ready-state to wait |
- for a more specific event if needed. |
- """ |
- if self._app_has_webviews: |
- webview_startup_args = self.GetWebviewStartupArgs() |
- backend_settings = ( |
- android_browser_backend_settings.WebviewBackendSettings( |
- 'android-webview')) |
- with android_command_line_backend.SetUpCommandLineFlags( |
- self.device, backend_settings, webview_startup_args): |
- self._LaunchAndWaitForApplication() |
- else: |
- self._LaunchAndWaitForApplication() |
- self._is_running = True |
- |
- def Close(self): |
- self._is_running = False |
- self.platform_backend.KillApplication(self._start_intent.package) |
- |
- def IsAppRunning(self): |
- return self._is_running |
- |
- def GetStandardOutput(self): |
- raise NotImplementedError |
- |
- def GetStackTrace(self): |
- raise NotImplementedError |
- |
- def GetProcesses(self, process_filter=None): |
- if process_filter is None: |
- # Match process names of the form: 'process_name[:subprocess]'. |
- process_filter = re.compile( |
- '^%s(:|$)' % re.escape(self._default_process_name)).match |
- |
- processes = set() |
- ps_output = self.platform_backend.GetPsOutput(['pid', 'name']) |
- for pid, name in ps_output: |
- if not process_filter(name): |
- continue |
- |
- if pid not in self._existing_processes_by_pid: |
- self._existing_processes_by_pid[pid] = android_process.AndroidProcess( |
- self, pid, name) |
- processes.add(self._existing_processes_by_pid[pid]) |
- return processes |
- |
- def GetProcess(self, subprocess_name): |
- assert subprocess_name.startswith(':') |
- process_name = self._default_process_name + subprocess_name |
- return self.GetProcesses(lambda n: n == process_name).pop() |
- |
- def GetWebViews(self): |
- assert self._app_has_webviews |
- webviews = set() |
- for process in self.GetProcesses(): |
- webviews.update(process.GetWebViews()) |
- return webviews |
- |
- def GetWebviewStartupArgs(self): |
- assert self._app_has_webviews |
- args = [] |
- |
- # Turn on GPU benchmarking extension for all runs. The only side effect of |
- # the extension being on is that render stats are tracked. This is believed |
- # to be effectively free. And, by doing so here, it avoids us having to |
- # programmatically inspect a pageset's actions in order to determine if it |
- # might eventually scroll. |
- args.append('--enable-gpu-benchmarking') |
- |
- return args |