| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 class GpuRenderingStats(object): | 5 class GpuRenderingStats(object): |
| 6 def __init__(self, timeline_marker, rendering_stats_deltas, | 6 def __init__(self, timeline_marker, rendering_stats_deltas, |
| 7 used_gpu_benchmarking): | 7 used_gpu_benchmarking): |
| 8 """ | 8 """ |
| 9 Utility class for extracting rendering statistics from the timeline (or | 9 Utility class for extracting rendering statistics from the timeline (or |
| 10 other loggin facilities), and providing them in a common format to classes | 10 other loggin facilities), and providing them in a common format to classes |
| 11 that compute benchmark metrics from this data. | 11 that compute benchmark metrics from this data. |
| 12 | 12 |
| 13 Stats can either be numbers, or lists of numbers. Classes that calculate | 13 Stats can either be numbers, or lists of numbers. Classes that calculate |
| 14 metrics from the stats must be able to handle both cases. The length of | 14 metrics from the stats must be able to handle both cases. The length of |
| 15 different list stats may vary. | 15 different list stats may vary. |
| 16 | 16 |
| 17 All *_time values are measured in seconds. | 17 All *_time values are measured in seconds. |
| 18 """ | 18 """ |
| 19 self.renderer_process = timeline_marker.start_thread.parent | 19 self.renderer_process = timeline_marker.start_thread.parent |
| 20 self.start = timeline_marker.start | 20 self.start = timeline_marker.start |
| 21 self.end = self.start + timeline_marker.duration | 21 self.end = self.start + timeline_marker.duration |
| 22 | 22 |
| 23 self.total_time = (self.end - self.start) / 1000.0 | 23 self.total_time = (self.end - self.start) / 1000.0 |
| 24 self.animation_frame_count = [] | 24 self.animation_frame_count = [] |
| 25 self.screen_frame_count = [] | 25 self.screen_frame_count = [] |
| 26 self.screen_frame_timestamps = [] |
| 26 self.paint_time = [] | 27 self.paint_time = [] |
| 27 self.record_time = [] | 28 self.record_time = [] |
| 28 self.commit_time = [] | 29 self.commit_time = [] |
| 29 self.commit_count = [] | 30 self.commit_count = [] |
| 30 self.painted_pixel_count = [] | 31 self.painted_pixel_count = [] |
| 31 self.recorded_pixel_count = [] | 32 self.recorded_pixel_count = [] |
| 32 self.image_gathering_count = [] | 33 self.image_gathering_count = [] |
| 33 self.image_gathering_time = [] | 34 self.image_gathering_time = [] |
| 34 self.dropped_frame_count = [] | 35 self.dropped_frame_count = [] |
| 35 self.rasterize_time = [] | 36 self.rasterize_time = [] |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 self.touch_acked_latency = rs.get('totalTouchAckedLatency', 0) | 84 self.touch_acked_latency = rs.get('totalTouchAckedLatency', 0) |
| 84 self.scroll_update_count = rs.get('scrollUpdateCount', 0) | 85 self.scroll_update_count = rs.get('scrollUpdateCount', 0) |
| 85 self.scroll_update_latency = rs.get('totalScrollUpdateLatency', 0) | 86 self.scroll_update_latency = rs.get('totalScrollUpdateLatency', 0) |
| 86 | 87 |
| 87 def initMainThreadStatsFromTimeline(self): | 88 def initMainThreadStatsFromTimeline(self): |
| 88 for event in self.renderer_process.IterAllSlicesOfName( | 89 for event in self.renderer_process.IterAllSlicesOfName( |
| 89 'MainThreadRenderingStats::IssueTraceEvent'): | 90 'MainThreadRenderingStats::IssueTraceEvent'): |
| 90 if event.start >= self.start and event.end <= self.end: | 91 if event.start >= self.start and event.end <= self.end: |
| 91 if 'data' not in event.args: | 92 if 'data' not in event.args: |
| 92 continue | 93 continue |
| 94 if event.args['data']['screen_frame_count'] > 1: |
| 95 raise ValueError, 'trace contains multi-frame render stats' |
| 93 self.animation_frame_count.append( | 96 self.animation_frame_count.append( |
| 94 event.args['data']['animation_frame_count']) | 97 event.args['data']['animation_frame_count']) |
| 95 self.screen_frame_count.append( | 98 self.screen_frame_count.append( |
| 96 event.args['data']['screen_frame_count']) | 99 event.args['data']['screen_frame_count']) |
| 100 if event.args['data']['screen_frame_count'] == 1: |
| 101 self.screen_frame_timestamps.append( |
| 102 event.start) |
| 97 self.paint_time.append( | 103 self.paint_time.append( |
| 98 event.args['data']['paint_time']) | 104 event.args['data']['paint_time']) |
| 99 self.record_time.append( | 105 self.record_time.append( |
| 100 event.args['data']['record_time']) | 106 event.args['data']['record_time']) |
| 101 self.commit_time.append( | 107 self.commit_time.append( |
| 102 event.args['data']['commit_time']) | 108 event.args['data']['commit_time']) |
| 103 self.commit_count.append( | 109 self.commit_count.append( |
| 104 event.args['data']['commit_count']) | 110 event.args['data']['commit_count']) |
| 105 self.painted_pixel_count.append( | 111 self.painted_pixel_count.append( |
| 106 event.args['data']['painted_pixel_count']) | 112 event.args['data']['painted_pixel_count']) |
| 107 self.recorded_pixel_count.append( | 113 self.recorded_pixel_count.append( |
| 108 event.args['data']['recorded_pixel_count']) | 114 event.args['data']['recorded_pixel_count']) |
| 109 self.image_gathering_count.append( | 115 self.image_gathering_count.append( |
| 110 event.args['data']['image_gathering_count']) | 116 event.args['data']['image_gathering_count']) |
| 111 self.image_gathering_time.append( | 117 self.image_gathering_time.append( |
| 112 event.args['data']['image_gathering_time']) | 118 event.args['data']['image_gathering_time']) |
| 113 | 119 |
| 114 def initImplThreadStatsFromTimeline(self): | 120 def initImplThreadStatsFromTimeline(self): |
| 115 for event in self.renderer_process.IterAllSlicesOfName( | 121 for event in self.renderer_process.IterAllSlicesOfName( |
| 116 'ImplThreadRenderingStats::IssueTraceEvent'): | 122 'ImplThreadRenderingStats::IssueTraceEvent'): |
| 117 if event.start >= self.start and event.end <= self.end: | 123 if event.start >= self.start and event.end <= self.end: |
| 118 if 'data' not in event.args: | 124 if 'data' not in event.args: |
| 119 continue | 125 continue |
| 126 if event.args['data']['screen_frame_count'] > 1: |
| 127 raise ValueError, 'trace contains multi-frame render stats' |
| 120 self.screen_frame_count.append( | 128 self.screen_frame_count.append( |
| 121 event.args['data']['screen_frame_count']) | 129 event.args['data']['screen_frame_count']) |
| 130 if event.args['data']['screen_frame_count'] == 1: |
| 131 self.screen_frame_timestamps.append( |
| 132 event.start) |
| 122 self.dropped_frame_count.append( | 133 self.dropped_frame_count.append( |
| 123 event.args['data']['dropped_frame_count']) | 134 event.args['data']['dropped_frame_count']) |
| 124 self.rasterize_time.append( | 135 self.rasterize_time.append( |
| 125 event.args['data']['rasterize_time']) | 136 event.args['data']['rasterize_time']) |
| 126 self.rasterize_time_for_now_bins_on_pending_tree.append( | 137 self.rasterize_time_for_now_bins_on_pending_tree.append( |
| 127 event.args['data']['rasterize_time_for_now_bins_on_pending_tree']) | 138 event.args['data']['rasterize_time_for_now_bins_on_pending_tree']) |
| 128 self.best_rasterize_time.append( | 139 self.best_rasterize_time.append( |
| 129 event.args['data']['best_rasterize_time']) | 140 event.args['data']['best_rasterize_time']) |
| 130 self.rasterized_pixel_count.append( | 141 self.rasterized_pixel_count.append( |
| 131 event.args['data']['rasterized_pixel_count']) | 142 event.args['data']['rasterized_pixel_count']) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 142 self.deferred_image_cache_hit_count.append( | 153 self.deferred_image_cache_hit_count.append( |
| 143 event.args['data']['deferred_image_cache_hit_count']) | 154 event.args['data']['deferred_image_cache_hit_count']) |
| 144 self.tile_analysis_count.append( | 155 self.tile_analysis_count.append( |
| 145 event.args['data']['tile_analysis_count']) | 156 event.args['data']['tile_analysis_count']) |
| 146 self.solid_color_tile_analysis_count.append( | 157 self.solid_color_tile_analysis_count.append( |
| 147 event.args['data']['solid_color_tile_analysis_count']) | 158 event.args['data']['solid_color_tile_analysis_count']) |
| 148 self.deferred_image_decode_time.append( | 159 self.deferred_image_decode_time.append( |
| 149 event.args['data']['deferred_image_decode_time']) | 160 event.args['data']['deferred_image_decode_time']) |
| 150 self.tile_analysis_time.append( | 161 self.tile_analysis_time.append( |
| 151 event.args['data']['tile_analysis_time']) | 162 event.args['data']['tile_analysis_time']) |
| OLD | NEW |