| Index: cc/layers/texture_layer.cc
|
| diff --git a/cc/layers/texture_layer.cc b/cc/layers/texture_layer.cc
|
| index 4d6df147ce07049e678b4706a18fc9bc2cb14c73..d0ab7d9bb8f5b5e0332ede5870f0dbcced70d4e7 100644
|
| --- a/cc/layers/texture_layer.cc
|
| +++ b/cc/layers/texture_layer.cc
|
| @@ -125,6 +125,9 @@ void TextureLayer::SetTextureId(unsigned id) {
|
| layer_tree_host()->AcquireLayerTextures();
|
| texture_id_ = id;
|
| SetNeedsCommit();
|
| + // The texture id needs to be removed from the active tree before the
|
| + // commit is called complete.
|
| + SetNextCommitWaitsForActivation();
|
| }
|
|
|
| void TextureLayer::SetTextureMailbox(const TextureMailbox& mailbox) {
|
| @@ -138,6 +141,9 @@ void TextureLayer::SetTextureMailbox(const TextureMailbox& mailbox) {
|
| holder_ref_.reset();
|
| needs_set_mailbox_ = true;
|
| SetNeedsCommit();
|
| + // The active frame needs to be replaced and the mailbox returned before the
|
| + // commit is called complete.
|
| + SetNextCommitWaitsForActivation();
|
| }
|
|
|
| void TextureLayer::WillModifyTexture() {
|
| @@ -161,16 +167,24 @@ void TextureLayer::SetLayerTreeHost(LayerTreeHost* host) {
|
| }
|
|
|
| if (layer_tree_host()) {
|
| - if (texture_id_)
|
| + if (texture_id_) {
|
| layer_tree_host()->AcquireLayerTextures();
|
| + // The texture id needs to be removed from the active tree before the
|
| + // commit is called complete.
|
| + SetNextCommitWaitsForActivation();
|
| + }
|
| if (rate_limit_context_ && client_)
|
| layer_tree_host()->StopRateLimiter(client_->Context3d());
|
| }
|
| // If we're removed from the tree, the TextureLayerImpl will be destroyed, and
|
| // we will need to set the mailbox again on a new TextureLayerImpl the next
|
| // time we push.
|
| - if (!host && uses_mailbox_ && holder_ref_)
|
| + if (!host && uses_mailbox_ && holder_ref_) {
|
| needs_set_mailbox_ = true;
|
| + // The active frame needs to be replaced and the mailbox returned before the
|
| + // commit is called complete.
|
| + SetNextCommitWaitsForActivation();
|
| + }
|
| Layer::SetLayerTreeHost(host);
|
| }
|
|
|
| @@ -196,6 +210,9 @@ bool TextureLayer::Update(ResourceUpdateQueue* queue,
|
| client_->Context3d()->getGraphicsResetStatusARB() != GL_NO_ERROR)
|
| texture_id_ = 0;
|
| updated = true;
|
| + // The texture id needs to be removed from the active tree before the
|
| + // commit is called complete.
|
| + SetNextCommitWaitsForActivation();
|
| }
|
| }
|
|
|
| @@ -241,13 +258,6 @@ Region TextureLayer::VisibleContentOpaqueRegion() const {
|
| return Region();
|
| }
|
|
|
| -bool TextureLayer::BlocksPendingCommit() const {
|
| - // Double-buffered texture layers need to be blocked until they can be made
|
| - // triple-buffered. Single-buffered layers already prevent draws, so
|
| - // can block too for simplicity.
|
| - return DrawsContent();
|
| -}
|
| -
|
| bool TextureLayer::CanClipSelf() const {
|
| return true;
|
| }
|
|
|