| 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 =
|
|
|