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

Unified Diff: cc/layers/texture_layer_impl.cc

Issue 23648014: cc: Move TextureMailbox::ReleaseCallback to SingleReleaseCallback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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: cc/layers/texture_layer_impl.cc
diff --git a/cc/layers/texture_layer_impl.cc b/cc/layers/texture_layer_impl.cc
index 851bf9a145b180431f604261739349eeb7dddfc6..bebf37157d1ec78106194dd5f71016628ba25d0f 100644
--- a/cc/layers/texture_layer_impl.cc
+++ b/cc/layers/texture_layer_impl.cc
@@ -4,6 +4,8 @@
#include "cc/layers/texture_layer_impl.h"
+#include <vector>
+
#include "base/strings/stringprintf.h"
#include "cc/layers/quad_sink.h"
#include "cc/output/renderer.h"
@@ -36,10 +38,14 @@ TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* tree_impl,
TextureLayerImpl::~TextureLayerImpl() { FreeTextureMailbox(); }
-void TextureLayerImpl::SetTextureMailbox(const TextureMailbox& mailbox) {
+void TextureLayerImpl::SetTextureMailbox(
+ const TextureMailbox& mailbox,
+ ScopedReleaseCallback release_callback) {
DCHECK(uses_mailbox_);
+ DCHECK_EQ(mailbox.IsValid(), !release_callback.IsEmpty());
FreeTextureMailbox();
texture_mailbox_ = mailbox;
+ release_callback_ = release_callback.Pass();
own_mailbox_ = true;
valid_texture_copy_ = false;
}
@@ -60,7 +66,8 @@ void TextureLayerImpl::PushPropertiesTo(LayerImpl* layer) {
texture_layer->set_vertex_opacity(vertex_opacity_);
texture_layer->set_premultiplied_alpha(premultiplied_alpha_);
if (uses_mailbox_ && own_mailbox_) {
- texture_layer->SetTextureMailbox(texture_mailbox_);
+ texture_layer->SetTextureMailbox(texture_mailbox_,
+ release_callback_.Pass());
own_mailbox_ = false;
} else {
texture_layer->set_texture_id(texture_id_);
@@ -80,7 +87,8 @@ bool TextureLayerImpl::WillDraw(DrawMode draw_mode,
texture_mailbox_.IsSharedMemory())) {
external_texture_resource_ =
resource_provider->CreateResourceFromTextureMailbox(
- texture_mailbox_);
+ texture_mailbox_,
+ release_callback_.Pass());
DCHECK(external_texture_resource_);
texture_copy_.reset();
valid_texture_copy_ = false;
@@ -229,7 +237,8 @@ void TextureLayerImpl::FreeTextureMailbox() {
return;
if (own_mailbox_) {
DCHECK(!external_texture_resource_);
- texture_mailbox_.RunReleaseCallback(texture_mailbox_.sync_point(), false);
+ if (!release_callback_.IsEmpty())
+ release_callback_.RunAndReset(texture_mailbox_.sync_point(), false);
} else if (external_texture_resource_) {
DCHECK(!own_mailbox_);
ResourceProvider* resource_provider =

Powered by Google App Engine
This is Rietveld 408576698