Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Unified Diff: tools/telemetry/telemetry/core/browser.py

Issue 11576050: [Telemetry] Add memory and IO stats to page cycler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address dtu nits Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()
« no previous file with comments | « tools/perf/perf_tools/page_cycler.py ('k') | tools/telemetry/telemetry/core/chrome/android_browser_backend.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698