diff options
author | fmeawad@chromium.org <fmeawad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-18 21:27:26 +0000 |
---|---|---|
committer | fmeawad@chromium.org <fmeawad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-18 21:27:26 +0000 |
commit | 568e64dde5e61a7c237c4db2ff8178056c4fc0c4 (patch) | |
tree | 2508ba7418f3f24d6c45414304bfbb3da9991543 /tools/perf | |
parent | 767f38d72c2e7da043b597eba26a718af08f9035 (diff) | |
download | chromium_src-568e64dde5e61a7c237c4db2ff8178056c4fc0c4.zip chromium_src-568e64dde5e61a7c237c4db2ff8178056c4fc0c4.tar.gz chromium_src-568e64dde5e61a7c237c4db2ff8178056c4fc0c4.tar.bz2 |
[Telemetry] Show V8 metrics in page_cyclers
BUG=
Review URL: https://codereview.chromium.org/197213022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257762 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/measurements/page_cycler.py | 6 | ||||
-rw-r--r-- | tools/perf/measurements/page_cycler_unittest.py | 16 | ||||
-rw-r--r-- | tools/perf/metrics/v8.py | 36 |
3 files changed, 58 insertions, 0 deletions
diff --git a/tools/perf/measurements/page_cycler.py b/tools/perf/measurements/page_cycler.py index 01a4628..498cd5d 100644 --- a/tools/perf/measurements/page_cycler.py +++ b/tools/perf/measurements/page_cycler.py @@ -23,6 +23,7 @@ from metrics import iometric from metrics import memory from metrics import power from metrics import speedindex +from metrics import v8 from metrics import v8_object_stats from telemetry.core import util from telemetry.page import page_measurement @@ -38,6 +39,7 @@ class PageCycler(page_measurement.PageMeasurement): self._speedindex_metric = speedindex.SpeedIndexMetric() self._memory_metric = None self._power_metric = power.PowerMetric() + self._v8_metric = v8.V8Metric() self._cpu_metric = None self._v8_object_stats_metric = None self._cold_run_start_index = None @@ -83,6 +85,7 @@ class PageCycler(page_measurement.PageMeasurement): self._speedindex_metric.Start(page, tab) def DidNavigateToPage(self, page, tab): + self._v8_metric.Start(page, tab) self._memory_metric.Start(page, tab) self._power_metric.Start(page, tab) # TODO(qyearsley): Uncomment the following line and move it to @@ -146,8 +149,11 @@ class PageCycler(page_measurement.PageMeasurement): self._has_loaded_page[page.url] += 1 + self._v8_metric.Stop(page, tab) self._power_metric.Stop(page, tab) self._memory_metric.Stop(page, tab) + self._v8_metric.AddResults( + tab, results, chart_name=chart_name_prefix+'times') self._memory_metric.AddResults(tab, results) self._power_metric.AddResults(tab, results) diff --git a/tools/perf/measurements/page_cycler_unittest.py b/tools/perf/measurements/page_cycler_unittest.py index 37f8dc7..be6c6ac 100644 --- a/tools/perf/measurements/page_cycler_unittest.py +++ b/tools/perf/measurements/page_cycler_unittest.py @@ -32,7 +32,21 @@ class MockMemoryMetric(object): def AddSummaryResults(self, tab, results): pass +class MockV8Metric(object): + def __init__(self): + pass + + def Start(self, page, tab): + pass + + def Stop(self, page, tab): + pass + + def AddResults(self, tab, results, chart_name): + pass + +# Used to mock loading a page. class FakePage(object): """Used to mock loading a page.""" def __init__(self, url): @@ -63,6 +77,8 @@ class PageCyclerUnitTest(unittest.TestCase): cycler.ProcessCommandLineArgs(parser, options) cycler.CustomizeBrowserOptions(options) + cycler._v8_metric = MockV8Metric() + if setup_memory_module: # Mock out memory metrics; the real ones require a real browser. mock_memory_metric = MockMemoryMetric() diff --git a/tools/perf/metrics/v8.py b/tools/perf/metrics/v8.py new file mode 100644 index 0000000..7727c63 --- /dev/null +++ b/tools/perf/metrics/v8.py @@ -0,0 +1,36 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import collections + +from metrics import timeline +from metrics.timeline import TimelineMetric + +class V8Metric(TimelineMetric): + """A metric for measuring V8 functionalities.""" + + def __init__(self): + super(V8Metric, self).__init__(timeline.TRACING_MODE) + self.report_main_thread_only = False + + # Optional argument chart_name is not in base class Metric. + # pylint: disable=W0221 + def AddResults(self, _, results, chart_name=None): + assert self._model + events_by_name = collections.defaultdict(list) + for thread in self.renderer_process.threads.itervalues(): + events = thread.all_slices + + for e in events: + if e.name.startswith('V8'): + events_by_name[e.name].append(e) + + for event_name, event_group in events_by_name.iteritems(): + times = [event.self_time for event in event_group] + total = sum(times) + + # Results objects cannot contain the '.' character, so remove that here. + sanitized_event_name = event_name.replace('.', '_') + + results.Add(sanitized_event_name, 'ms', total, chart_name=chart_name) |