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

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

Issue 373223002: Telemetry: Don't fail on setting performance mode without root. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use AtExit warning. Created 6 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 atexit
5 import logging 6 import logging
6 7
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 class PerfControl(object): 11 class PerfControl(object):
12 """Provides methods for setting the performance mode of a device.""" 12 """Provides methods for setting the performance mode of a device."""
13 _SCALING_GOVERNOR_FMT = ( 13 _SCALING_GOVERNOR_FMT = (
14 '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor') 14 '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor')
15 _CPU_ONLINE_FMT = '/sys/devices/system/cpu/cpu%d/online' 15 _CPU_ONLINE_FMT = '/sys/devices/system/cpu/cpu%d/online'
16 _KERNEL_MAX = '/sys/devices/system/cpu/kernel_max' 16 _KERNEL_MAX = '/sys/devices/system/cpu/kernel_max'
17 17
18 def __init__(self, device): 18 def __init__(self, device):
19 # TODO(jbudorick) Remove once telemetry gets switched over. 19 # TODO(jbudorick) Remove once telemetry gets switched over.
20 if isinstance(device, android_commands.AndroidCommands): 20 if isinstance(device, android_commands.AndroidCommands):
21 device = device_utils.DeviceUtils(device) 21 device = device_utils.DeviceUtils(device)
22 self._device = device 22 self._device = device
23 cpu_files = self._device.RunShellCommand( 23 cpu_files = self._device.RunShellCommand(
24 'ls -d /sys/devices/system/cpu/cpu[0-9]*') 24 'ls -d /sys/devices/system/cpu/cpu[0-9]*')
25 self._num_cpu_cores = len(cpu_files) 25 self._num_cpu_cores = len(cpu_files)
26 assert self._num_cpu_cores > 0, 'Failed to detect CPUs.' 26 assert self._num_cpu_cores > 0, 'Failed to detect CPUs.'
27 logging.info('Number of CPUs: %d', self._num_cpu_cores) 27 logging.info('Number of CPUs: %d', self._num_cpu_cores)
28 self._have_mpdecision = self._device.FileExists('/system/bin/mpdecision') 28 self._have_mpdecision = self._device.FileExists('/system/bin/mpdecision')
29 29
30 def SetHighPerfMode(self): 30 def SetHighPerfMode(self):
31 """Sets the highest possible performance mode for the device."""
32 if not self._device.old_interface.IsRootEnabled():
33 message = 'Need root for performance mode. Results may be NOISY!!'
34 logging.warning(message)
35 # Add an additional warning at exit, such that it's clear that any results
36 # may be different/noisy (due to the lack of intended performance mode).
37 atexit.register(logging.warning, message)
38 return
31 # TODO(epenner): Enable on all devices (http://crbug.com/383566) 39 # TODO(epenner): Enable on all devices (http://crbug.com/383566)
32 if 'Nexus 4' == self._device.old_interface.GetProductModel(): 40 if 'Nexus 4' == self._device.old_interface.GetProductModel():
33 self._ForceAllCpusOnline(True) 41 self._ForceAllCpusOnline(True)
34 if not self._AllCpusAreOnline(): 42 if not self._AllCpusAreOnline():
35 logging.warning('Failed to force CPUs online. Results may be noisy!') 43 logging.warning('Failed to force CPUs online. Results may be NOISY!')
36 self._SetScalingGovernorInternal('performance') 44 self._SetScalingGovernorInternal('performance')
37 45
38 def SetPerfProfilingMode(self): 46 def SetPerfProfilingMode(self):
39 """Sets the highest possible performance mode for the device.""" 47 """Enables all cores for reliable perf profiling."""
40 self._ForceAllCpusOnline(True) 48 self._ForceAllCpusOnline(True)
41 self._SetScalingGovernorInternal('performance') 49 self._SetScalingGovernorInternal('performance')
42 if not self._AllCpusAreOnline(): 50 if not self._AllCpusAreOnline():
43 if not self._device.old_interface.IsRootEnabled(): 51 if not self._device.old_interface.IsRootEnabled():
44 raise RuntimeError('Need root to force CPUs online.') 52 raise RuntimeError('Need root to force CPUs online.')
45 raise RuntimeError('Failed to force CPUs online.') 53 raise RuntimeError('Failed to force CPUs online.')
46 54
47 def SetDefaultPerfMode(self): 55 def SetDefaultPerfMode(self):
48 """Sets the performance mode for the device to its default mode.""" 56 """Sets the performance mode for the device to its default mode."""
57 if not self._device.old_interface.IsRootEnabled():
58 return
49 product_model = self._device.GetProp('ro.product.model') 59 product_model = self._device.GetProp('ro.product.model')
50 governor_mode = { 60 governor_mode = {
51 'GT-I9300': 'pegasusq', 61 'GT-I9300': 'pegasusq',
52 'Galaxy Nexus': 'interactive', 62 'Galaxy Nexus': 'interactive',
53 'Nexus 4': 'ondemand', 63 'Nexus 4': 'ondemand',
54 'Nexus 7': 'interactive', 64 'Nexus 7': 'interactive',
55 'Nexus 10': 'interactive' 65 'Nexus 10': 'interactive'
56 }.get(product_model, 'ondemand') 66 }.get(product_model, 'ondemand')
57 self._SetScalingGovernorInternal(governor_mode) 67 self._SetScalingGovernorInternal(governor_mode)
58 self._ForceAllCpusOnline(False) 68 self._ForceAllCpusOnline(False)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 105
96 if not self._have_mpdecision and not self._AllCpusAreOnline(): 106 if not self._have_mpdecision and not self._AllCpusAreOnline():
97 logging.warning('Unexpected cpu hot plugging detected.') 107 logging.warning('Unexpected cpu hot plugging detected.')
98 108
99 if not force_online: 109 if not force_online:
100 return 110 return
101 111
102 for cpu in range(self._num_cpu_cores): 112 for cpu in range(self._num_cpu_cores):
103 online_path = PerfControl._CPU_ONLINE_FMT % cpu 113 online_path = PerfControl._CPU_ONLINE_FMT % cpu
104 self._device.WriteFile(online_path, '1', as_root=True) 114 self._device.WriteFile(online_path, '1', as_root=True)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698