# Copyright 2013 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 measurements import smoothness
from telemetry.core import wpr_modes
from telemetry.page import page_measurement_unittest_base
from telemetry.unittest import options_for_unittests
from metrics import timeline
class SmoothnessUnitTest(
page_measurement_unittest_base.PageMeasurementUnitTestBase):
"""Smoke test for smoothness measurement
Runs smoothness measurement on a simple page and verifies
that all metrics were added to the results. The test is purely functional,
i.e. it only checks if the metrics are present and non-zero.
"""
def setUp(self):
self._options = options_for_unittests.GetCopy()
self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF
def testSmoothnessWithSmoothnessMetric(self):
ps = self.CreatePageSetFromFileInUnittestDataDir('scrollable_page.html')
measurement = smoothness.Smoothness()
results = self.RunMeasurement(measurement, ps, options=self._options)
self.assertEquals(0, len(results.failures))
frame_times = results.FindAllPageSpecificValuesNamed('frame_times')
self.assertEquals(len(frame_times), 1)
self.assertGreater(frame_times[0].GetRepresentativeNumber(), 0)
mean_frame_time = results.FindAllPageSpecificValuesNamed('mean_frame_time')
self.assertEquals(len(mean_frame_time), 1)
self.assertGreater(mean_frame_time[0].GetRepresentativeNumber(), 0)
jank = results.FindAllPageSpecificValuesNamed('jank')
self.assertEquals(len(jank), 1)
self.assertGreater(jank[0].GetRepresentativeNumber(), 0)
mostly_smooth = results.FindAllPageSpecificValuesNamed('mostly_smooth')
self.assertEquals(len(mostly_smooth), 1)
self.assertGreaterEqual(mostly_smooth[0].GetRepresentativeNumber(), 0)
def testSmoothnessWithTimelineMetric(self):
ps = self.CreatePageSetFromFileInUnittestDataDir('scrollable_page.html')
measurement = smoothness.Smoothness()
timeline_options = self._options
timeline_options.metric = 'timeline'
results = self.RunMeasurement(measurement, ps, options = timeline_options)
self.assertEquals(0, len(results.failures))
for category in timeline.TimelineThreadCategories.values():
clock_time_name = timeline.ThreadTimePercentageName(category)
clock_time = results.FindAllPageSpecificValuesNamed(clock_time_name)
self.assertEquals(len(clock_time), 1)
cpu_time_name = timeline.ThreadCPUTimePercentageName(category)
cpu_time = results.FindAllPageSpecificValuesNamed(cpu_time_name)
self.assertEquals(len(cpu_time), 1)