| Index: cc/output/software_renderer.cc
|
| diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc
|
| index 23f574bb22c7f63695660039ecf8d765ab6bf086..5495b891352cd8b8597b97dc0eea60e31e16dac2 100644
|
| --- a/cc/output/software_renderer.cc
|
| +++ b/cc/output/software_renderer.cc
|
| @@ -35,6 +35,38 @@ namespace cc {
|
|
|
| namespace {
|
|
|
| +class OnDemandRasterTaskImpl : public internal::Task {
|
| + public:
|
| + OnDemandRasterTaskImpl(PicturePileImpl* picture_pile,
|
| + SkCanvas* canvas,
|
| + gfx::Rect content_rect,
|
| + float contents_scale)
|
| + : picture_pile_(picture_pile),
|
| + canvas_(canvas),
|
| + content_rect_(content_rect),
|
| + contents_scale_(contents_scale) {
|
| + DCHECK(picture_pile_);
|
| + DCHECK(canvas_);
|
| + }
|
| +
|
| + // Overridden from internal::Task:
|
| + virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
|
| + TRACE_EVENT0("cc", "OnDemandRasterTaskImpl::RunOnWorkerThread");
|
| + picture_pile_->RasterDirect(canvas_, content_rect_, contents_scale_, NULL);
|
| + }
|
| +
|
| + protected:
|
| + virtual ~OnDemandRasterTaskImpl() {}
|
| +
|
| + private:
|
| + PicturePileImpl* picture_pile_;
|
| + SkCanvas* canvas_;
|
| + const gfx::Rect content_rect_;
|
| + const float contents_scale_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(OnDemandRasterTaskImpl);
|
| +};
|
| +
|
| static inline bool IsScalarNearlyInteger(SkScalar scalar) {
|
| return SkScalarNearlyZero(scalar - SkScalarRoundToScalar(scalar));
|
| }
|
| @@ -349,8 +381,14 @@ void SoftwareRenderer::DrawPictureQuad(const DrawingFrame* frame,
|
|
|
| TRACE_EVENT0("cc",
|
| "SoftwareRenderer::DrawPictureQuad");
|
| - quad->picture_pile->RasterDirect(
|
| - current_canvas_, quad->content_rect, quad->contents_scale, NULL);
|
| +
|
| + // Create and run on-demand raster task for tile.
|
| + scoped_refptr<internal::Task> on_demand_raster_task(
|
| + new OnDemandRasterTaskImpl(quad->picture_pile,
|
| + current_canvas_,
|
| + quad->content_rect,
|
| + quad->contents_scale));
|
| + RunOnDemandRasterTask(on_demand_raster_task.get());
|
|
|
| current_canvas_->setDrawFilter(NULL);
|
| }
|
|
|