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

Side by Side Diff: cc/benchmarks/rasterize_and_record_benchmark_impl.cc

Issue 2877483003: Implements core logic for Pixel Canvas (Closed)
Patch Set: nits Created 3 years, 6 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 #include "cc/benchmarks/rasterize_and_record_benchmark_impl.h" 5 #include "cc/benchmarks/rasterize_and_record_benchmark_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <limits> 10 #include <limits>
(...skipping 10 matching lines...) Expand all
21 #include "ui/gfx/geometry/rect.h" 21 #include "ui/gfx/geometry/rect.h"
22 22
23 namespace cc { 23 namespace cc {
24 24
25 namespace { 25 namespace {
26 26
27 const int kDefaultRasterizeRepeatCount = 100; 27 const int kDefaultRasterizeRepeatCount = 100;
28 28
29 void RunBenchmark(RasterSource* raster_source, 29 void RunBenchmark(RasterSource* raster_source,
30 const gfx::Rect& content_rect, 30 const gfx::Rect& content_rect,
31 float contents_scale, 31 const gfx::AxisTransform2d& raster_transform,
32 size_t repeat_count, 32 size_t repeat_count,
33 base::TimeDelta* min_time, 33 base::TimeDelta* min_time,
34 bool* is_solid_color) { 34 bool* is_solid_color) {
35 // Parameters for LapTimer. 35 // Parameters for LapTimer.
36 const int kTimeLimitMillis = 1; 36 const int kTimeLimitMillis = 1;
37 const int kWarmupRuns = 0; 37 const int kWarmupRuns = 0;
38 const int kTimeCheckInterval = 1; 38 const int kTimeCheckInterval = 1;
39 39
40 *min_time = base::TimeDelta::Max(); 40 *min_time = base::TimeDelta::Max();
41 for (size_t i = 0; i < repeat_count; ++i) { 41 for (size_t i = 0; i < repeat_count; ++i) {
42 // Run for a minimum amount of time to avoid problems with timer 42 // Run for a minimum amount of time to avoid problems with timer
43 // quantization when the layer is very small. 43 // quantization when the layer is very small.
44 LapTimer timer(kWarmupRuns, 44 LapTimer timer(kWarmupRuns,
45 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 45 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
46 kTimeCheckInterval); 46 kTimeCheckInterval);
47 SkColor color = SK_ColorTRANSPARENT; 47 SkColor color = SK_ColorTRANSPARENT;
48 *is_solid_color = raster_source->PerformSolidColorAnalysis( 48 *is_solid_color = raster_source->PerformSolidColorAnalysis(
49 content_rect, contents_scale, &color); 49 content_rect, raster_transform, &color);
50 50
51 do { 51 do {
52 SkBitmap bitmap; 52 SkBitmap bitmap;
53 bitmap.allocPixels(SkImageInfo::MakeN32Premul(content_rect.width(), 53 bitmap.allocPixels(SkImageInfo::MakeN32Premul(content_rect.width(),
54 content_rect.height())); 54 content_rect.height()));
55 SkCanvas canvas(bitmap); 55 SkCanvas canvas(bitmap);
56 raster_source->PlaybackToCanvas( 56 raster_source->PlaybackToCanvas(
57 &canvas, gfx::ColorSpace(), content_rect, content_rect, 57 &canvas, gfx::ColorSpace(), content_rect, content_rect,
58 gfx::AxisTransform2d(contents_scale, gfx::Vector2dF()), 58 gfx::AxisTransform2d(raster_transform.scale(), gfx::Vector2dF()),
59 RasterSource::PlaybackSettings()); 59 RasterSource::PlaybackSettings());
60 60
61 timer.NextLap(); 61 timer.NextLap();
62 } while (!timer.HasTimeLimitExpired()); 62 } while (!timer.HasTimeLimitExpired());
63 base::TimeDelta duration = 63 base::TimeDelta duration =
64 base::TimeDelta::FromMillisecondsD(timer.MsPerLap()); 64 base::TimeDelta::FromMillisecondsD(timer.MsPerLap());
65 if (duration < *min_time) 65 if (duration < *min_time)
66 *min_time = duration; 66 *min_time = duration;
67 } 67 }
68 } 68 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 tiling_set->AddTiling(gfx::AxisTransform2d(), layer->GetRasterSource()); 182 tiling_set->AddTiling(gfx::AxisTransform2d(), layer->GetRasterSource());
183 tiling->set_resolution(HIGH_RESOLUTION); 183 tiling->set_resolution(HIGH_RESOLUTION);
184 tiling->CreateAllTilesForTesting(); 184 tiling->CreateAllTilesForTesting();
185 RasterSource* raster_source = tiling->raster_source().get(); 185 RasterSource* raster_source = tiling->raster_source().get();
186 for (PictureLayerTiling::CoverageIterator it(tiling, 1.f, 186 for (PictureLayerTiling::CoverageIterator it(tiling, 1.f,
187 layer->visible_layer_rect()); 187 layer->visible_layer_rect());
188 it; ++it) { 188 it; ++it) {
189 DCHECK(*it); 189 DCHECK(*it);
190 190
191 gfx::Rect content_rect = (*it)->content_rect(); 191 gfx::Rect content_rect = (*it)->content_rect();
192 float contents_scale = (*it)->raster_transform().scale();
193 192
194 base::TimeDelta min_time; 193 base::TimeDelta min_time;
195 bool is_solid_color = false; 194 bool is_solid_color = false;
196 RunBenchmark(raster_source, content_rect, contents_scale, 195 RunBenchmark(raster_source, content_rect, (*it)->raster_transform(),
197 rasterize_repeat_count_, &min_time, &is_solid_color); 196 rasterize_repeat_count_, &min_time, &is_solid_color);
198 197
199 int tile_size = content_rect.width() * content_rect.height(); 198 int tile_size = content_rect.width() * content_rect.height();
200 if (layer->contents_opaque()) 199 if (layer->contents_opaque())
201 rasterize_results_.pixels_rasterized_as_opaque += tile_size; 200 rasterize_results_.pixels_rasterized_as_opaque += tile_size;
202 201
203 if (!is_solid_color) 202 if (!is_solid_color)
204 rasterize_results_.pixels_rasterized_with_non_solid_color += tile_size; 203 rasterize_results_.pixels_rasterized_with_non_solid_color += tile_size;
205 204
206 rasterize_results_.pixels_rasterized += tile_size; 205 rasterize_results_.pixels_rasterized += tile_size;
(...skipping 11 matching lines...) Expand all
218 pixels_rasterized_as_opaque(0), 217 pixels_rasterized_as_opaque(0),
219 total_memory_usage(0), 218 total_memory_usage(0),
220 total_layers(0), 219 total_layers(0),
221 total_picture_layers(0), 220 total_picture_layers(0),
222 total_picture_layers_with_no_content(0), 221 total_picture_layers_with_no_content(0),
223 total_picture_layers_off_screen(0) {} 222 total_picture_layers_off_screen(0) {}
224 223
225 RasterizeAndRecordBenchmarkImpl::RasterizeResults::~RasterizeResults() {} 224 RasterizeAndRecordBenchmarkImpl::RasterizeResults::~RasterizeResults() {}
226 225
227 } // namespace cc 226 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698