| Index: content/renderer/pepper/pepper_plugin_instance_impl.cc
|
| diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
|
| index cf7521b980d81209455ebec1449ae88a347cadd0..17925e9d2383f1e48448b015dbaa87315196fc16 100644
|
| --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
|
| +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
|
| @@ -781,58 +781,20 @@
|
| }
|
| }
|
|
|
| -void PepperPluginInstanceImpl::CommitTextureMailbox(
|
| - const cc::TextureMailbox& texture_mailbox) {
|
| - if (committed_texture_.IsValid() && !IsTextureInUse(committed_texture_)) {
|
| - bound_graphics_3d_->ReturnFrontBuffer(
|
| - committed_texture_.mailbox(), committed_texture_consumed_sync_token_,
|
| - false);
|
| - }
|
| -
|
| - committed_texture_ = texture_mailbox;
|
| - committed_texture_consumed_sync_token_ = gpu::SyncToken();
|
| -
|
| +void PepperPluginInstanceImpl::CommitBackingTexture() {
|
| if (!texture_layer_) {
|
| UpdateLayer(true);
|
| return;
|
| }
|
|
|
| - PassCommittedTextureToTextureLayer();
|
| + gpu::Mailbox mailbox;
|
| + gpu::SyncToken sync_token;
|
| + bound_graphics_3d_->GetBackingMailbox(&mailbox, &sync_token);
|
| + DCHECK(!mailbox.IsZero());
|
| + DCHECK(sync_token.HasData());
|
| + texture_layer_->SetTextureMailboxWithoutReleaseCallback(
|
| + cc::TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D));
|
| texture_layer_->SetNeedsDisplay();
|
| -}
|
| -
|
| -void PepperPluginInstanceImpl::PassCommittedTextureToTextureLayer() {
|
| - DCHECK(bound_graphics_3d_);
|
| -
|
| - if (!committed_texture_.IsValid())
|
| - return;
|
| -
|
| - std::unique_ptr<cc::SingleReleaseCallback> callback(
|
| - cc::SingleReleaseCallback::Create(base::Bind(
|
| - &PepperPluginInstanceImpl::FinishedConsumingCommittedTexture,
|
| - weak_factory_.GetWeakPtr(), committed_texture_)));
|
| -
|
| - IncrementTextureReferenceCount(committed_texture_);
|
| - texture_layer_->SetTextureMailbox(committed_texture_, std::move(callback));
|
| -}
|
| -
|
| -void PepperPluginInstanceImpl::FinishedConsumingCommittedTexture(
|
| - const cc::TextureMailbox& texture_mailbox,
|
| - const gpu::SyncToken& sync_token,
|
| - bool is_lost) {
|
| - bool removed = DecrementTextureReferenceCount(texture_mailbox);
|
| - bool is_committed_texture =
|
| - committed_texture_.mailbox() == texture_mailbox.mailbox();
|
| -
|
| - if (is_committed_texture && !is_lost) {
|
| - committed_texture_consumed_sync_token_ = sync_token;
|
| - return;
|
| - }
|
| -
|
| - if (removed && !is_committed_texture) {
|
| - bound_graphics_3d_->ReturnFrontBuffer(texture_mailbox.mailbox(), sync_token,
|
| - is_lost);
|
| - }
|
| }
|
|
|
| void PepperPluginInstanceImpl::InstanceCrashed() {
|
| @@ -2055,7 +2017,12 @@
|
| if (!container_)
|
| return;
|
|
|
| - bool want_3d_layer = !!bound_graphics_3d_.get();
|
| + gpu::Mailbox mailbox;
|
| + gpu::SyncToken sync_token;
|
| + if (bound_graphics_3d_.get()) {
|
| + bound_graphics_3d_->GetBackingMailbox(&mailbox, &sync_token);
|
| + }
|
| + bool want_3d_layer = !mailbox.IsZero() && sync_token.HasData();
|
| bool want_2d_layer = !!bound_graphics_2d_platform_;
|
| bool want_texture_layer = want_3d_layer || want_2d_layer;
|
| bool want_compositor_layer = !!bound_compositor_;
|
| @@ -2094,8 +2061,8 @@
|
| DCHECK(bound_graphics_3d_.get());
|
| texture_layer_ = cc::TextureLayer::CreateForMailbox(NULL);
|
| opaque = bound_graphics_3d_->IsOpaque();
|
| -
|
| - PassCommittedTextureToTextureLayer();
|
| + texture_layer_->SetTextureMailboxWithoutReleaseCallback(
|
| + cc::TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D));
|
| } else {
|
| DCHECK(bound_graphics_2d_platform_);
|
| texture_layer_ = cc::TextureLayer::CreateForMailbox(this);
|
| @@ -3386,47 +3353,4 @@
|
| rect->set_height(rect->height() / viewport_to_dip_scale_);
|
| }
|
|
|
| -void PepperPluginInstanceImpl::IncrementTextureReferenceCount(
|
| - const cc::TextureMailbox& mailbox) {
|
| - auto it =
|
| - std::find_if(texture_ref_counts_.begin(), texture_ref_counts_.end(),
|
| - [&mailbox](const TextureMailboxRefCount& ref_count) {
|
| - return ref_count.first.mailbox() == mailbox.mailbox();
|
| - });
|
| - if (it == texture_ref_counts_.end()) {
|
| - texture_ref_counts_.push_back(std::make_pair(mailbox, 1));
|
| - return;
|
| - }
|
| -
|
| - it->second++;
|
| -}
|
| -
|
| -bool PepperPluginInstanceImpl::DecrementTextureReferenceCount(
|
| - const cc::TextureMailbox& mailbox) {
|
| - auto it =
|
| - std::find_if(texture_ref_counts_.begin(), texture_ref_counts_.end(),
|
| - [&mailbox](const TextureMailboxRefCount& ref_count) {
|
| - return ref_count.first.mailbox() == mailbox.mailbox();
|
| - });
|
| - DCHECK(it != texture_ref_counts_.end());
|
| -
|
| - if (it->second == 1) {
|
| - texture_ref_counts_.erase(it);
|
| - return true;
|
| - }
|
| -
|
| - it->second--;
|
| - return false;
|
| -}
|
| -
|
| -bool PepperPluginInstanceImpl::IsTextureInUse(
|
| - const cc::TextureMailbox& mailbox) const {
|
| - auto it =
|
| - std::find_if(texture_ref_counts_.begin(), texture_ref_counts_.end(),
|
| - [&mailbox](const TextureMailboxRefCount& ref_count) {
|
| - return ref_count.first.mailbox() == mailbox.mailbox();
|
| - });
|
| - return it != texture_ref_counts_.end();
|
| -}
|
| -
|
| } // namespace content
|
|
|