Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 import logging | |
| 5 | |
| 6 from telemetry.value import list_of_scalar_values | |
| 7 from telemetry.value import list_of_string_values | |
| 8 from telemetry.value import scalar | |
| 9 from telemetry.web_perf.metrics import timeline_based_metric | |
| 10 from telemetry.web_perf.metrics import webrtc_rendering_stats as stats_helper | |
| 11 | |
| 12 WEB_MEDIA_PLAYER_MS_EVENT = 'WebMediaPlayerMS::UpdateCurrentFrame' | |
| 13 | |
|
eakuefner
2015/09/28 19:49:48
nit: 2 newlines instead of 3
cpaulin (no longer in chrome)
2015/09/29 15:50:25
Done.
| |
| 14 | |
| 15 | |
| 16 class WebRtcRenderingTimelineMetric(timeline_based_metric.TimelineBasedMetric): | |
| 17 """WebrtcRenderingTimelineMetric calculates metric for WebMediaPlayerMS. | |
| 18 | |
| 19 The following metrics are added to the results: | |
| 20 WebRtcRendering_drift_time usec | |
|
eakuefner
2015/09/28 19:49:48
The units of the values you add should match entri
cpaulin (no longer in chrome)
2015/09/29 15:50:25
Ethan,
I fixed the WebRtcRendering_ occurences, a
eakuefner
2015/09/29 18:09:27
Great question. For a little background, we're cur
cpaulin (no longer in chrome)
2015/09/29 18:59:05
Done.
| |
| 21 WebRTCRendering_std_dev_drift_time usec | |
| 22 WebRTCRendering_percent_badly_out_of_sync % | |
| 23 WebRTCRendering_percent_out_of_sync % | |
| 24 WebRTCRendering_fps FPS | |
| 25 WebRTCRendering_smoothness_score % | |
| 26 WebRTCRendering_freezing_score % | |
| 27 WebRTCRendering_rendering_length_error % | |
| 28 """ | |
| 29 | |
| 30 def __init__(self): | |
| 31 super(WebRtcRenderingTimelineMetric, self).__init__() | |
| 32 | |
| 33 @staticmethod | |
| 34 def IsMediaPlayerMSEvent(event): | |
| 35 """Verify that the event is a webmediaplayerMS event.""" | |
| 36 return event.name == WEB_MEDIA_PLAYER_MS_EVENT | |
| 37 | |
| 38 @staticmethod | |
| 39 def IsEventInInteraction(event, interaction): | |
|
eakuefner
2015/09/28 19:49:48
Ned has recently added IsEventInInteractions here:
cpaulin (no longer in chrome)
2015/09/29 15:50:25
Done.
| |
| 40 """Verify that the event belong to the given interaction.""" | |
| 41 return interaction[0].start <= event.start <= interaction[0].end | |
| 42 | |
| 43 def AddResults(self, model, renderer_thread, interactions, results): | |
| 44 """Adding metrics to the results.""" | |
| 45 assert interactions | |
| 46 found_events = [] | |
| 47 for event in renderer_thread.parent.IterAllEvents( | |
| 48 event_predicate=self.IsMediaPlayerMSEvent): | |
| 49 if self.IsEventInInteraction(event, interactions): | |
| 50 found_events.append(event) | |
| 51 stats_parser = stats_helper.WebMediaPlayerMsRenderingStats(found_events) | |
| 52 rendering_stats = stats_parser.GetTimeStats() | |
| 53 none_reason = None | |
| 54 if not rendering_stats: | |
| 55 rendering_stats = dict.fromkeys([ | |
| 56 'drift_time' | |
| 57 'mean_drift_time', | |
| 58 'std_dev_drift_time', | |
| 59 'percent_badly_out_of_sync', | |
| 60 'percent_out_of_sync', | |
| 61 'smoothness_score', | |
| 62 'freezing_score', | |
| 63 'rendering_length_error', | |
| 64 'fps', | |
| 65 'frame_distribution']) | |
| 66 none_reason = "No WebMediaPlayerMS::UpdateCurrentFrame event found" | |
|
eakuefner
2015/09/28 19:49:48
nit: single quotes
cpaulin (no longer in chrome)
2015/09/29 15:50:25
Done.
| |
| 67 logging.info('rendering stats : %s', rendering_stats) | |
|
nednguyen
2015/09/28 20:56:43
Remove this logging
cpaulin (no longer in chrome)
2015/09/29 15:50:25
Done.
| |
| 68 results.AddValue(list_of_scalar_values.ListOfScalarValues( | |
| 69 results.current_page, | |
| 70 'WebRtcRendering_drift_time', | |
| 71 'usec', | |
| 72 rendering_stats['drift_time'], | |
| 73 important=True, | |
| 74 description='Drift time for a rendered frame', | |
| 75 none_value_reason=none_reason)) | |
| 76 | |
| 77 results.AddValue(scalar.ScalarValue( | |
| 78 results.current_page, | |
| 79 'WebRTCRendering_mean_drift_time', | |
| 80 'usec', | |
| 81 rendering_stats['mean_drift_time'], | |
| 82 important=True, | |
| 83 description='Mean drift time for frames', | |
| 84 none_value_reason=none_reason)) | |
| 85 | |
| 86 results.AddValue(scalar.ScalarValue( | |
| 87 results.current_page, | |
| 88 'WebRTCRendering_std_dev_drift_time', | |
| 89 'usec', | |
| 90 rendering_stats['std_dev_drift_time'], | |
| 91 important=True, | |
| 92 description='Standard deviation of drift time for frames', | |
| 93 none_value_reason=none_reason)) | |
| 94 | |
| 95 results.AddValue(scalar.ScalarValue( | |
| 96 results.current_page, | |
| 97 'WebRTCRendering_percent_badly_out_of_sync', | |
| 98 '%', | |
| 99 rendering_stats['percent_badly_out_of_sync'], | |
| 100 important=True, | |
| 101 description='Percentage of frame which drifted more than 2 VSYNC', | |
| 102 none_value_reason=none_reason)) | |
| 103 | |
| 104 results.AddValue(scalar.ScalarValue( | |
| 105 results.current_page, | |
| 106 'WebRTCRendering_percent_out_of_sync', | |
| 107 '%', | |
| 108 rendering_stats['percent_out_of_sync'], | |
| 109 important=True, | |
| 110 description='Percentage of frame which drifted more than 1 VSYNC', | |
| 111 none_value_reason=none_reason)) | |
| 112 | |
| 113 # Make the output distribution a list since | |
| 114 # no facilities for dict values exist (yet). | |
| 115 frame_distribution_list = [] | |
| 116 for key, value in rendering_stats['frame_distribution'].iteritems(): | |
| 117 temp = '%s:%s' % (key, value) | |
| 118 frame_distribution_list.append(temp) | |
| 119 results.AddValue(list_of_string_values.ListOfStringValues( | |
| 120 results.current_page, | |
| 121 'WebRtcRendering_frame_distribution', | |
| 122 'frames:occurences', | |
| 123 frame_distribution_list, | |
| 124 important=True, | |
| 125 description='Output distribution of frames', | |
| 126 none_value_reason=none_reason)) | |
| 127 | |
| 128 results.AddValue(scalar.ScalarValue( | |
| 129 results.current_page, | |
| 130 'WebRTCRendering_fps', | |
| 131 'FPS', | |
| 132 rendering_stats['fps'], | |
| 133 important=True, | |
| 134 description='Calculated Frame Rate of video rendering', | |
| 135 none_value_reason=none_reason)) | |
| 136 | |
| 137 results.AddValue(scalar.ScalarValue( | |
| 138 results.current_page, | |
| 139 'WebRTCRendering_smoothness_score', | |
| 140 '%', | |
| 141 rendering_stats['smoothness_score'], | |
| 142 important=True, | |
| 143 description='Smoothness score of rendering', | |
| 144 none_value_reason=none_reason)) | |
| 145 | |
| 146 results.AddValue(scalar.ScalarValue( | |
| 147 results.current_page, | |
| 148 'WebRTCRendering_freezing_score', | |
| 149 '%', | |
| 150 rendering_stats['freezing_score'], | |
| 151 important=True, | |
| 152 description='Freezing score of rendering', | |
| 153 none_value_reason=none_reason)) | |
| 154 | |
| 155 results.AddValue(scalar.ScalarValue( | |
| 156 results.current_page, | |
| 157 'WebRTCRendering_rendering_length_error', | |
| 158 '%', | |
| 159 rendering_stats['rendering_length_error'], | |
| 160 important=True, | |
| 161 description='Rendering length error rate', | |
| 162 none_value_reason=none_reason)) | |
| OLD | NEW |