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

Side by Side Diff: cc/debug/rasterize_and_record_benchmark.cc

Issue 1069503002: [S.P.] Fix rasterize_and_record benchmark to include SkPicture playback time (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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
« no previous file with comments | « cc/debug/rasterize_and_record_benchmark.h ('k') | no next file » | 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 #include "cc/debug/rasterize_and_record_benchmark.h" 5 #include "cc/debug/rasterize_and_record_benchmark.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 return make_scoped_ptr(new RasterizeAndRecordBenchmarkImpl( 98 return make_scoped_ptr(new RasterizeAndRecordBenchmarkImpl(
99 origin_loop, 99 origin_loop,
100 settings_.get(), 100 settings_.get(),
101 base::Bind(&RasterizeAndRecordBenchmark::RecordRasterResults, 101 base::Bind(&RasterizeAndRecordBenchmark::RecordRasterResults,
102 weak_ptr_factory_.GetWeakPtr()))); 102 weak_ptr_factory_.GetWeakPtr())));
103 } 103 }
104 104
105 void RasterizeAndRecordBenchmark::RunOnLayer(PictureLayer* layer) { 105 void RasterizeAndRecordBenchmark::RunOnLayer(PictureLayer* layer) {
106 DCHECK(host_); 106 DCHECK(host_);
107 107
108 gfx::Rect visible_content_rect = gfx::ScaleToEnclosingRect( 108 gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect(
109 layer->visible_content_rect(), 1.f / layer->contents_scale_x()); 109 layer->visible_content_rect(), 1.f / layer->contents_scale_x());
110 if (visible_content_rect.IsEmpty()) 110 if (visible_layer_rect.IsEmpty())
111 return; 111 return;
112 112
113 if (host_->settings().use_display_lists) { 113 if (host_->settings().use_display_lists) {
114 RunOnDisplayListLayer(layer, visible_content_rect); 114 RunOnDisplayListLayer(layer, visible_layer_rect);
115 } else { 115 } else {
116 RunOnPictureLayer(layer, visible_content_rect); 116 RunOnPictureLayer(layer, visible_layer_rect);
117 } 117 }
118 } 118 }
119 119
120 void RasterizeAndRecordBenchmark::RunOnPictureLayer( 120 void RasterizeAndRecordBenchmark::RunOnPictureLayer(
121 PictureLayer* layer, 121 PictureLayer* layer,
122 const gfx::Rect& visible_content_rect) { 122 const gfx::Rect& visible_layer_rect) {
123 ContentLayerClient* painter = layer->client(); 123 ContentLayerClient* painter = layer->client();
124 124
125 DCHECK(host_ && !host_->settings().use_display_lists); 125 DCHECK(host_ && !host_->settings().use_display_lists);
126 126
127 gfx::Size tile_grid_size = host_->settings().default_tile_size; 127 gfx::Size tile_grid_size = host_->settings().default_tile_size;
128 128
129 for (int mode_index = 0; mode_index < RecordingSource::RECORDING_MODE_COUNT; 129 for (int mode_index = 0; mode_index < RecordingSource::RECORDING_MODE_COUNT;
130 mode_index++) { 130 mode_index++) {
131 RecordingSource::RecordingMode mode = 131 RecordingSource::RecordingMode mode =
132 static_cast<RecordingSource::RecordingMode>(mode_index); 132 static_cast<RecordingSource::RecordingMode>(mode_index);
133 base::TimeDelta min_time = base::TimeDelta::Max(); 133 base::TimeDelta min_time = base::TimeDelta::Max();
134 size_t memory_used = 0; 134 size_t memory_used = 0;
135 135
136 for (int i = 0; i < record_repeat_count_; ++i) { 136 for (int i = 0; i < record_repeat_count_; ++i) {
137 // Run for a minimum amount of time to avoid problems with timer 137 // Run for a minimum amount of time to avoid problems with timer
138 // quantization when the layer is very small. 138 // quantization when the layer is very small.
139 LapTimer timer(kWarmupRuns, 139 LapTimer timer(kWarmupRuns,
140 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 140 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
141 kTimeCheckInterval); 141 kTimeCheckInterval);
142 scoped_refptr<Picture> picture; 142 scoped_refptr<Picture> picture;
143 do { 143 do {
144 picture = Picture::Create(visible_content_rect, painter, tile_grid_size, 144 picture = Picture::Create(visible_layer_rect, painter, tile_grid_size,
145 false, mode); 145 false, mode);
146 if (memory_used) { 146 if (memory_used) {
147 // Verify we are recording the same thing each time. 147 // Verify we are recording the same thing each time.
148 DCHECK(memory_used == picture->ApproximateMemoryUsage()); 148 DCHECK(memory_used == picture->ApproximateMemoryUsage());
149 } else { 149 } else {
150 memory_used = picture->ApproximateMemoryUsage(); 150 memory_used = picture->ApproximateMemoryUsage();
151 } 151 }
152 152
153 timer.NextLap(); 153 timer.NextLap();
154 } while (!timer.HasTimeLimitExpired()); 154 } while (!timer.HasTimeLimitExpired());
155 base::TimeDelta duration = 155 base::TimeDelta duration =
156 base::TimeDelta::FromMillisecondsD(timer.MsPerLap()); 156 base::TimeDelta::FromMillisecondsD(timer.MsPerLap());
157 if (duration < min_time) 157 if (duration < min_time)
158 min_time = duration; 158 min_time = duration;
159 } 159 }
160 160
161 if (mode == RecordingSource::RECORD_NORMALLY) { 161 if (mode == RecordingSource::RECORD_NORMALLY) {
162 record_results_.bytes_used += memory_used; 162 record_results_.bytes_used += memory_used;
163 record_results_.pixels_recorded += 163 record_results_.pixels_recorded +=
164 visible_content_rect.width() * visible_content_rect.height(); 164 visible_layer_rect.width() * visible_layer_rect.height();
165 } 165 }
166 record_results_.total_best_time[mode_index] += min_time; 166 record_results_.total_best_time[mode_index] += min_time;
167 } 167 }
168 } 168 }
169 169
170 void RasterizeAndRecordBenchmark::RunOnDisplayListLayer( 170 void RasterizeAndRecordBenchmark::RunOnDisplayListLayer(
171 PictureLayer* layer, 171 PictureLayer* layer,
172 const gfx::Rect& visible_content_rect) { 172 const gfx::Rect& visible_layer_rect) {
173 ContentLayerClient* painter = layer->client(); 173 ContentLayerClient* painter = layer->client();
174 174
175 DCHECK(host_ && host_->settings().use_display_lists); 175 DCHECK(host_ && host_->settings().use_display_lists);
176 176
177 for (int mode_index = 0; mode_index < RecordingSource::RECORDING_MODE_COUNT; 177 for (int mode_index = 0; mode_index < RecordingSource::RECORDING_MODE_COUNT;
178 mode_index++) { 178 mode_index++) {
179 ContentLayerClient::PaintingControlSetting painting_control = 179 ContentLayerClient::PaintingControlSetting painting_control =
180 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL; 180 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL;
181 switch (static_cast<RecordingSource::RecordingMode>(mode_index)) { 181 switch (static_cast<RecordingSource::RecordingMode>(mode_index)) {
182 case RecordingSource::RECORD_NORMALLY: 182 case RecordingSource::RECORD_NORMALLY:
(...skipping 17 matching lines...) Expand all
200 200
201 scoped_refptr<DisplayItemList> display_list; 201 scoped_refptr<DisplayItemList> display_list;
202 for (int i = 0; i < record_repeat_count_; ++i) { 202 for (int i = 0; i < record_repeat_count_; ++i) {
203 // Run for a minimum amount of time to avoid problems with timer 203 // Run for a minimum amount of time to avoid problems with timer
204 // quantization when the layer is very small. 204 // quantization when the layer is very small.
205 LapTimer timer(kWarmupRuns, 205 LapTimer timer(kWarmupRuns,
206 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 206 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
207 kTimeCheckInterval); 207 kTimeCheckInterval);
208 208
209 do { 209 do {
210 display_list = painter->PaintContentsToDisplayList(visible_content_rect, 210 display_list = painter->PaintContentsToDisplayList(visible_layer_rect,
211 painting_control); 211 painting_control);
212 display_list->CreateAndCacheSkPicture();
212 213
213 if (memory_used) { 214 if (memory_used) {
214 // Verify we are recording the same thing each time. 215 // Verify we are recording the same thing each time.
215 DCHECK(memory_used == display_list->PictureMemoryUsage()); 216 DCHECK(memory_used == display_list->PictureMemoryUsage());
216 } else { 217 } else {
217 memory_used = display_list->PictureMemoryUsage(); 218 memory_used = display_list->PictureMemoryUsage();
218 } 219 }
219 220
220 timer.NextLap(); 221 timer.NextLap();
221 } while (!timer.HasTimeLimitExpired()); 222 } while (!timer.HasTimeLimitExpired());
222 base::TimeDelta duration = 223 base::TimeDelta duration =
223 base::TimeDelta::FromMillisecondsD(timer.MsPerLap()); 224 base::TimeDelta::FromMillisecondsD(timer.MsPerLap());
224 if (duration < min_time) 225 if (duration < min_time)
225 min_time = duration; 226 min_time = duration;
226 } 227 }
227 228
228 if (mode_index == RecordingSource::RECORD_NORMALLY) { 229 if (mode_index == RecordingSource::RECORD_NORMALLY) {
229 record_results_.bytes_used += memory_used; 230 record_results_.bytes_used += memory_used;
230 record_results_.pixels_recorded += 231 record_results_.pixels_recorded +=
231 visible_content_rect.width() * visible_content_rect.height(); 232 visible_layer_rect.width() * visible_layer_rect.height();
232 } 233 }
233 record_results_.total_best_time[mode_index] += min_time; 234 record_results_.total_best_time[mode_index] += min_time;
234 } 235 }
235 } 236 }
236 237
237 RasterizeAndRecordBenchmark::RecordResults::RecordResults() 238 RasterizeAndRecordBenchmark::RecordResults::RecordResults()
238 : pixels_recorded(0), bytes_used(0) { 239 : pixels_recorded(0), bytes_used(0) {
239 } 240 }
240 241
241 RasterizeAndRecordBenchmark::RecordResults::~RecordResults() {} 242 RasterizeAndRecordBenchmark::RecordResults::~RecordResults() {}
242 243
243 } // namespace cc 244 } // namespace cc
OLDNEW
« no previous file with comments | « cc/debug/rasterize_and_record_benchmark.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698