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

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

Issue 59403008: telemetry: Add RenderingStatsUnitTest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 7 years, 1 month 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
« no previous file with comments | « no previous file | tools/perf/metrics/rendering_stats_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 from operator import attrgetter 5 from operator import attrgetter
6 6
7 7
8 class RenderingStats(object): 8 class RenderingStats(object):
9 def __init__(self, renderer_process, timeline_markers): 9 def __init__(self, renderer_process, timeline_markers):
10 """ 10 """
11 Utility class for extracting rendering statistics from the timeline (or 11 Utility class for extracting rendering statistics from the timeline (or
12 other loggin facilities), and providing them in a common format to classes 12 other loggin facilities), and providing them in a common format to classes
13 that compute benchmark metrics from this data. 13 that compute benchmark metrics from this data.
14 14
15 Stats can either be numbers, or lists of numbers. Classes that calculate 15 Stats can either be numbers, or lists of numbers. Classes that calculate
16 metrics from the stats must be able to handle both cases. The length of 16 metrics from the stats must be able to handle both cases. The length of
17 different list stats may vary. 17 different list stats may vary.
18 18
19 All *_time values are measured in milliseconds. 19 All *_time values are measured in milliseconds.
20 """ 20 """
21 assert(len(timeline_markers) > 0) 21 assert(len(timeline_markers) > 0)
22 self.renderer_process = renderer_process 22 self.renderer_process = renderer_process
23 self.start = timeline_markers[0].start
24 self.end = timeline_markers[-1].start + timeline_markers[-1].duration
25 23
26 self.frame_count = []
27 self.frame_timestamps = [] 24 self.frame_timestamps = []
28 self.frame_times = [] 25 self.frame_times = []
29 self.paint_time = [] 26 self.paint_time = []
30 self.painted_pixel_count = [] 27 self.painted_pixel_count = []
31 self.record_time = [] 28 self.record_time = []
32 self.recorded_pixel_count = [] 29 self.recorded_pixel_count = []
33 self.rasterize_time = [] 30 self.rasterize_time = []
34 self.rasterized_pixel_count = [] 31 self.rasterized_pixel_count = []
35 32
36 for marker in timeline_markers: 33 for marker in timeline_markers:
(...skipping 18 matching lines...) Expand all
55 events.sort(key=attrgetter('start')) 52 events.sort(key=attrgetter('start'))
56 53
57 first_frame = True 54 first_frame = True
58 for event in events: 55 for event in events:
59 # TODO(ernstm): remove screen_frame_count when RenderingStats 56 # TODO(ernstm): remove screen_frame_count when RenderingStats
60 # cleanup CL was picked up by the reference build. 57 # cleanup CL was picked up by the reference build.
61 if 'frame_count' in event.args['data']: 58 if 'frame_count' in event.args['data']:
62 frame_count = event.args['data']['frame_count'] 59 frame_count = event.args['data']['frame_count']
63 else: 60 else:
64 frame_count = event.args['data']['screen_frame_count'] 61 frame_count = event.args['data']['screen_frame_count']
65 self.frame_count.append(frame_count)
66 if frame_count > 1: 62 if frame_count > 1:
67 raise ValueError, 'trace contains multi-frame render stats' 63 raise ValueError, 'trace contains multi-frame render stats'
68 if frame_count == 1: 64 if frame_count == 1:
69 self.frame_timestamps.append( 65 self.frame_timestamps.append(
70 event.start) 66 event.start)
71 if not first_frame: 67 if not first_frame:
72 self.frame_times.append(round(self.frame_timestamps[-1] - 68 self.frame_times.append(round(self.frame_timestamps[-1] -
73 self.frame_timestamps[-2], 2)) 69 self.frame_timestamps[-2], 2))
74 first_frame = False 70 first_frame = False
75 self.paint_time.append(1000.0 * 71 self.paint_time.append(1000.0 *
(...skipping 21 matching lines...) Expand all
97 events.sort(key=attrgetter('start')) 93 events.sort(key=attrgetter('start'))
98 94
99 first_frame = True 95 first_frame = True
100 for event in events: 96 for event in events:
101 # TODO(ernstm): remove screen_frame_count when RenderingStats 97 # TODO(ernstm): remove screen_frame_count when RenderingStats
102 # cleanup CL was picked up by the reference build. 98 # cleanup CL was picked up by the reference build.
103 if 'frame_count' in event.args['data']: 99 if 'frame_count' in event.args['data']:
104 frame_count = event.args['data']['frame_count'] 100 frame_count = event.args['data']['frame_count']
105 else: 101 else:
106 frame_count = event.args['data']['screen_frame_count'] 102 frame_count = event.args['data']['screen_frame_count']
107 self.frame_count.append(frame_count)
108 if frame_count > 1: 103 if frame_count > 1:
109 raise ValueError, 'trace contains multi-frame render stats' 104 raise ValueError, 'trace contains multi-frame render stats'
110 if frame_count == 1: 105 if frame_count == 1:
111 self.frame_timestamps.append( 106 self.frame_timestamps.append(
112 event.start) 107 event.start)
113 if not first_frame: 108 if not first_frame:
114 self.frame_times.append(round(self.frame_timestamps[-1] - 109 self.frame_times.append(round(self.frame_timestamps[-1] -
115 self.frame_timestamps[-2], 2)) 110 self.frame_timestamps[-2], 2))
116 first_frame = False 111 first_frame = False
117 self.rasterize_time.append(1000.0 * 112 self.rasterize_time.append(1000.0 *
118 event.args['data']['rasterize_time']) 113 event.args['data']['rasterize_time'])
119 self.rasterized_pixel_count.append( 114 self.rasterized_pixel_count.append(
120 event.args['data']['rasterized_pixel_count']) 115 event.args['data']['rasterized_pixel_count'])
OLDNEW
« no previous file with comments | « no previous file | tools/perf/metrics/rendering_stats_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698