Add i915 GPU frequency statistics.
This change enables GPU frequency stats for i915 GPU via GPUFreqStats
class.
BUG=chromium:286088
TEST=run test.
1. power_Idle on Lumpy 3.8 kernel and see:
$ grep gpu results/keyval
percent_gpufreq_1000_time{perf}=0.0
percent_gpufreq_350_time{perf}=100.0
percent_gpufreq_400_time{perf}=0.0
percent_gpufreq_450_time{perf}=0.0
percent_gpufreq_500_time{perf}=0.0
percent_gpufreq_550_time{perf}=0.0
percent_gpufreq_600_time{perf}=0.0
percent_gpufreq_650_time{perf}=0.0
percent_gpufreq_700_time{perf}=0.0
percent_gpufreq_750_time{perf}=0.0
percent_gpufreq_800_time{perf}=0.0
percent_gpufreq_850_time{perf}=0.0
percent_gpufreq_900_time{perf}=0.0
percent_gpufreq_950_time{perf}=0.0
100% is expected as the 'idle' test should not stimulate the GPU.
2. power_Idle on Lumpy 3.4 kernel and test still passes w/o stats for GPU
Change-Id: I4bfcd6316f1c82edc8c96f2979c50a5d31be8a5a
Reviewed-on: https://chromium-review.googlesource.com/168777
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Reviewed-by: Sameer Nanda <snanda@chromium.org>
Commit-Queue: Todd Broch <tbroch@chromium.org>
Tested-by: Todd Broch <tbroch@chromium.org>
diff --git a/client/cros/kernel_trace.py b/client/cros/kernel_trace.py
index 3726f03..5087653 100644
--- a/client/cros/kernel_trace.py
+++ b/client/cros/kernel_trace.py
@@ -17,6 +17,9 @@
Public methods:
on : Enables tracing
off : Disables tracing
+ is_tracing : Returns Boolean of tracing status.
+ event_on : Turns event on. Returns boolean of success
+ event_off : Turns event off. Returns boolean of success
flush : Flushes trace buffer
read : Reads trace buffer returns list of
- tuples if regexp provided
@@ -41,13 +44,14 @@
"""Constructor for KernelTrace class"""
self._buffer = []
self._buffer_ptr = 0
- self._events = events
+ self._events = []
self._on = on
if flush:
self.flush()
for event in events:
- self.event_on(event)
+ if self.event_on(event):
+ self._events.append(event)
if on:
self.on()
@@ -68,7 +72,7 @@
Raises:
error.TestFail: If unable to enable/disable tracing
- boolean of tracing on/off status
+ boolean of tracing on/off status
"""
utils.write_one_line(self._TRACE_EN_PATH, val)
fname = os.path.join(self._TRACE_ROOT, 'tracing_on')
@@ -88,6 +92,19 @@
self._onoff(0)
+ def is_tracing(self):
+ """Is tracing on?
+
+ Returns:
+ True if tracing enabled and at least one event is enabled.
+ """
+ fname = os.path.join(self._TRACE_ROOT, 'tracing_on')
+ result = int(utils.read_one_line(fname).strip())
+ if result == 1 and len(self._events) > 0:
+ return True
+ return False
+
+
def _event_onoff(self, event, val):
"""Enable/Disable tracing event.
@@ -100,15 +117,16 @@
See kernel(Documentation/trace/events.txt) for formatting.
val: integer, 1 for on, 0 for off
- Raises:
- error.TestFail: If unable to enable/disable event
+ Returns:
+ True if success, false otherwise
"""
logging.debug("event_onoff: event:%s val:%d", event, val)
event_path = event.replace(':', '/')
fname = os.path.join(self._TRACE_ROOT, 'events', event_path, 'enable')
if not os.path.exists(fname):
- raise error.TestFail("Unable to locate tracing event %s" % fname)
+ logging.warn("Unable to locate tracing event %s", fname)
+ return False
utils.write_one_line(fname, val)
fname = os.path.join(self._TRACE_ROOT, "set_event")
@@ -121,17 +139,22 @@
break
if val == 1 and not found:
- raise error.TestFail("Event %s not enabled" % event)
+ logging.warn("Event %s not enabled", event)
+ return False
+
if val == 0 and found:
- raise error.TestFail("Event %s not disabled" % event)
+ logging.warn("Event %s not disabled", event)
+ return False
+
+ return True
def event_on(self, event):
- self._event_onoff(event, 1)
+ return self._event_onoff(event, 1)
def event_off(self, event):
- self._event_onoff(event, 0)
+ return self._event_onoff(event, 0)
def flush(self):
@@ -140,7 +163,6 @@
Raises:
error.TestFail: If unable to flush
"""
-
self.off()
fname = os.path.join(self._TRACE_ROOT, 'free_buffer')
utils.write_one_line(fname, 1)