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

Unified Diff: content/renderer/pepper/pepper_graphics_2d_host.cc

Issue 600953003: Cache cc::SharedBitmaps used by PepperGraphics2DHost to upload (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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: content/renderer/pepper/pepper_graphics_2d_host.cc
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.cc b/content/renderer/pepper/pepper_graphics_2d_host.cc
index 3bc2296ce2f3d561802156d514cbaa159382cd34..790ac761421a2e4a7539e1b9bbf528676aaebe29 100644
--- a/content/renderer/pepper/pepper_graphics_2d_host.cc
+++ b/content/renderer/pepper/pepper_graphics_2d_host.cc
@@ -307,6 +307,7 @@ bool PepperGraphics2DHost::BindToInstance(
new_instance->InvalidateRect(gfx::Rect());
}
+ cached_bitmap_.reset();
texture_mailbox_modified_ = true;
bound_instance_ = new_instance;
@@ -408,6 +409,10 @@ gfx::Size PepperGraphics2DHost::Size() const {
return gfx::Size(image_data_->width(), image_data_->height());
}
+void PepperGraphics2DHost::ClearCache() {
+ cached_bitmap_.reset();
+}
+
int32_t PepperGraphics2DHost::OnHostMsgPaintImageData(
ppapi::host::HostMessageContext* context,
const ppapi::HostResource& image_data,
@@ -547,9 +552,17 @@ int32_t PepperGraphics2DHost::OnHostMsgReadImageData(
return ReadImageData(image, &top_left) ? PP_OK : PP_ERROR_FAILED;
}
-void ReleaseCallback(scoped_ptr<cc::SharedBitmap> bitmap,
- uint32 sync_point,
- bool lost_resource) {}
+void PepperGraphics2DHost::ReleaseCallback(scoped_ptr<cc::SharedBitmap> bitmap,
+ const gfx::Size& bitmap_size,
+ uint32 sync_point,
+ bool lost_resource) {
+ cached_bitmap_.reset();
+ // Only keep around a cached bitmap if the plugin is currently drawing (has
+ // need_flush_ack_ set).
+ if (need_flush_ack_ && bound_instance_)
+ cached_bitmap_ = bitmap.Pass();
+ cached_bitmap_size_ = bitmap_size;
+}
bool PepperGraphics2DHost::PrepareTextureMailbox(
cc::TextureMailbox* mailbox,
@@ -558,10 +571,18 @@ bool PepperGraphics2DHost::PrepareTextureMailbox(
return false;
// TODO(jbauman): Send image_data_ through mailbox to avoid copy.
gfx::Size pixel_image_size(image_data_->width(), image_data_->height());
- scoped_ptr<cc::SharedBitmap> shared_bitmap =
- RenderThreadImpl::current()
- ->shared_bitmap_manager()
- ->AllocateSharedBitmap(pixel_image_size);
+ scoped_ptr<cc::SharedBitmap> shared_bitmap;
+ if (cached_bitmap_) {
+ if (cached_bitmap_size_ == pixel_image_size)
+ shared_bitmap = cached_bitmap_.Pass();
+ else
+ cached_bitmap_.reset();
+ }
+ if (!shared_bitmap) {
+ shared_bitmap = RenderThreadImpl::current()
+ ->shared_bitmap_manager()
+ ->AllocateSharedBitmap(pixel_image_size);
+ }
if (!shared_bitmap)
return false;
void* src = image_data_->Map();
@@ -572,7 +593,10 @@ bool PepperGraphics2DHost::PrepareTextureMailbox(
*mailbox = cc::TextureMailbox(shared_bitmap->memory(), pixel_image_size);
*release_callback = cc::SingleReleaseCallback::Create(
- base::Bind(&ReleaseCallback, base::Passed(&shared_bitmap)));
+ base::Bind(&PepperGraphics2DHost::ReleaseCallback,
+ this->AsWeakPtr(),
+ base::Passed(&shared_bitmap),
+ pixel_image_size));
texture_mailbox_modified_ = false;
return true;
}
« no previous file with comments | « content/renderer/pepper/pepper_graphics_2d_host.h ('k') | content/renderer/pepper/pepper_plugin_instance_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698