summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-17 01:24:16 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-17 01:24:16 +0000
commit9260757f9dd8de119450e6cc351dda15df17cf8d (patch)
tree1aa791088cd401d42e714c1b102635e7e4caf480 /webkit
parent0ceda8a5374cf90e636134835d41c3194c52b0bc (diff)
downloadchromium_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.cc28
-rw-r--r--webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h12
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(