| Index: tools/telemetry/telemetry/core/browser.py
|
| diff --git a/tools/telemetry/telemetry/core/browser.py b/tools/telemetry/telemetry/core/browser.py
|
| index 279ac1b4f7679b4fe49ee781945ddd9c3e08360f..38d755ac527a9db2716d09480b8d4a246c2cb624 100644
|
| --- a/tools/telemetry/telemetry/core/browser.py
|
| +++ b/tools/telemetry/telemetry/core/browser.py
|
| @@ -1,6 +1,7 @@
|
| # Copyright (c) 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 collections
|
| import os
|
|
|
| from telemetry.core import browser_credentials
|
| @@ -10,6 +11,7 @@ from telemetry.core import temporary_http_server
|
| from telemetry.core import wpr_modes
|
| from telemetry.core import wpr_server
|
| from telemetry.core.chrome import browser_backend
|
| +from telemetry.core.chrome import platform
|
|
|
| class Browser(object):
|
| """A running browser instance that can be controlled in a limited way.
|
| @@ -22,11 +24,12 @@ class Browser(object):
|
| with browser_to_create.Create() as browser:
|
| ... do all your operations on browser here
|
| """
|
| - def __init__(self, backend, platform):
|
| + def __init__(self, backend, platform_backend):
|
| self._browser_backend = backend
|
| self._http_server = None
|
| self._wpr_server = None
|
| - self._platform = platform
|
| + self._platform = platform.Platform(platform_backend)
|
| + self._platform_backend = platform_backend
|
| self._tabs = tab_list.TabList(backend.tab_list_backend)
|
| self._extensions = None
|
| if backend.supports_extensions:
|
| @@ -78,6 +81,69 @@ class Browser(object):
|
| def supports_tracing(self):
|
| return self._browser_backend.supports_tracing
|
|
|
| + @property
|
| + def memory_stats(self):
|
| + """Returns a dict of memory statistics for the browser:
|
| + { 'Browser': {
|
| + 'VM': S,
|
| + 'VMPeak': T,
|
| + 'WorkingSetSize': U,
|
| + 'WorkingSetSizePeak': V,
|
| + 'ProportionalSetSize': W,
|
| + 'PrivateDirty': X
|
| + },
|
| + 'Renderer': {
|
| + 'VM': S,
|
| + 'VMPeak': T,
|
| + 'WorkingSetSize': U,
|
| + 'WorkingSetSizePeak': V,
|
| + 'ProportionalSetSize': W,
|
| + 'PrivateDirty': X
|
| + }
|
| + 'SystemCommitCharge': Y,
|
| + 'ProcessCount': Z
|
| + }
|
| + Any of the above keys may be missing on a per-platform basis.
|
| + """
|
| + browser_pid = self._browser_backend.pid
|
| + renderer_totals = collections.defaultdict(int)
|
| + process_count = 1
|
| + for renderer_pid in self._platform_backend.GetChildPids(browser_pid):
|
| + process_count += 1
|
| + for k, v in self._platform_backend.GetMemoryStats(
|
| + renderer_pid).iteritems():
|
| + renderer_totals[k] += v
|
| + return {'Browser': self._platform_backend.GetMemoryStats(browser_pid),
|
| + 'Renderer': renderer_totals,
|
| + 'SystemCommitCharge':
|
| + self._platform_backend.GetSystemCommitCharge(),
|
| + 'ProcessCount': process_count}
|
| +
|
| + @property
|
| + def io_stats(self):
|
| + """Returns a dict of IO statistics for the browser:
|
| + { 'Browser': {
|
| + 'ReadOperationCount': W,
|
| + 'WriteOperationCount': X,
|
| + 'ReadTransferCount': Y,
|
| + 'WriteTransferCount': Z
|
| + },
|
| + 'Renderer': {
|
| + 'ReadOperationCount': W,
|
| + 'WriteOperationCount': X,
|
| + 'ReadTransferCount': Y,
|
| + 'WriteTransferCount': Z
|
| + }
|
| + }
|
| + """
|
| + browser_pid = self._browser_backend.pid
|
| + renderer_totals = collections.defaultdict(int)
|
| + for renderer_pid in self._platform_backend.GetChildPids(browser_pid):
|
| + for k, v in self._platform_backend.GetIOStats(renderer_pid).iteritems():
|
| + renderer_totals[k] += v
|
| + return {'Browser': self._platform_backend.GetIOStats(browser_pid),
|
| + 'Renderer': renderer_totals}
|
| +
|
| def StartTracing(self):
|
| return self._browser_backend.StartTracing()
|
|
|
|
|