summaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
authorfmeawad@chromium.org <fmeawad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-18 21:27:26 +0000
committerfmeawad@chromium.org <fmeawad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-18 21:27:26 +0000
commit568e64dde5e61a7c237c4db2ff8178056c4fc0c4 (patch)
tree2508ba7418f3f24d6c45414304bfbb3da9991543 /tools/perf
parent767f38d72c2e7da043b597eba26a718af08f9035 (diff)
downloadchromium_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.py6
-rw-r--r--tools/perf/measurements/page_cycler_unittest.py16
-rw-r--r--tools/perf/metrics/v8.py36
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)