diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-17 01:24:16 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-17 01:24:16 +0000 |
commit | 9260757f9dd8de119450e6cc351dda15df17cf8d (patch) | |
tree | 1aa791088cd401d42e714c1b102635e7e4caf480 /webkit | |
parent | 0ceda8a5374cf90e636134835d41c3194c52b0bc (diff) | |
download | chromium_src-9260757f9dd8de119450e6cc351dda15df17cf8d.zip chromium_src-9260757f9dd8de119450e6cc351dda15df17cf8d.tar.gz chromium_src-9260757f9dd8de119450e6cc351dda15df17cf8d.tar.bz2 |
cc: Move TextureMailbox::ReleaseCallback to SingleReleaseCallback.
This moves the release callback out of the TextureMailbox so that we
can use it for other resource types than just texture mailboxes.
While doing this, we make a SingleReleaseCallback class that is
held in a scoped_ptr. This class DCHECKs that the callback is run
before it is destroyed, and ensures clear ownership semantics as
you must Pass() the callback around.
No change in behaviour, covered by existing tests.
R=piman
BUG=263069
Review URL: https://chromiumcodereview.appspot.com/23648014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@223500 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc | 28 | ||||
-rw-r--r-- | webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h | 12 |
2 files changed, 25 insertions, 15 deletions
diff --git a/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc b/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc index 36b4994..209195f 100644 --- a/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc +++ b/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc @@ -6,6 +6,8 @@ #include "cc/layers/texture_layer.h" #include "cc/resources/resource_update_queue.h" +#include "cc/resources/single_release_callback.h" +#include "cc/resources/texture_mailbox.h" #include "third_party/WebKit/public/platform/WebExternalTextureLayerClient.h" #include "third_party/WebKit/public/platform/WebExternalTextureMailbox.h" #include "third_party/WebKit/public/platform/WebFloatRect.h" @@ -36,7 +38,8 @@ WebKit::WebLayer* WebExternalTextureLayerImpl::layer() { return layer_.get(); } void WebExternalTextureLayerImpl::clearTexture() { TextureLayer *layer = static_cast<TextureLayer*>(layer_->layer()); layer->WillModifyTexture(); - layer->SetTextureMailbox(cc::TextureMailbox()); + layer->SetTextureMailbox(cc::TextureMailbox(), + scoped_ptr<cc::SingleReleaseCallback>()); } void WebExternalTextureLayerImpl::setOpaque(bool opaque) { @@ -69,6 +72,7 @@ WebKit::WebGraphicsContext3D* WebExternalTextureLayerImpl::Context3d() { bool WebExternalTextureLayerImpl::PrepareTextureMailbox( cc::TextureMailbox* mailbox, + scoped_ptr<cc::SingleReleaseCallback>* release_callback, bool use_shared_memory) { WebKit::WebExternalTextureMailbox client_mailbox; WebExternalBitmapImpl* bitmap = NULL; @@ -82,17 +86,17 @@ bool WebExternalTextureLayerImpl::PrepareTextureMailbox( } gpu::Mailbox name; name.SetName(client_mailbox.name); - cc::TextureMailbox::ReleaseCallback callback = - base::Bind(&WebExternalTextureLayerImpl::DidReleaseMailbox, - this->AsWeakPtr(), - client_mailbox, - bitmap); - if (bitmap) { - *mailbox = - cc::TextureMailbox(bitmap->shared_memory(), bitmap->size(), callback); - } else { - *mailbox = cc::TextureMailbox(name, callback, client_mailbox.syncPoint); - } + scoped_ptr<cc::SingleReleaseCallback> callback = + cc::SingleReleaseCallback::Create(base::Bind( + &WebExternalTextureLayerImpl::DidReleaseMailbox, + this->AsWeakPtr(), + client_mailbox, + bitmap)); + if (bitmap) + *mailbox = cc::TextureMailbox(bitmap->shared_memory(), bitmap->size()); + else + *mailbox = cc::TextureMailbox(name, client_mailbox.syncPoint); + *release_callback = callback.Pass(); return true; } diff --git a/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h b/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h index 3fb798a..5992d1a 100644 --- a/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h +++ b/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h @@ -9,10 +9,14 @@ #include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" #include "cc/layers/texture_layer_client.h" -#include "cc/resources/texture_mailbox.h" #include "third_party/WebKit/public/platform/WebExternalTextureLayer.h" #include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h" +namespace cc { +class SingleReleaseCallback; +class TextureMailbox; +} + namespace WebKit { struct WebFloatRect; struct WebExternalTextureMailbox; @@ -43,8 +47,10 @@ class WebExternalTextureLayerImpl // TextureLayerClient implementation. virtual unsigned PrepareTexture() OVERRIDE; virtual WebKit::WebGraphicsContext3D* Context3d() OVERRIDE; - virtual bool PrepareTextureMailbox(cc::TextureMailbox* mailbox, - bool use_shared_memory) OVERRIDE; + virtual bool PrepareTextureMailbox( + cc::TextureMailbox* mailbox, + scoped_ptr<cc::SingleReleaseCallback>* release_callback, + bool use_shared_memory) OVERRIDE; private: static void DidReleaseMailbox( |