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

Unified Diff: cc/resources/resource_provider.cc

Issue 454843002: cc: Do bitmap conversion for RasterBuffer in the worker thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 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) {

Powered by Google App Engine
This is Rietveld 408576698