aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/internal/platform/tracing_agent/chrome_tracing_devtools_manager.py
blob: ea2bde201d61ea740283dc15db17925f5ebc5ffb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# Copyright 2015 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.

# A singleton map from platform backends to maps of uniquely-identifying
# remote port (which may be the same as local port) to DevToolsClientBackend.
# There is no guarantee that the devtools agent is still alive.
_platform_backends_to_devtools_clients_maps = {}


def _RemoveStaleDevToolsClient(platform_backend):
  """Removes DevTools clients that are no longer connectable."""
  devtools_clients_map = _platform_backends_to_devtools_clients_maps.get(
      platform_backend, {})
  devtools_clients_map = {
      port: client
      for port, client in devtools_clients_map.iteritems()
      if client.IsAlive()
      }
  _platform_backends_to_devtools_clients_maps[platform_backend] = (
      devtools_clients_map)


def RegisterDevToolsClient(devtools_client_backend, platform_backend):
  """Register DevTools client

  This should only be called from DevToolsClientBackend when it is initialized.
  """
  remote_port = str(devtools_client_backend.remote_port)
  if platform_backend not in _platform_backends_to_devtools_clients_maps:
    _platform_backends_to_devtools_clients_maps[platform_backend] = {}
  devtools_clients_map = (
    _platform_backends_to_devtools_clients_maps[platform_backend])
  devtools_clients_map[remote_port] = devtools_client_backend


def IsSupported(platform_backend):
  _RemoveStaleDevToolsClient(platform_backend)
  devtools_clients_map = _platform_backends_to_devtools_clients_maps.get(
      platform_backend, {})
  for _, devtools_client in devtools_clients_map.iteritems():
    if devtools_client.IsChromeTracingSupported():
      return True
  return False


def GetDevToolsClients(platform_backend):
  """Get DevTools clients including the ones that are no longer connectable."""
  devtools_clients_map = _platform_backends_to_devtools_clients_maps.get(
      platform_backend, {})
  if not devtools_clients_map:
    return []
  return devtools_clients_map.values()

def GetActiveDevToolsClients(platform_backend):
  """Get DevTools clients that are still connectable."""
  _RemoveStaleDevToolsClient(platform_backend)
  return GetDevToolsClients(platform_backend)