summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorandresantoso <andresantoso@chromium.org>2015-04-23 17:20:06 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-24 00:21:14 +0000
commit9166080685403f1360af8e7578e3e102e513e78b (patch)
tree6ba0007b93b7a10078a32dc61d1af8f911917a23 /tools
parent03256e5f3b29e4c29c102a289757f773e5a624a7 (diff)
downloadchromium_src-9166080685403f1360af8e7578e3e102e513e78b.zip
chromium_src-9166080685403f1360af8e7578e3e102e513e78b.tar.gz
chromium_src-9166080685403f1360af8e7578e3e102e513e78b.tar.bz2
Telemetry: Quiescent power benchmarks for Mac
Add benchmark and measurement for measuring quiescent power, and enable it on Mac. Moved the workaround for http://crbug.com/419786 so that we don't lose idle wakeups numbers for the renderer process. Review URL: https://codereview.chromium.org/1092393002 Cr-Commit-Position: refs/heads/master@{#326698}
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/benchmarks/power.py19
-rw-r--r--tools/perf/measurements/page_cycler_unittest.py4
-rw-r--r--tools/perf/measurements/power.py27
-rw-r--r--tools/perf/metrics/cpu.py6
-rw-r--r--tools/telemetry/telemetry/core/browser.py5
5 files changed, 52 insertions, 9 deletions
diff --git a/tools/perf/benchmarks/power.py b/tools/perf/benchmarks/power.py
index 9cbda53..d31403f 100644
--- a/tools/perf/benchmarks/power.py
+++ b/tools/perf/benchmarks/power.py
@@ -18,7 +18,6 @@ class PowerAndroidAcceptance(benchmark.Benchmark):
return 'power.android_acceptance'
-
@benchmark.Enabled('android')
class PowerTypical10Mobile(benchmark.Benchmark):
"""Android typical 10 mobile power test."""
@@ -29,3 +28,21 @@ class PowerTypical10Mobile(benchmark.Benchmark):
return 'power.typical_10_mobile'
+@benchmark.Enabled('mac')
+class PowerTop10(benchmark.Benchmark):
+ """Top 10 quiescent power test."""
+ test = power.QuiescentPower
+ page_set = page_sets.Top10PageSet
+ @classmethod
+ def Name(cls):
+ return 'power.top_10'
+
+
+@benchmark.Enabled('mac')
+class PowerTop25(benchmark.Benchmark):
+ """Top 25 quiescent power test."""
+ test = power.QuiescentPower
+ page_set = page_sets.Top25PageSet
+ @classmethod
+ def Name(cls):
+ return 'power.top_25'
diff --git a/tools/perf/measurements/page_cycler_unittest.py b/tools/perf/measurements/page_cycler_unittest.py
index c6ce636..a29737a 100644
--- a/tools/perf/measurements/page_cycler_unittest.py
+++ b/tools/perf/measurements/page_cycler_unittest.py
@@ -227,7 +227,7 @@ class PageCyclerUnitTest(unittest.TestCase):
# On Mac, there is an additional measurement: the number of keychain
# accesses.
- value_count = 4
+ value_count = 3
if sys.platform == 'darwin':
value_count += 1
self.assertEqual(value_count, len(values))
@@ -237,7 +237,7 @@ class PageCyclerUnitTest(unittest.TestCase):
self.assertEqual(values[0].name, '%s.page_load_time' % chart_name)
self.assertEqual(values[0].units, 'ms')
- expected_values = ['gpu', 'renderer', 'browser']
+ expected_values = ['gpu', 'browser']
for value, expected in zip(values[1:len(expected_values) + 1],
expected_values):
self.assertEqual(value.page, page)
diff --git a/tools/perf/measurements/power.py b/tools/perf/measurements/power.py
index 0faa6c0..d5521fb 100644
--- a/tools/perf/measurements/power.py
+++ b/tools/perf/measurements/power.py
@@ -2,13 +2,17 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-from telemetry.page import page_test
+import time
from metrics import network
from metrics import power
+from telemetry.core import util
+from telemetry.page import page_test
class Power(page_test.PageTest):
+ """Measures power draw and idle wakeups during the page's interactions."""
+
def __init__(self):
super(Power, self).__init__()
self._power_metric = None
@@ -29,3 +33,24 @@ class Power(page_test.PageTest):
self._power_metric.Stop(page, tab)
self._network_metric.AddResults(tab, results)
self._power_metric.AddResults(tab, results)
+
+
+class QuiescentPower(page_test.PageTest):
+ """Measures power draw and idle wakeups after the page finished loading."""
+
+ # Amount of time to measure, in seconds.
+ SAMPLE_TIME = 30
+
+ def ValidateAndMeasurePage(self, page, tab, results):
+ if not tab.browser.platform.CanMonitorPower():
+ return
+
+ util.WaitFor(tab.HasReachedQuiescence, 60)
+
+ metric = power.PowerMetric(tab.browser.platform)
+ metric.Start(page, tab)
+
+ time.sleep(QuiescentPower.SAMPLE_TIME)
+
+ metric.Stop(page, tab)
+ metric.AddResults(tab, results)
diff --git a/tools/perf/metrics/cpu.py b/tools/perf/metrics/cpu.py
index 35c3403..66424d4 100644
--- a/tools/perf/metrics/cpu.py
+++ b/tools/perf/metrics/cpu.py
@@ -32,6 +32,12 @@ class CpuMetric(Metric):
def AddResults(self, tab, results, trace_name='cpu_utilization'):
assert self._stop_cpu, 'Must call Stop() first'
cpu_stats = _SubtractCpuStats(self._stop_cpu, self._start_cpu)
+
+ # FIXME: Renderer process CPU times are impossible to compare correctly.
+ # http://crbug.com/419786#c11
+ if 'Renderer' in cpu_stats:
+ del cpu_stats['Renderer']
+
# Add a result for each process type.
for process_type in cpu_stats:
trace_name_for_process = '%s_%s' % (trace_name, process_type.lower())
diff --git a/tools/telemetry/telemetry/core/browser.py b/tools/telemetry/telemetry/core/browser.py
index 373f90a..91e3d94 100644
--- a/tools/telemetry/telemetry/core/browser.py
+++ b/tools/telemetry/telemetry/core/browser.py
@@ -205,11 +205,6 @@ class Browser(app.App):
result = self._GetStatsCommon(self._platform_backend.GetCpuStats)
del result['ProcessCount']
- # FIXME: Renderer process CPU times are impossible to compare correctly.
- # http://crbug.com/419786#c11
- if 'Renderer' in result:
- del result['Renderer']
-
# We want a single time value, not the sum for all processes.
cpu_timestamp = self._platform_backend.GetCpuTimestamp()
for process_type in result: