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

Unified Diff: tools/telemetry/telemetry/core/chrome/win_platform_backend.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/chrome/win_platform_backend.py
diff --git a/tools/telemetry/telemetry/core/chrome/win_platform_backend.py b/tools/telemetry/telemetry/core/chrome/win_platform_backend.py
new file mode 100644
index 0000000000000000000000000000000000000000..0aab6c094f8f4fa32e7a10133886e593660afef2
--- /dev/null
+++ b/tools/telemetry/telemetry/core/chrome/win_platform_backend.py
@@ -0,0 +1,95 @@
+# Copyright (c) 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 ctypes
+import subprocess
+try:
+ import win32api # pylint: disable=F0401
+ import win32con # pylint: disable=F0401
+ import win32process # pylint: disable=F0401
+except ImportError:
+ win32api = None
+ win32con = None
+ win32process = None
+
+from telemetry.core.chrome import platform_backend
+
+
+class WinPlatformBackend(platform_backend.PlatformBackend):
+ def _GetProcessHandle(self, pid):
+ mask = (win32con.PROCESS_QUERY_INFORMATION |
+ win32con.PROCESS_VM_READ)
+ return win32api.OpenProcess(mask, False, pid)
+
+ # pylint: disable=W0613
+ def StartRawDisplayFrameRateMeasurement(self, trace_tag):
+ raise NotImplementedError()
+
+ def StopRawDisplayFrameRateMeasurement(self):
+ raise NotImplementedError()
+
+ def IsThermallyThrottled(self):
+ raise NotImplementedError()
+
+ def HasBeenThermallyThrottled(self):
+ raise NotImplementedError()
+
+ def GetSystemCommitCharge(self):
+ class PerformanceInfo(ctypes.Structure):
+ """Struct for GetPerformanceInfo() call
+ http://msdn.microsoft.com/en-us/library/ms683210
+ """
+ _fields_ = [('size', ctypes.c_ulong),
+ ('CommitTotal', ctypes.c_size_t),
+ ('CommitLimit', ctypes.c_size_t),
+ ('CommitPeak', ctypes.c_size_t),
+ ('PhysicalTotal', ctypes.c_size_t),
+ ('PhysicalAvailable', ctypes.c_size_t),
+ ('SystemCache', ctypes.c_size_t),
+ ('KernelTotal', ctypes.c_size_t),
+ ('KernelPaged', ctypes.c_size_t),
+ ('KernelNonpaged', ctypes.c_size_t),
+ ('PageSize', ctypes.c_size_t),
+ ('HandleCount', ctypes.c_ulong),
+ ('ProcessCount', ctypes.c_ulong),
+ ('ThreadCount', ctypes.c_ulong)]
+
+ def __init__(self):
+ self.size = ctypes.sizeof(self)
+ super(PerformanceInfo, self).__init__()
+
+ performance_info = PerformanceInfo()
+ ctypes.windll.psapi.GetPerformanceInfo(
+ ctypes.byref(performance_info), performance_info.size)
+ return performance_info.CommitTotal * performance_info.PageSize / 1024
+
+ def GetMemoryStats(self, pid):
+ memory_info = win32process.GetProcessMemoryInfo(
+ self._GetProcessHandle(pid))
+ return {'VM': memory_info['PagefileUsage'],
+ 'VMPeak': memory_info['PeakPagefileUsage'],
+ 'WorkingSetSize': memory_info['WorkingSetSize'],
+ 'WorkingSetSizePeak': memory_info['PeakWorkingSetSize']}
+
+ def GetIOStats(self, pid):
+ io_stats = win32process.GetProcessIoCounters(
+ self._GetProcessHandle(pid))
+ return {'ReadOperationCount': io_stats['ReadOperationCount'],
+ 'WriteOperationCount': io_stats['WriteOperationCount'],
+ 'ReadTransferCount': io_stats['ReadTransferCount'],
+ 'WriteTransferCount': io_stats['WriteTransferCount']}
+
+ def GetChildPids(self, pid):
+ """Retunds a list of child pids of |pid|."""
+ child_pids = []
+ pid_ppid_list = subprocess.Popen(['wmic', 'process', 'get',
+ 'ProcessId,ParentProcessId'],
+ stdout=subprocess.PIPE).communicate()[0]
+ for pid_ppid in pid_ppid_list.splitlines()[1:]: #skip header
+ if not pid_ppid:
+ continue
+ pid_ppid = pid_ppid.split()
+ if int(pid_ppid[1].strip()) == pid:
+ child_pids.append(int(pid_ppid[0].strip()))
+ return child_pids
« no previous file with comments | « tools/telemetry/telemetry/core/chrome/platform_backend.py ('k') | tools/telemetry/telemetry/page/page_benchmark_results.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698