Index: cc/resources/tile_manager.cc |
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
index 452d9b45ccfa5e65bdc444bdb3c3f36cc616f429..f3b15d97eac1f8a536cbd88d37d11a8c050d4802 100644 |
--- a/cc/resources/tile_manager.cc |
+++ b/cc/resources/tile_manager.cc |
@@ -59,14 +59,14 @@ class RasterTaskImpl : public RasterTask { |
analyze_picture_(analyze_picture), |
rendering_stats_(rendering_stats), |
reply_(reply), |
- canvas_(NULL) {} |
+ raster_buffer_(NULL) {} |
// Overridden from Task: |
virtual void RunOnWorkerThread() OVERRIDE { |
TRACE_EVENT0("cc", "RasterizerTaskImpl::RunOnWorkerThread"); |
DCHECK(picture_pile_); |
- if (canvas_) { |
+ if (raster_buffer_) { |
AnalyzeAndRaster(picture_pile_->GetCloneForDrawingOnThread( |
RasterWorkerPool::GetPictureCloneIndexForCurrentThread())); |
} |
@@ -74,25 +74,25 @@ class RasterTaskImpl : public RasterTask { |
// Overridden from RasterizerTask: |
virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE { |
- DCHECK(!canvas_); |
- canvas_ = client->AcquireCanvasForRaster(this); |
+ DCHECK(!raster_buffer_); |
+ raster_buffer_ = client->AcquireBufferForRaster(this); |
} |
virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE { |
- canvas_ = NULL; |
- client->ReleaseCanvasForRaster(this); |
+ raster_buffer_ = NULL; |
+ client->ReleaseBufferForRaster(this); |
} |
virtual void RunReplyOnOriginThread() OVERRIDE { |
- DCHECK(!canvas_); |
+ DCHECK(!raster_buffer_); |
reply_.Run(analysis_, !HasFinishedRunning()); |
} |
protected: |
- virtual ~RasterTaskImpl() { DCHECK(!canvas_); } |
+ virtual ~RasterTaskImpl() { DCHECK(!raster_buffer_); } |
private: |
void AnalyzeAndRaster(PicturePileImpl* picture_pile) { |
DCHECK(picture_pile); |
- DCHECK(canvas_); |
+ DCHECK(raster_buffer_); |
if (analyze_picture_) { |
Analyze(picture_pile); |
@@ -130,6 +130,9 @@ class RasterTaskImpl : public RasterTask { |
devtools_instrumentation::ScopedLayerTask layer_task( |
devtools_instrumentation::kRasterTask, layer_id_); |
+ SkCanvas* canvas = raster_buffer_->AcquireSkCanvas(); |
+ DCHECK(canvas); |
+ |
skia::RefPtr<SkDrawFilter> draw_filter; |
switch (raster_mode_) { |
case LOW_QUALITY_RASTER_MODE: |
@@ -141,7 +144,7 @@ class RasterTaskImpl : public RasterTask { |
default: |
NOTREACHED(); |
} |
- canvas_->setDrawFilter(draw_filter.get()); |
+ canvas->setDrawFilter(draw_filter.get()); |
base::TimeDelta prev_rasterize_time = |
rendering_stats_->impl_thread_rendering_stats().rasterize_time; |
@@ -153,8 +156,7 @@ class RasterTaskImpl : public RasterTask { |
RenderingStatsInstrumentation* stats = |
tile_resolution_ == HIGH_RESOLUTION ? rendering_stats_ : NULL; |
DCHECK(picture_pile); |
- picture_pile->RasterToBitmap( |
- canvas_, content_rect_, contents_scale_, stats); |
+ picture_pile->RasterToBitmap(canvas, content_rect_, contents_scale_, stats); |
if (rendering_stats_->record_rendering_stats()) { |
base::TimeDelta current_rasterize_time = |
@@ -166,6 +168,8 @@ class RasterTaskImpl : public RasterTask { |
100000, |
100); |
} |
+ |
+ raster_buffer_->ReleaseSkCanvas(); |
} |
PicturePileImpl::Analysis analysis_; |
@@ -180,7 +184,7 @@ class RasterTaskImpl : public RasterTask { |
bool analyze_picture_; |
RenderingStatsInstrumentation* rendering_stats_; |
const base::Callback<void(const PicturePileImpl::Analysis&, bool)> reply_; |
- SkCanvas* canvas_; |
+ RasterBuffer* raster_buffer_; |
DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); |
}; |