diff options
author | andresantoso <andresantoso@chromium.org> | 2015-04-23 17:20:06 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-24 00:21:14 +0000 |
commit | 9166080685403f1360af8e7578e3e102e513e78b (patch) | |
tree | 6ba0007b93b7a10078a32dc61d1af8f911917a23 /tools | |
parent | 03256e5f3b29e4c29c102a289757f773e5a624a7 (diff) | |
download | chromium_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.py | 19 | ||||
-rw-r--r-- | tools/perf/measurements/page_cycler_unittest.py | 4 | ||||
-rw-r--r-- | tools/perf/measurements/power.py | 27 | ||||
-rw-r--r-- | tools/perf/metrics/cpu.py | 6 | ||||
-rw-r--r-- | tools/telemetry/telemetry/core/browser.py | 5 |
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: |