Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index ff0652465d9047447fb376bd097988db9828acdb..901c49a07261b03222b2b9d60b041837a009555a 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -401,7 +401,6 @@ ResourceProvider::RasterBuffer::RasterBuffer( |
ResourceProvider* resource_provider) |
: resource_(resource), |
resource_provider_(resource_provider), |
- locked_canvas_(NULL), |
canvas_save_count_(0) { |
DCHECK(resource_); |
DCHECK(resource_provider_); |
@@ -409,7 +408,7 @@ ResourceProvider::RasterBuffer::RasterBuffer( |
ResourceProvider::RasterBuffer::~RasterBuffer() {} |
-SkCanvas* ResourceProvider::RasterBuffer::LockForWrite() { |
+void ResourceProvider::RasterBuffer::LockForWrite() { |
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), |
"ResourceProvider::RasterBuffer::LockForWrite"); |
@@ -417,7 +416,6 @@ SkCanvas* ResourceProvider::RasterBuffer::LockForWrite() { |
locked_canvas_ = DoLockForWrite(); |
canvas_save_count_ = locked_canvas_ ? locked_canvas_->save() : 0; |
- return locked_canvas_; |
} |
bool ResourceProvider::RasterBuffer::UnlockForWrite() { |
@@ -527,21 +525,27 @@ SkCanvas* ResourceProvider::BitmapRasterBuffer::DoLockForWrite() { |
return raster_canvas_.get(); |
} |
-bool ResourceProvider::BitmapRasterBuffer::DoUnlockForWrite() { |
- raster_canvas_.clear(); |
+void ResourceProvider::BitmapRasterBuffer::Flush() { |
+ // Note that this function is called from a worker thread. |
// getGenerationID returns a non-zero, unique value corresponding to the |
// pixels in bitmap. Hence, a change since DoLockForWrite was called means the |
// bitmap has changed. |
bool raster_bitmap_changed = |
raster_bitmap_generation_id_ != raster_bitmap_.getGenerationID(); |
- |
if (raster_bitmap_changed) { |
SkColorType buffer_colorType = |
ResourceFormatToSkColorType(resource()->format); |
if (mapped_buffer_ && (buffer_colorType != raster_bitmap_.colorType())) |
CopyBitmap(raster_bitmap_, mapped_buffer_, buffer_colorType); |
} |
+} |
+ |
+bool ResourceProvider::BitmapRasterBuffer::DoUnlockForWrite() { |
+ raster_canvas_.clear(); |
+ |
+ bool raster_bitmap_changed = |
+ raster_bitmap_generation_id_ != raster_bitmap_.getGenerationID(); |
raster_bitmap_.reset(); |
UnmapBuffer(); |
@@ -1727,7 +1731,7 @@ void ResourceProvider::DeleteAndReturnUnusedResourcesToChild( |
} |
} |
-SkCanvas* ResourceProvider::MapGpuRasterBuffer(ResourceId id) { |
+RasterCanvas* ResourceProvider::MapGpuRasterBuffer(ResourceId id) { |
// Resource needs to be locked for write since GpuRasterBuffer writes |
// directly to it. |
LockForWrite(id); |
@@ -1736,7 +1740,8 @@ SkCanvas* ResourceProvider::MapGpuRasterBuffer(ResourceId id) { |
resource->gpu_raster_buffer.reset( |
new GpuRasterBuffer(resource, this, use_distance_field_text_)); |
} |
- return resource->gpu_raster_buffer->LockForWrite(); |
+ resource->gpu_raster_buffer->LockForWrite(); |
+ return resource->gpu_raster_buffer.get(); |
} |
void ResourceProvider::UnmapGpuRasterBuffer(ResourceId id) { |
@@ -1746,12 +1751,13 @@ void ResourceProvider::UnmapGpuRasterBuffer(ResourceId id) { |
UnlockForWrite(id); |
} |
-SkCanvas* ResourceProvider::MapImageRasterBuffer(ResourceId id) { |
+RasterCanvas* ResourceProvider::MapImageRasterBuffer(ResourceId id) { |
Resource* resource = GetResource(id); |
AcquireImage(resource); |
if (!resource->image_raster_buffer.get()) |
resource->image_raster_buffer.reset(new ImageRasterBuffer(resource, this)); |
- return resource->image_raster_buffer->LockForWrite(); |
+ resource->image_raster_buffer->LockForWrite(); |
+ return resource->image_raster_buffer.get(); |
} |
bool ResourceProvider::UnmapImageRasterBuffer(ResourceId id) { |
@@ -1772,10 +1778,11 @@ void ResourceProvider::ReleasePixelRasterBuffer(ResourceId id) { |
ReleasePixelBuffer(resource); |
} |
-SkCanvas* ResourceProvider::MapPixelRasterBuffer(ResourceId id) { |
+RasterCanvas* ResourceProvider::MapPixelRasterBuffer(ResourceId id) { |
Resource* resource = GetResource(id); |
DCHECK(resource->pixel_raster_buffer.get()); |
- return resource->pixel_raster_buffer->LockForWrite(); |
+ resource->pixel_raster_buffer->LockForWrite(); |
+ return resource->pixel_raster_buffer.get(); |
} |
bool ResourceProvider::UnmapPixelRasterBuffer(ResourceId id) { |