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

Side by Side Diff: build/android/pylib/perf/perf_control.py

Issue 316143002: telemetry: Improve perf profiler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Poll quicker. Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import logging
6 import time
5 7
6 import logging
7 from pylib import android_commands 8 from pylib import android_commands
8 from pylib.device import device_utils 9 from pylib.device import device_utils
9 10
10 11
11 class PerfControl(object): 12 class PerfControl(object):
12 """Provides methods for setting the performance mode of a device.""" 13 """Provides methods for setting the performance mode of a device."""
13 _SCALING_GOVERNOR_FMT = ( 14 _SCALING_GOVERNOR_FMT = (
14 '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor') 15 '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor')
15 _KERNEL_MAX = '/sys/devices/system/cpu/kernel_max' 16 _KERNEL_MAX = '/sys/devices/system/cpu/kernel_max'
16 17
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 52
52 def _SetScalingGovernorInternal(self, value): 53 def _SetScalingGovernorInternal(self, value):
53 for cpu in range(self._kernel_max + 1): 54 for cpu in range(self._kernel_max + 1):
54 scaling_governor_file = PerfControl._SCALING_GOVERNOR_FMT % cpu 55 scaling_governor_file = PerfControl._SCALING_GOVERNOR_FMT % cpu
55 if self._device.old_interface.FileExistsOnDevice(scaling_governor_file): 56 if self._device.old_interface.FileExistsOnDevice(scaling_governor_file):
56 logging.info('Writing scaling governor mode \'%s\' -> %s', 57 logging.info('Writing scaling governor mode \'%s\' -> %s',
57 value, scaling_governor_file) 58 value, scaling_governor_file)
58 self._device.old_interface.SetProtectedFileContents( 59 self._device.old_interface.SetProtectedFileContents(
59 scaling_governor_file, value) 60 scaling_governor_file, value)
60 61
62 def ForceAllCpusOnline(self, force_online):
63 """Force all CPUs on a device to be online.
64
65 Force every CPU core on an Android device to remain online, or return the
66 cores under system power management control. This is needed to work around
67 a bug in perf which makes it unable to record samples from CPUs that become
68 online when recording is already underway.
69
70 Args:
71 force_online: True to set all CPUs online, False to return them under
72 system power management control.
73 """
74 def ForceCpuOnline(online_path):
75 script = 'chmod 644 {0}; echo 1 > {0}; chmod 444 {0}'.format(online_path)
76 self._device.old_interface.RunShellCommandWithSU(script)
77 return self._device.old_interface.GetFileContents(online_path)[0] == '1'
78
79 def ResetCpu(online_path):
80 self._device.old_interface.RunShellCommandWithSU(
81 'chmod 644 %s' % online_path)
82
83 def WaitFor(condition):
84 for _ in range(100):
85 if condition():
86 return
87 time.sleep(0.1)
88 raise RuntimeError('Timed out')
89
90 cpu_online_files = self._device.old_interface.RunShellCommand(
91 'ls -d /sys/devices/system/cpu/cpu[0-9]*/online')
92 for online_path in cpu_online_files:
93 if force_online:
94 WaitFor(lambda: ForceCpuOnline(online_path))
95 else:
96 ResetCpu(online_path)
OLDNEW
« no previous file with comments | « build/android/chrome_profiler/perf_controller.py ('k') | build/android/pylib/perf/perf_control_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698