Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: tools/telemetry/telemetry/web_perf/metrics/webrtc_rendering_timeline.py

Issue 1254023003: Telemetry Test for WebRTC Rendering. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove mocks to fix border effects on subsequent tests Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from telemetry.value import list_of_scalar_values
6 from telemetry.value import scalar
7 from telemetry.value import improvement_direction
8 from telemetry.web_perf.metrics import timeline_based_metric
9 from telemetry.web_perf.metrics import webrtc_rendering_stats as stats_helper
10
11 WEB_MEDIA_PLAYER_MS_EVENT = 'WebMediaPlayerMS::UpdateCurrentFrame'
12
13
14 class WebRtcRenderingTimelineMetric(timeline_based_metric.TimelineBasedMetric):
15 """WebrtcRenderingTimelineMetric calculates metric for WebMediaPlayerMS.
16
17 The following metrics are added to the results:
18 WebRTCRendering_drift_time us
19 WebRTCRendering_percent_badly_out_of_sync %
20 WebRTCRendering_percent_out_of_sync %
21 WebRTCRendering_fps FPS
22 WebRTCRendering_smoothness_score %
23 WebRTCRendering_freezing_score %
24 WebRTCRendering_rendering_length_error %
25 """
26
27 def __init__(self):
28 super(WebRtcRenderingTimelineMetric, self).__init__()
29
30 @staticmethod
31 def IsMediaPlayerMSEvent(event):
32 """Verify that the event is a webmediaplayerMS event."""
33 return event.name == WEB_MEDIA_PLAYER_MS_EVENT
34
35 def AddResults(self, model, renderer_thread, interactions, results):
36 """Adding metrics to the results."""
37 assert interactions
38 found_events = []
39 for event in renderer_thread.parent.IterAllEvents(
40 event_predicate=self.IsMediaPlayerMSEvent):
41 if timeline_based_metric.IsEventInInteractions(event, interactions):
42 found_events.append(event)
43 stats_parser = stats_helper.WebMediaPlayerMsRenderingStats(found_events)
44 rendering_stats = stats_parser.GetTimeStats()
45 none_reason = None
46 if not rendering_stats:
47 # Create a TimeStats object whose members have None values.
48 rendering_stats = stats_helper.TimeStats()
49 none_reason = 'No WebMediaPlayerMS::UpdateCurrentFrame event found'
50 results.AddValue(list_of_scalar_values.ListOfScalarValues(
51 results.current_page,
52 'WebRTCRendering_drift_time',
53 'us',
54 rendering_stats.drift_time,
55 important=True,
56 description='Drift time for a rendered frame',
57 improvement_direction=improvement_direction.DOWN,
58 none_value_reason=none_reason))
59
60 results.AddValue(scalar.ScalarValue(
61 results.current_page,
62 'WebRTCRendering_percent_badly_out_of_sync',
63 '%',
64 rendering_stats.percent_badly_out_of_sync,
65 important=True,
66 description='Percentage of frame which drifted more than 2 VSYNC',
67 improvement_direction=improvement_direction.DOWN,
68 none_value_reason=none_reason))
69
70 results.AddValue(scalar.ScalarValue(
71 results.current_page,
72 'WebRTCRendering_percent_out_of_sync',
73 '%',
74 rendering_stats.percent_out_of_sync,
75 important=True,
76 description='Percentage of frame which drifted more than 1 VSYNC',
77 improvement_direction=improvement_direction.DOWN,
78 none_value_reason=none_reason))
79
80 # I removed the frame distribution list from stats as it is not a metric,
81 # rather it is the underlying data. Also there is no sense of improvement
82 # direction for frame distribution.
83
84 results.AddValue(scalar.ScalarValue(
85 results.current_page,
86 'WebRTCRendering_fps',
87 'fps',
88 rendering_stats.fps,
89 important=True,
90 description='Calculated Frame Rate of video rendering',
91 improvement_direction=improvement_direction.UP,
92 none_value_reason=none_reason))
93
94 results.AddValue(scalar.ScalarValue(
95 results.current_page,
96 'WebRTCRendering_smoothness_score',
97 '%',
98 rendering_stats.smoothness_score,
99 important=True,
100 description='Smoothness score of rendering',
101 improvement_direction=improvement_direction.UP,
102 none_value_reason=none_reason))
103
104 results.AddValue(scalar.ScalarValue(
105 results.current_page,
106 'WebRTCRendering_freezing_score',
107 '%',
108 rendering_stats.freezing_score,
109 important=True,
110 description='Freezing score of rendering',
111 improvement_direction=improvement_direction.UP,
112 none_value_reason=none_reason))
113
114 results.AddValue(scalar.ScalarValue(
115 results.current_page,
116 'WebRTCRendering_rendering_length_error',
117 '%',
118 rendering_stats.rendering_length_error,
119 important=True,
120 description='Rendering length error rate',
121 improvement_direction=improvement_direction.DOWN,
122 none_value_reason=none_reason))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698