Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: cc/resources/resource_provider.cc

Issue 170783007: Re-land: cc: Cleanup internal::WorkerPoolTaskClient interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index bd2b5a883e534d68850a53765060d1b3b4210593..e34909e81144de4761bc55bd3af50b7786a499fe 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -389,28 +389,31 @@ SkCanvas* ResourceProvider::RasterBuffer::LockForWrite() {
return locked_canvas_;
}
-void ResourceProvider::RasterBuffer::UnlockForWrite() {
+bool ResourceProvider::RasterBuffer::UnlockForWrite() {
if (locked_canvas_) {
locked_canvas_->restoreToCount(canvas_save_count_);
locked_canvas_ = NULL;
}
- DoUnlockForWrite();
+ return DoUnlockForWrite();
}
ResourceProvider::DirectRasterBuffer::DirectRasterBuffer(
const Resource* resource,
ResourceProvider* resource_provider)
- : RasterBuffer(resource, resource_provider) {}
+ : RasterBuffer(resource, resource_provider), surface_generation_id_(0u) {}
ResourceProvider::DirectRasterBuffer::~DirectRasterBuffer() {}
SkCanvas* ResourceProvider::DirectRasterBuffer::DoLockForWrite() {
if (!surface_)
surface_ = CreateSurface();
+ surface_generation_id_ = surface_ ? surface_->generationID() : 0u;
return surface_ ? surface_->getCanvas() : NULL;
}
-void ResourceProvider::DirectRasterBuffer::DoUnlockForWrite() {}
+bool ResourceProvider::DirectRasterBuffer::DoUnlockForWrite() {
+ return surface_ ? surface_generation_id_ != surface_->generationID() : false;
+}
skia::RefPtr<SkSurface> ResourceProvider::DirectRasterBuffer::CreateSurface() {
skia::RefPtr<SkSurface> surface;
@@ -453,7 +456,9 @@ skia::RefPtr<SkSurface> ResourceProvider::DirectRasterBuffer::CreateSurface() {
ResourceProvider::BitmapRasterBuffer::BitmapRasterBuffer(
const Resource* resource,
ResourceProvider* resource_provider)
- : RasterBuffer(resource, resource_provider), mapped_buffer_(NULL) {}
+ : RasterBuffer(resource, resource_provider),
+ mapped_buffer_(NULL),
+ raster_bitmap_generation_id_(0u) {}
ResourceProvider::BitmapRasterBuffer::~BitmapRasterBuffer() {}
@@ -492,19 +497,26 @@ SkCanvas* ResourceProvider::BitmapRasterBuffer::DoLockForWrite() {
skia::RefPtr<SkBitmapDevice> device =
skia::AdoptRef(new SkBitmapDevice(raster_bitmap_));
raster_canvas_ = skia::AdoptRef(new SkCanvas(device.get()));
+ raster_bitmap_generation_id_ = raster_bitmap_.getGenerationID();
return raster_canvas_.get();
}
-void ResourceProvider::BitmapRasterBuffer::DoUnlockForWrite() {
+bool ResourceProvider::BitmapRasterBuffer::DoUnlockForWrite() {
raster_canvas_.clear();
- SkBitmap::Config buffer_config = SkBitmapConfig(resource()->format);
- if (mapped_buffer_ && (buffer_config != raster_bitmap_.config()))
- CopyBitmap(raster_bitmap_, mapped_buffer_, buffer_config);
+ bool raster_bitmap_changed =
+ raster_bitmap_generation_id_ != raster_bitmap_.getGenerationID();
vmpstr 2014/02/19 00:49:31 Is this like a good check? According to skia heade
reveman 2014/02/19 01:41:13 Done.
+
+ if (raster_bitmap_changed) {
+ SkBitmap::Config buffer_config = SkBitmapConfig(resource()->format);
+ if (mapped_buffer_ && (buffer_config != raster_bitmap_.config()))
+ CopyBitmap(raster_bitmap_, mapped_buffer_, buffer_config);
+ }
raster_bitmap_.reset();
UnmapBuffer();
mapped_buffer_ = NULL;
+ return raster_bitmap_changed;
}
ResourceProvider::ImageRasterBuffer::ImageRasterBuffer(
@@ -1737,10 +1749,10 @@ SkCanvas* ResourceProvider::MapPixelRasterBuffer(ResourceId id) {
return resource->pixel_raster_buffer->LockForWrite();
}
-void ResourceProvider::UnmapPixelRasterBuffer(ResourceId id) {
+bool ResourceProvider::UnmapPixelRasterBuffer(ResourceId id) {
Resource* resource = GetResource(id);
DCHECK(resource->pixel_raster_buffer.get());
- resource->pixel_raster_buffer->UnlockForWrite();
+ return resource->pixel_raster_buffer->UnlockForWrite();
}
void ResourceProvider::AcquirePixelBuffer(Resource* resource) {

Powered by Google App Engine
This is Rietveld 408576698