Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/resources/raster_worker_pool.h" | 5 #include "cc/resources/raster_worker_pool.h" |
| 6 | 6 |
| 7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "cc/debug/devtools_instrumentation.h" | 10 #include "cc/debug/devtools_instrumentation.h" |
| 11 #include "cc/debug/traced_value.h" | 11 #include "cc/debug/traced_value.h" |
| 12 #include "cc/resources/picture_pile_impl.h" | 12 #include "cc/resources/picture_pile_impl.h" |
| 13 #include "skia/ext/lazy_pixel_ref.h" | 13 #include "skia/ext/lazy_pixel_ref.h" |
| 14 #include "skia/ext/paint_simplifier.h" | 14 #include "skia/ext/paint_simplifier.h" |
| 15 | 15 |
| 16 namespace cc { | 16 namespace cc { |
| 17 | 17 |
| 18 namespace { | 18 namespace { |
| 19 | 19 |
| 20 // Flag to indicate whether we should try and detect that | |
| 21 // a tile is of solid color. | |
| 22 const bool kUseColorEstimator = true; | |
|
piman
2013/07/01 20:14:45
nit: do we even need this?
vmpstr
2013/07/01 20:22:18
I think it's still useful to disable the color est
| |
| 23 | |
| 20 scoped_ptr<base::Value> RasterModeAsValue(RasterMode raster_mode) { | 24 scoped_ptr<base::Value> RasterModeAsValue(RasterMode raster_mode) { |
| 21 switch (raster_mode) { | 25 switch (raster_mode) { |
| 22 case HIGH_QUALITY_NO_LCD_RASTER_MODE: | 26 case HIGH_QUALITY_NO_LCD_RASTER_MODE: |
| 23 return scoped_ptr<base::Value>( | 27 return scoped_ptr<base::Value>( |
| 24 base::Value::CreateStringValue("HIGH_QUALITY_NO_LCD_RASTER_MODE")); | 28 base::Value::CreateStringValue("HIGH_QUALITY_NO_LCD_RASTER_MODE")); |
| 25 case HIGH_QUALITY_RASTER_MODE: | 29 case HIGH_QUALITY_RASTER_MODE: |
| 26 return scoped_ptr<base::Value>( | 30 return scoped_ptr<base::Value>( |
| 27 base::Value::CreateStringValue("HIGH_QUALITY_RASTER_MODE")); | 31 base::Value::CreateStringValue("HIGH_QUALITY_RASTER_MODE")); |
| 28 case LOW_QUALITY_RASTER_MODE: | 32 case LOW_QUALITY_RASTER_MODE: |
| 29 return scoped_ptr<base::Value>( | 33 return scoped_ptr<base::Value>( |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 48 } | 52 } |
| 49 }; | 53 }; |
| 50 | 54 |
| 51 class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { | 55 class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
| 52 public: | 56 public: |
| 53 RasterWorkerPoolTaskImpl(const Resource* resource, | 57 RasterWorkerPoolTaskImpl(const Resource* resource, |
| 54 PicturePileImpl* picture_pile, | 58 PicturePileImpl* picture_pile, |
| 55 gfx::Rect content_rect, | 59 gfx::Rect content_rect, |
| 56 float contents_scale, | 60 float contents_scale, |
| 57 RasterMode raster_mode, | 61 RasterMode raster_mode, |
| 58 bool use_color_estimator, | |
| 59 const RasterTaskMetadata& metadata, | 62 const RasterTaskMetadata& metadata, |
| 60 RenderingStatsInstrumentation* rendering_stats, | 63 RenderingStatsInstrumentation* rendering_stats, |
| 61 const RasterWorkerPool::RasterTask::Reply& reply, | 64 const RasterWorkerPool::RasterTask::Reply& reply, |
| 62 TaskVector* dependencies) | 65 TaskVector* dependencies) |
| 63 : internal::RasterWorkerPoolTask(resource, dependencies), | 66 : internal::RasterWorkerPoolTask(resource, dependencies), |
| 64 picture_pile_(picture_pile), | 67 picture_pile_(picture_pile), |
| 65 content_rect_(content_rect), | 68 content_rect_(content_rect), |
| 66 contents_scale_(contents_scale), | 69 contents_scale_(contents_scale), |
| 67 raster_mode_(raster_mode), | 70 raster_mode_(raster_mode), |
| 68 use_color_estimator_(use_color_estimator), | |
| 69 metadata_(metadata), | 71 metadata_(metadata), |
| 70 rendering_stats_(rendering_stats), | 72 rendering_stats_(rendering_stats), |
| 71 reply_(reply) {} | 73 reply_(reply) {} |
| 72 | 74 |
| 73 void RunAnalysisOnThread(unsigned thread_index) { | 75 void RunAnalysisOnThread(unsigned thread_index) { |
| 74 TRACE_EVENT1("cc", | 76 TRACE_EVENT1("cc", |
| 75 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread", | 77 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread", |
| 76 "metadata", | 78 "metadata", |
| 77 TracedValue::FromValue(metadata_.AsValue().release())); | 79 TracedValue::FromValue(metadata_.AsValue().release())); |
| 78 | 80 |
| 79 DCHECK(picture_pile_.get()); | 81 DCHECK(picture_pile_.get()); |
| 80 DCHECK(rendering_stats_); | 82 DCHECK(rendering_stats_); |
| 81 | 83 |
| 82 PicturePileImpl* picture_clone = | 84 PicturePileImpl* picture_clone = |
| 83 picture_pile_->GetCloneForDrawingOnThread(thread_index); | 85 picture_pile_->GetCloneForDrawingOnThread(thread_index); |
| 84 | 86 |
| 85 DCHECK(picture_clone); | 87 DCHECK(picture_clone); |
| 86 | 88 |
| 87 base::TimeTicks start_time = rendering_stats_->StartRecording(); | 89 base::TimeTicks start_time = rendering_stats_->StartRecording(); |
| 88 picture_clone->AnalyzeInRect(content_rect_, contents_scale_, &analysis_); | 90 picture_clone->AnalyzeInRect(content_rect_, contents_scale_, &analysis_); |
| 89 base::TimeDelta duration = rendering_stats_->EndRecording(start_time); | 91 base::TimeDelta duration = rendering_stats_->EndRecording(start_time); |
| 90 | 92 |
| 91 // Record the solid color prediction. | 93 // Record the solid color prediction. |
| 92 UMA_HISTOGRAM_BOOLEAN("Renderer4.SolidColorTilesAnalyzed", | 94 UMA_HISTOGRAM_BOOLEAN("Renderer4.SolidColorTilesAnalyzed", |
| 93 analysis_.is_solid_color); | 95 analysis_.is_solid_color); |
| 94 rendering_stats_->AddTileAnalysisResult(duration, | 96 rendering_stats_->AddTileAnalysisResult(duration, |
| 95 analysis_.is_solid_color); | 97 analysis_.is_solid_color); |
| 96 | 98 |
| 97 // Clear the flag if we're not using the estimator. | 99 // Clear the flag if we're not using the estimator. |
| 98 analysis_.is_solid_color &= use_color_estimator_; | 100 analysis_.is_solid_color &= kUseColorEstimator; |
| 99 } | 101 } |
| 100 | 102 |
| 101 bool RunRasterOnThread(SkDevice* device, unsigned thread_index) { | 103 bool RunRasterOnThread(SkDevice* device, unsigned thread_index) { |
| 102 TRACE_EVENT2( | 104 TRACE_EVENT2( |
| 103 "cc", | 105 "cc", |
| 104 "RasterWorkerPoolTaskImpl::RunRasterOnThread", | 106 "RasterWorkerPoolTaskImpl::RunRasterOnThread", |
| 105 "metadata", | 107 "metadata", |
| 106 TracedValue::FromValue(metadata_.AsValue().release()), | 108 TracedValue::FromValue(metadata_.AsValue().release()), |
| 107 "raster_mode", | 109 "raster_mode", |
| 108 TracedValue::FromValue(RasterModeAsValue(raster_mode_).release())); | 110 TracedValue::FromValue(RasterModeAsValue(raster_mode_).release())); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 173 | 175 |
| 174 protected: | 176 protected: |
| 175 virtual ~RasterWorkerPoolTaskImpl() {} | 177 virtual ~RasterWorkerPoolTaskImpl() {} |
| 176 | 178 |
| 177 private: | 179 private: |
| 178 PicturePileImpl::Analysis analysis_; | 180 PicturePileImpl::Analysis analysis_; |
| 179 scoped_refptr<PicturePileImpl> picture_pile_; | 181 scoped_refptr<PicturePileImpl> picture_pile_; |
| 180 gfx::Rect content_rect_; | 182 gfx::Rect content_rect_; |
| 181 float contents_scale_; | 183 float contents_scale_; |
| 182 RasterMode raster_mode_; | 184 RasterMode raster_mode_; |
| 183 bool use_color_estimator_; | |
| 184 RasterTaskMetadata metadata_; | 185 RasterTaskMetadata metadata_; |
| 185 RenderingStatsInstrumentation* rendering_stats_; | 186 RenderingStatsInstrumentation* rendering_stats_; |
| 186 const RasterWorkerPool::RasterTask::Reply reply_; | 187 const RasterWorkerPool::RasterTask::Reply reply_; |
| 187 | 188 |
| 188 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); | 189 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); |
| 189 }; | 190 }; |
| 190 | 191 |
| 191 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { | 192 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
| 192 public: | 193 public: |
| 193 ImageDecodeWorkerPoolTaskImpl(skia::LazyPixelRef* pixel_ref, | 194 ImageDecodeWorkerPoolTaskImpl(skia::LazyPixelRef* pixel_ref, |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 412 graph_.set(raster_task, raster_node.Pass()); | 413 graph_.set(raster_task, raster_node.Pass()); |
| 413 } | 414 } |
| 414 | 415 |
| 415 // static | 416 // static |
| 416 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( | 417 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( |
| 417 const Resource* resource, | 418 const Resource* resource, |
| 418 PicturePileImpl* picture_pile, | 419 PicturePileImpl* picture_pile, |
| 419 gfx::Rect content_rect, | 420 gfx::Rect content_rect, |
| 420 float contents_scale, | 421 float contents_scale, |
| 421 RasterMode raster_mode, | 422 RasterMode raster_mode, |
| 422 bool use_color_estimator, | |
| 423 const RasterTaskMetadata& metadata, | 423 const RasterTaskMetadata& metadata, |
| 424 RenderingStatsInstrumentation* rendering_stats, | 424 RenderingStatsInstrumentation* rendering_stats, |
| 425 const RasterTask::Reply& reply, | 425 const RasterTask::Reply& reply, |
| 426 Task::Set* dependencies) { | 426 Task::Set* dependencies) { |
| 427 return RasterTask(new RasterWorkerPoolTaskImpl(resource, | 427 return RasterTask(new RasterWorkerPoolTaskImpl(resource, |
| 428 picture_pile, | 428 picture_pile, |
| 429 content_rect, | 429 content_rect, |
| 430 contents_scale, | 430 contents_scale, |
| 431 raster_mode, | 431 raster_mode, |
| 432 use_color_estimator, | |
| 433 metadata, | 432 metadata, |
| 434 rendering_stats, | 433 rendering_stats, |
| 435 reply, | 434 reply, |
| 436 &dependencies->tasks_)); | 435 &dependencies->tasks_)); |
| 437 } | 436 } |
| 438 | 437 |
| 439 // static | 438 // static |
| 440 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask( | 439 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask( |
| 441 skia::LazyPixelRef* pixel_ref, | 440 skia::LazyPixelRef* pixel_ref, |
| 442 int layer_id, | 441 int layer_id, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 517 TRACE_EVENT1("cc", "RasterWorkerPool::OnRasterFinished", | 516 TRACE_EVENT1("cc", "RasterWorkerPool::OnRasterFinished", |
| 518 "schedule_raster_tasks_count", schedule_raster_tasks_count); | 517 "schedule_raster_tasks_count", schedule_raster_tasks_count); |
| 519 DCHECK_GE(schedule_raster_tasks_count_, schedule_raster_tasks_count); | 518 DCHECK_GE(schedule_raster_tasks_count_, schedule_raster_tasks_count); |
| 520 // Call OnRasterTasksFinished() when we've finished running all raster | 519 // Call OnRasterTasksFinished() when we've finished running all raster |
| 521 // tasks needed since last time SetRasterTaskGraph() was called. | 520 // tasks needed since last time SetRasterTaskGraph() was called. |
| 522 if (schedule_raster_tasks_count_ == schedule_raster_tasks_count) | 521 if (schedule_raster_tasks_count_ == schedule_raster_tasks_count) |
| 523 OnRasterTasksFinished(); | 522 OnRasterTasksFinished(); |
| 524 } | 523 } |
| 525 | 524 |
| 526 } // namespace cc | 525 } // namespace cc |
| OLD | NEW |