Commit 260051d3 authored by vmiura's avatar vmiura Committed by Commit bot

telemetry: Remove gaps between interactions when calculating smoothness metrics.

BUG=477757

Review URL: https://codereview.chromium.org/1092803002

Cr-Commit-Position: refs/heads/master@{#325583}
parent 92b21f8a
...@@ -88,6 +88,21 @@ class SmoothnessMetric(timeline_based_metric.TimelineBasedMetric): ...@@ -88,6 +88,21 @@ class SmoothnessMetric(timeline_based_metric.TimelineBasedMetric):
if d / refresh_period >= min_normalized_delta] if d / refresh_period >= min_normalized_delta]
return (deltas, [delta / refresh_period for delta in deltas]) return (deltas, [delta / refresh_period for delta in deltas])
@staticmethod
def _JoinTimestampRanges(frame_timestamps):
"""Joins ranges of timestamps, adjusting timestamps to remove deltas
between the start of a range and the end of the prior range.
"""
timestamps = []
for timestamp_range in frame_timestamps:
if len(timestamps) == 0:
timestamps.extend(timestamp_range)
else:
for i in range(1, len(timestamp_range)):
timestamps.append(timestamps[-1] +
timestamp_range[i] - timestamp_range[i-1])
return timestamps
def _ComputeSurfaceFlingerMetric(self, page, stats): def _ComputeSurfaceFlingerMetric(self, page, stats):
jank_count = None jank_count = None
avg_surface_fps = None avg_surface_fps = None
...@@ -95,7 +110,7 @@ class SmoothnessMetric(timeline_based_metric.TimelineBasedMetric): ...@@ -95,7 +110,7 @@ class SmoothnessMetric(timeline_based_metric.TimelineBasedMetric):
frame_lengths = None frame_lengths = None
none_value_reason = None none_value_reason = None
if self._HasEnoughFrames(stats.frame_timestamps): if self._HasEnoughFrames(stats.frame_timestamps):
timestamps = FlattenList(stats.frame_timestamps) timestamps = self._JoinTimestampRanges(stats.frame_timestamps)
frame_count = len(timestamps) frame_count = len(timestamps)
milliseconds = timestamps[-1] - timestamps[0] milliseconds = timestamps[-1] - timestamps[0]
min_normalized_frame_length = 0.5 min_normalized_frame_length = 0.5
......
...@@ -60,17 +60,29 @@ class SmoothnessMetricUnitTest(unittest.TestCase): ...@@ -60,17 +60,29 @@ class SmoothnessMetricUnitTest(unittest.TestCase):
self.not_enough_frames_timestamps) self.not_enough_frames_timestamps)
self.assertFalse(has_enough_frames) self.assertFalse(has_enough_frames)
def testComputeSurfaceFlingerMetric(self): def testComputeSurfaceFlingerMetricNoJank(self):
stats = _MockRenderingStats(refresh_period=10, stats = _MockRenderingStats(refresh_period=10,
frame_timestamps=self.good_timestamps, frame_timestamps=[[10, 20], [130, 140, 150]],
frame_times=[[10, 20], [30, 40, 50]]) frame_times=[[10], [10, 10]])
avg_surface_fps, jank_count, max_frame_delay, frame_lengths = ( avg_surface_fps, jank_count, max_frame_delay, frame_lengths = (
self.metric._ComputeSurfaceFlingerMetric(self.page, stats)) self.metric._ComputeSurfaceFlingerMetric(self.page, stats))
self.assertEquals([1, 1, 1, 1], frame_lengths.values) self.assertEquals([1, 1, 1], frame_lengths.values)
self.assertEquals(1, max_frame_delay.value) self.assertEquals(1, max_frame_delay.value)
self.assertEquals(0, jank_count.value) self.assertEquals(0, jank_count.value)
self.assertEquals(100, avg_surface_fps.value) self.assertEquals(100, avg_surface_fps.value)
def testComputeSurfaceFlingerMetricJank(self):
stats = _MockRenderingStats(
refresh_period=10,
frame_timestamps=[[10, 20, 50], [130, 140, 150, 170, 180]],
frame_times=[[10, 30], [10, 10, 20, 10]])
avg_surface_fps, jank_count, max_frame_delay, frame_lengths = (
self.metric._ComputeSurfaceFlingerMetric(self.page, stats))
self.assertEquals([1, 3, 1, 1, 2, 1], frame_lengths.values)
self.assertEquals(3, max_frame_delay.value)
self.assertEquals(2, jank_count.value)
self.assertEquals(67, avg_surface_fps.value)
def testComputeFrameTimeMetricWithNotEnoughFrames(self): def testComputeFrameTimeMetricWithNotEnoughFrames(self):
stats = _MockRenderingStats( stats = _MockRenderingStats(
refresh_period=10, refresh_period=10,
......
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