blob: 74e44d061961612b729414a08dd6b7b9c4e74cd7 [file] [log] [blame]
# Copyright 2018 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.
from telemetry.web_perf import story_test
from telemetry.web_perf import timeline_based_measurement
class DualMetricMeasurement(story_test.StoryTest):
"""Test class for a benchmark that aggregates all metrics.
Assumes both javascript as well as tracing metrics might be defined.
All pages associated with this measurement must implement
GetJavascriptMetricValues() and GetJavascriptMetricSummaryValues()
"""
def __init__(self, tbm_options):
super(DualMetricMeasurement, self).__init__()
# Only enable tracing if metrics have been specified.
if tbm_options.GetTimelineBasedMetrics():
self._tbm_test = timeline_based_measurement.TimelineBasedMeasurement(
tbm_options)
self._enable_tracing = True
else:
self._enable_tracing = False
def WillRunStory(self, platform):
if self._enable_tracing:
self._tbm_test.WillRunStory(platform)
def Measure(self, platform, results):
# There are four scenarios while we migrate the press benchmarks off of
# the legacy value system
# 1. Legacy Values that get converted with the call to PopulateHistogramSet
# Note: this only works when there is one page in the sotry
# 2. Legacy Values with TMBv2 values. Same note as #1
# 3. Histograms added in the test. Diagnostics must be added to these so
# all histograms must be added through AddHistogram call.
# 4. Histograms added from the test as well as TBMv2 values.
# Diagnostics will get added by the timeline based measurement and the
# call to AddHistograms.
if len(results.current_page.GetJavascriptMetricHistograms()) > 0:
for histogram in results.current_page.GetJavascriptMetricHistograms():
results.AddHistogram(histogram)
else:
for value in results.current_page.GetJavascriptMetricValues():
results.AddValue(value)
for value in results.current_page.GetJavascriptMetricSummaryValues():
results.AddSummaryValue(value)
# This call is necessary to convert the current ScalarValues to
# histograms before more histograms are added. If we don't,
# when histograms get added by TBM2 page_test_results will see those and
# not convert any existing values because it assumes they are already
# converted. Therefore, so the javascript metrics don't get dropped, we
# have to convert them first.
# NOTE: this does not work if there is more than one page in this story.
# It will drop results from all subsequent pages. See crbug.com/902812.
results.PopulateHistogramSet()
if self._enable_tracing:
self._tbm_test.Measure(platform, results)
def DidRunStory(self, platform, results):
if self._enable_tracing:
self._tbm_test.DidRunStory(platform, results)