Index: cc/debug/rasterize_and_record_benchmark_impl.cc |
diff --git a/cc/debug/rasterize_and_record_benchmark_impl.cc b/cc/debug/rasterize_and_record_benchmark_impl.cc |
index c638ddcf65bb507ddb2ebeaae0b04827a4045905..5a9577b9c12e3ba859d2a60e8050d366c31d454a 100644 |
--- a/cc/debug/rasterize_and_record_benchmark_impl.cc |
+++ b/cc/debug/rasterize_and_record_benchmark_impl.cc |
@@ -24,68 +24,45 @@ namespace { |
const int kDefaultRasterizeRepeatCount = 100; |
-class BenchmarkRasterTask : public Task { |
- public: |
- BenchmarkRasterTask(RasterSource* raster_source, |
- const gfx::Rect& content_rect, |
- float contents_scale, |
- size_t repeat_count) |
- : raster_source_(raster_source), |
- content_rect_(content_rect), |
- contents_scale_(contents_scale), |
- repeat_count_(repeat_count), |
- is_solid_color_(false), |
- best_time_(base::TimeDelta::Max()) {} |
- |
- // Overridden from Task: |
- void RunOnWorkerThread() override { |
- // Parameters for LapTimer. |
- const int kTimeLimitMillis = 1; |
- const int kWarmupRuns = 0; |
- const int kTimeCheckInterval = 1; |
- |
- for (size_t i = 0; i < repeat_count_; ++i) { |
- // Run for a minimum amount of time to avoid problems with timer |
- // quantization when the layer is very small. |
- LapTimer timer(kWarmupRuns, |
- base::TimeDelta::FromMilliseconds(kTimeLimitMillis), |
- kTimeCheckInterval); |
- do { |
- SkBitmap bitmap; |
- bitmap.allocPixels(SkImageInfo::MakeN32Premul(content_rect_.width(), |
- content_rect_.height())); |
- SkCanvas canvas(bitmap); |
- RasterSource::SolidColorAnalysis analysis; |
- |
- raster_source_->PerformSolidColorAnalysis(content_rect_, |
- contents_scale_, &analysis); |
- raster_source_->PlaybackToCanvas(&canvas, content_rect_, |
- contents_scale_); |
- |
- is_solid_color_ = analysis.is_solid_color; |
- |
- timer.NextLap(); |
- } while (!timer.HasTimeLimitExpired()); |
- base::TimeDelta duration = |
- base::TimeDelta::FromMillisecondsD(timer.MsPerLap()); |
- if (duration < best_time_) |
- best_time_ = duration; |
- } |
+void RunBenchmark(RasterSource* raster_source, |
+ const gfx::Rect& content_rect, |
+ float contents_scale, |
+ size_t repeat_count, |
+ base::TimeDelta* min_time, |
+ bool* is_solid_color) { |
+ // Parameters for LapTimer. |
+ const int kTimeLimitMillis = 1; |
+ const int kWarmupRuns = 0; |
+ const int kTimeCheckInterval = 1; |
+ |
+ *min_time = base::TimeDelta::Max(); |
+ for (size_t i = 0; i < repeat_count; ++i) { |
+ // Run for a minimum amount of time to avoid problems with timer |
+ // quantization when the layer is very small. |
+ LapTimer timer(kWarmupRuns, |
+ base::TimeDelta::FromMilliseconds(kTimeLimitMillis), |
+ kTimeCheckInterval); |
+ do { |
+ SkBitmap bitmap; |
+ bitmap.allocPixels(SkImageInfo::MakeN32Premul(content_rect.width(), |
+ content_rect.height())); |
+ SkCanvas canvas(bitmap); |
+ RasterSource::SolidColorAnalysis analysis; |
+ |
+ raster_source->PerformSolidColorAnalysis(content_rect, contents_scale, |
+ &analysis); |
+ raster_source->PlaybackToCanvas(&canvas, content_rect, contents_scale); |
+ |
+ *is_solid_color = analysis.is_solid_color; |
+ |
+ timer.NextLap(); |
+ } while (!timer.HasTimeLimitExpired()); |
+ base::TimeDelta duration = |
+ base::TimeDelta::FromMillisecondsD(timer.MsPerLap()); |
+ if (duration < *min_time) |
+ *min_time = duration; |
} |
- |
- bool IsSolidColor() const { return is_solid_color_; } |
- base::TimeDelta GetBestTime() const { return best_time_; } |
- |
- private: |
- ~BenchmarkRasterTask() override {} |
- |
- RasterSource* raster_source_; |
- gfx::Rect content_rect_; |
- float contents_scale_; |
- size_t repeat_count_; |
- bool is_solid_color_; |
- base::TimeDelta best_time_; |
-}; |
+} |
class FixedInvalidationPictureLayerTilingClient |
: public PictureLayerTilingClient { |
@@ -196,12 +173,6 @@ void RasterizeAndRecordBenchmarkImpl::RunOnLayer(PictureLayerImpl* layer) { |
return; |
} |
- TaskGraphRunner* task_graph_runner = TileTaskWorkerPool::GetTaskGraphRunner(); |
- DCHECK(task_graph_runner); |
- |
- if (!task_namespace_.IsValid()) |
- task_namespace_ = task_graph_runner->GetNamespaceToken(); |
- |
FixedInvalidationPictureLayerTilingClient client( |
layer, gfx::Rect(layer->content_bounds())); |
@@ -227,36 +198,17 @@ void RasterizeAndRecordBenchmarkImpl::RunOnLayer(PictureLayerImpl* layer) { |
gfx::Rect content_rect = (*it)->content_rect(); |
float contents_scale = (*it)->contents_scale(); |
- scoped_refptr<BenchmarkRasterTask> benchmark_raster_task( |
- new BenchmarkRasterTask(raster_source, |
- content_rect, |
- contents_scale, |
- rasterize_repeat_count_)); |
- |
- TaskGraph graph; |
- |
- graph.nodes.push_back( |
- TaskGraph::Node(benchmark_raster_task.get(), |
- TileTaskWorkerPool::kBenchmarkTaskPriority, 0u)); |
- |
- task_graph_runner->ScheduleTasks(task_namespace_, &graph); |
- task_graph_runner->WaitForTasksToFinishRunning(task_namespace_); |
- |
- Task::Vector completed_tasks; |
- task_graph_runner->CollectCompletedTasks(task_namespace_, &completed_tasks); |
- DCHECK_EQ(1u, completed_tasks.size()); |
- DCHECK_EQ(completed_tasks[0], benchmark_raster_task); |
+ base::TimeDelta min_time; |
+ bool is_solid_color = false; |
+ RunBenchmark(raster_source, content_rect, contents_scale, |
+ rasterize_repeat_count_, &min_time, &is_solid_color); |
int tile_size = content_rect.width() * content_rect.height(); |
- base::TimeDelta min_time = benchmark_raster_task->GetBestTime(); |
- bool is_solid_color = benchmark_raster_task->IsSolidColor(); |
- |
if (layer->contents_opaque()) |
rasterize_results_.pixels_rasterized_as_opaque += tile_size; |
- if (!is_solid_color) { |
+ if (!is_solid_color) |
rasterize_results_.pixels_rasterized_with_non_solid_color += tile_size; |
- } |
rasterize_results_.pixels_rasterized += tile_size; |
rasterize_results_.total_best_time += min_time; |