| 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) {
|
|
|