Update sdk/platform-tools to version 26.0.0.
[android_tools.git] / sdk / platform-tools / systrace / catapult / telemetry / telemetry / internal / app / android_process.py
blob3c9a2943b1827b2d2ae86e3b1af6dd117fe2acb0
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 from telemetry.internal.backends.chrome_inspector import devtools_client_backend
6 from telemetry.internal.browser import web_contents
8 try:
9 from devil.android import ports
10 except ImportError:
11 ports = None
13 class WebViewNotFoundException(Exception):
14 pass
16 class AndroidProcess(object):
17 """Represents a single android process."""
19 def __init__(self, app_backend, pid, name):
20 self._app_backend = app_backend
21 self._pid = pid
22 self._name = name
23 self._local_port = ports.AllocateTestServerPort()
24 self._devtools_client = None
26 @property
27 def pid(self):
28 return self._pid
30 @property
31 def name(self):
32 return self._name
34 @property
35 def _remote_devtools_port(self):
36 return 'localabstract:webview_devtools_remote_%s' % str(self.pid)
38 def _UpdateDevToolsClient(self):
39 if self._devtools_client is None:
40 self._app_backend.platform_backend.ForwardHostToDevice(
41 self._local_port, self._remote_devtools_port)
42 if devtools_client_backend.IsDevToolsAgentAvailable(
43 self._local_port, self._app_backend):
44 self._devtools_client = devtools_client_backend.DevToolsClientBackend(
45 self._local_port, self._remote_devtools_port, self._app_backend)
47 def GetWebViews(self):
48 webviews = []
49 self._UpdateDevToolsClient()
50 if self._devtools_client is not None:
51 devtools_context_map = (
52 self._devtools_client.GetUpdatedInspectableContexts())
53 for context in devtools_context_map.contexts:
54 webviews.append(web_contents.WebContents(
55 devtools_context_map.GetInspectorBackend(context['id'])))
56 return webviews