Commit 87bb2f9b authored by Ehsan Chiniforooshan's avatar Ehsan Chiniforooshan Committed by Commit Bot

Telemetry: Fix smoothness unit test

The test uses results.FindAllPageSpecificValuesNamed to verify
existence of metrics which does not work for TBMv2 metrics.

Bug: 891836
Change-Id: Ib1ee4e8081268ad5be846040058db44d013feab3
Reviewed-on: https://chromium-review.googlesource.com/c/1259942
Commit-Queue: Ehsan Chiniforooshan <chiniforooshan@chromium.org>
Commit-Queue: Ned Nguyen <nednguyen@google.com>
Reviewed-by: default avatarNed Nguyen <nednguyen@google.com>
Cr-Commit-Position: refs/heads/master@{#596469}
parent 95792efb
......@@ -7,6 +7,7 @@ from telemetry.testing import page_test_test_case
from telemetry.util import wpr_modes
from measurements import rendering
from measurements import rendering_util
# TODO(crbug.com/891546): add 'other' to the list.
RENDERING_THREAD_GROUPS = ['all', 'browser', 'fast_path', 'gpu', 'io', 'raster',
......@@ -33,27 +34,17 @@ class RenderingUnitTest(page_test_test_case.PageTestTestCase):
results = self.RunMeasurement(
rendering.Rendering(), ps, options=self._options)
self.assertFalse(results.had_failures)
# Build a map from histogram name to the number of sample values.
num_samples = {}
for histogram in results.AsHistogramDicts():
if 'name' in histogram and 'sampleValues' in histogram:
histogram_name = histogram['name']
current_num_samples = len(histogram['sampleValues'])
if histogram_name in num_samples:
num_samples[histogram_name] += current_num_samples
else:
num_samples[histogram_name] = current_num_samples
stat = rendering_util.ExtractStat(results)
for thread_group in RENDERING_THREAD_GROUPS:
# We should have at least two sample values for each metric, since
# pageset_repeat is 2.
histogram_name = 'thread_%s_cpu_time_per_frame_tbmv2' % thread_group
self.assertGreater(num_samples.get(histogram_name, 0), 1)
self.assertGreater(stat[histogram_name].count, 1)
# Check the existence of some of the legacy metrics.
self.assertGreater(num_samples.get('frame_times', 0), 1)
self.assertGreater(num_samples.get('percentage_smooth', 0), 1)
self.assertGreater(stat['frame_times'].count, 1)
self.assertGreater(stat['percentage_smooth'].count, 1)
for thread_group in THREAD_TIMES_THREAD_GROUPS:
self.assertGreater(
num_samples.get('thread_%s_cpu_time_per_frame' % thread_group, 0), 1)
stat['thread_%s_cpu_time_per_frame' % thread_group].count, 1)
......@@ -3,6 +3,7 @@
# found in the LICENSE file.
from tracing.metrics import metric_runner
from tracing.value import histogram as histogram_module
def AddTBMv2RenderingMetrics(trace_value, results, import_experimental_metrics):
mre_result = metric_runner.RunMetric(
......@@ -19,3 +20,16 @@ def AddTBMv2RenderingMetrics(trace_value, results, import_experimental_metrics):
histogram.get('name', '').find('_tbmv2') < 0):
histograms.append(histogram)
results.ImportHistogramDicts(histograms, import_immediately=False)
def ExtractStat(results):
stat = {}
for histogram_dict in results.AsHistogramDicts():
# It would be nicer if instead of converting results._histograms to dicts
# and then parsing them back in the following line, results had a getter
# returning results._histograms. But, since this is a temporary code that
# will be deleted after transitioning Smoothness to TBMv2, we don't change
# page_test_results.py for a temporary usecase.
if 'name' in histogram_dict:
histogram = histogram_module.Histogram.FromDict(histogram_dict)
stat[histogram.name] = histogram.running
return stat
......@@ -7,6 +7,7 @@ from telemetry.testing import page_test_test_case
from telemetry.util import wpr_modes
from measurements import smoothness
from measurements import rendering_util
class FakeTracingController(object):
......@@ -64,15 +65,10 @@ class SmoothnessUnitTest(page_test_test_case.PageTestTestCase):
measurement = smoothness.Smoothness()
results = self.RunMeasurement(measurement, ps, options=self._options)
self.assertFalse(results.had_failures)
stat = rendering_util.ExtractStat(results)
frame_times = results.FindAllPageSpecificValuesNamed('frame_times')
self.assertEquals(len(frame_times), 1)
self.assertGreater(frame_times[0].GetRepresentativeNumber(), 0)
percentage_smooth = results.FindAllPageSpecificValuesNamed(
'percentage_smooth')
self.assertEquals(len(percentage_smooth), 1)
self.assertGreaterEqual(percentage_smooth[0].GetRepresentativeNumber(), 0)
self.assertGreater(stat['frame_times'].mean, 0)
self.assertGreaterEqual(stat['percentage_smooth'].mean, 0)
@decorators.Enabled('android') # SurfaceFlinger is android-only
def testSmoothnessSurfaceFlingerMetricsCalculated(self):
......@@ -80,22 +76,11 @@ class SmoothnessUnitTest(page_test_test_case.PageTestTestCase):
measurement = smoothness.Smoothness()
results = self.RunMeasurement(measurement, ps, options=self._options)
self.assertFalse(results.had_failures)
stat = rendering_util.ExtractStat(results)
avg_surface_fps = results.FindAllPageSpecificValuesNamed('avg_surface_fps')
self.assertEquals(1, len(avg_surface_fps))
self.assertGreater(avg_surface_fps[0].GetRepresentativeNumber, 0)
jank_count = results.FindAllPageSpecificValuesNamed('jank_count')
self.assertEquals(1, len(jank_count))
self.assertGreater(jank_count[0].GetRepresentativeNumber(), -1)
max_frame_delay = results.FindAllPageSpecificValuesNamed('max_frame_delay')
self.assertEquals(1, len(max_frame_delay))
self.assertGreater(max_frame_delay[0].GetRepresentativeNumber, 0)
frame_lengths = results.FindAllPageSpecificValuesNamed('frame_lengths')
self.assertEquals(1, len(frame_lengths))
self.assertGreater(frame_lengths[0].GetRepresentativeNumber, 0)
self.assertGreater(stat['avg_surface_fps'].mean, 0)
self.assertGreater(stat['jank_count'].mean, -1)
self.assertGreater(stat['frame_lengths'].mean, 0)
def testCleanUpTrace(self):
self.TestTracingCleanedUp(smoothness.Smoothness, self._options)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment