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

Side by Side Diff: tools/perf/metrics/gpu_rendering_stats.py

Issue 23506030: telemetry: Add new metrics to smoothness benchmark. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Replaced 'score' by inverse RMS frame time. Created 7 years, 3 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
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
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
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'])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698