Index: build/android/pylib/device_stats_monitor.py |
diff --git a/build/android/pylib/device_stats_monitor.py b/build/android/pylib/device_stats_monitor.py |
deleted file mode 100644 |
index 2a7adc8309d85d526be7c745b46872ea9ee6afca..0000000000000000000000000000000000000000 |
--- a/build/android/pylib/device_stats_monitor.py |
+++ /dev/null |
@@ -1,116 +0,0 @@ |
-# 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. |
- |
-"""Utilities for iotop/top style profiling for android.""" |
- |
-import collections |
-import json |
-import os |
-import subprocess |
-import sys |
-import urllib |
- |
-import constants |
-import io_stats_parser |
- |
- |
-class DeviceStatsMonitor(object): |
- """Class for collecting device stats such as IO/CPU usage. |
- |
- Args: |
- adb: Instance of AndroidComannds. |
- hz: Frequency at which to sample device stats. |
- """ |
- |
- DEVICE_PATH = constants.TEST_EXECUTABLE_DIR + '/device_stats_monitor' |
- PROFILE_PATH = (constants.DEVICE_PERF_OUTPUT_DIR + |
- '/device_stats_monitor.profile') |
- RESULT_VIEWER_PATH = os.path.abspath(os.path.join( |
- os.path.dirname(os.path.realpath(__file__)), 'device_stats_monitor.html')) |
- |
- def __init__(self, adb, hz): |
- self._adb = adb |
- host_path = os.path.join( |
- constants.GetOutDirectory(), 'device_stats_monitor') |
- self._adb.PushIfNeeded(host_path, DeviceStatsMonitor.DEVICE_PATH) |
- self._hz = hz |
- |
- def Start(self): |
- """Starts device stats monitor on the device.""" |
- self._adb.SetProtectedFileContents(DeviceStatsMonitor.PROFILE_PATH, '') |
- self._process = subprocess.Popen( |
- ['adb', 'shell', '%s --hz=%d %s' % ( |
- DeviceStatsMonitor.DEVICE_PATH, self._hz, |
- DeviceStatsMonitor.PROFILE_PATH)]) |
- |
- def StopAndCollect(self, output_path): |
- """Stops monitoring and saves results. |
- |
- Args: |
- output_path: Path to save results. |
- |
- Returns: |
- String of URL to load results in browser. |
- """ |
- assert self._process |
- self._adb.KillAll(DeviceStatsMonitor.DEVICE_PATH) |
- self._process.wait() |
- profile = self._adb.GetFileContents(DeviceStatsMonitor.PROFILE_PATH) |
- |
- results = collections.defaultdict(list) |
- last_io_stats = None |
- last_cpu_stats = None |
- for line in profile: |
- if ' mmcblk0 ' in line: |
- stats = io_stats_parser.ParseIoStatsLine(line) |
- if last_io_stats: |
- results['sectors_read'].append(stats.num_sectors_read - |
- last_io_stats.num_sectors_read) |
- results['sectors_written'].append(stats.num_sectors_written - |
- last_io_stats.num_sectors_written) |
- last_io_stats = stats |
- elif line.startswith('cpu '): |
- stats = self._ParseCpuStatsLine(line) |
- if last_cpu_stats: |
- results['user'].append(stats.user - last_cpu_stats.user) |
- results['nice'].append(stats.nice - last_cpu_stats.nice) |
- results['system'].append(stats.system - last_cpu_stats.system) |
- results['idle'].append(stats.idle - last_cpu_stats.idle) |
- results['iowait'].append(stats.iowait - last_cpu_stats.iowait) |
- results['irq'].append(stats.irq - last_cpu_stats.irq) |
- results['softirq'].append(stats.softirq- last_cpu_stats.softirq) |
- last_cpu_stats = stats |
- units = { |
- 'sectors_read': 'sectors', |
- 'sectors_written': 'sectors', |
- 'user': 'jiffies', |
- 'nice': 'jiffies', |
- 'system': 'jiffies', |
- 'idle': 'jiffies', |
- 'iowait': 'jiffies', |
- 'irq': 'jiffies', |
- 'softirq': 'jiffies', |
- } |
- with open(output_path, 'w') as f: |
- f.write('display(%d, %s, %s);' % (self._hz, json.dumps(results), units)) |
- return 'file://%s?results=file://%s' % ( |
- DeviceStatsMonitor.RESULT_VIEWER_PATH, urllib.quote(output_path)) |
- |
- |
- @staticmethod |
- def _ParseCpuStatsLine(line): |
- """Parses a line of cpu stats into a CpuStats named tuple.""" |
- # Field definitions: http://www.linuxhowtos.org/System/procstat.htm |
- cpu_stats = collections.namedtuple('CpuStats', |
- ['device', |
- 'user', |
- 'nice', |
- 'system', |
- 'idle', |
- 'iowait', |
- 'irq', |
- 'softirq', |
- ]) |
- fields = line.split() |
- return cpu_stats._make([fields[0]] + [int(f) for f in fields[1:8]]) |