aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/internal/backends/chrome_inspector/inspector_memory.py
blob: cd4ddf01a7faa13d8f50f751dbd53a07db206894 (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
# Copyright 2013 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 json

from telemetry.core import exceptions


class InspectorMemoryException(exceptions.Error):
  pass


class InspectorMemory(object):
  """Communicates with the remote inspector's Memory domain."""

  def __init__(self, inspector_websocket):
    self._inspector_websocket = inspector_websocket
    self._inspector_websocket.RegisterDomain('Memory', self._OnNotification)

  def _OnNotification(self, msg):
    pass

  def GetDOMCounters(self, timeout):
    """Retrieves DOM element counts.

    Args:
      timeout: The number of seconds to wait for the inspector backend to
          service the request before timing out.

    Returns:
      A dictionary containing the counts associated with "nodes", "documents",
      and "jsEventListeners".
    Raises:
      InspectorMemoryException
      websocket.WebSocketException
      socket.error
      exceptions.WebSocketDisconnected
    """
    res = self._inspector_websocket.SyncRequest({
      'method': 'Memory.getDOMCounters'
    }, timeout)
    if ('result' not in res or
        'nodes' not in res['result'] or
        'documents' not in res['result'] or
        'jsEventListeners' not in res['result']):
      raise InspectorMemoryException(
          'Inspector returned unexpected result for Memory.getDOMCounters:\n' +
          json.dumps(res, indent=2))
    return {
        'nodes': res['result']['nodes'],
        'documents': res['result']['documents'],
        'jsEventListeners': res['result']['jsEventListeners']
    }