Index: ui/compositor/layer.cc |
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc |
index a96060982423ef4bd71f7d603f6a37f1eb4846a0..2da468a5b48ca5f69c8ebe98ead61cfa42ba8b11 100644 |
--- a/ui/compositor/layer.cc |
+++ b/ui/compositor/layer.cc |
@@ -476,30 +476,21 @@ void Layer::SwitchCCLayerForTest() { |
} |
void Layer::SetExternalTexture(Texture* texture) { |
+ DCHECK(texture); |
+ |
// Hold a ref to the old |Texture| until we have updated all |
// compositor references to the texture id that it holds. |
scoped_refptr<ui::Texture> old_texture = texture_; |
DCHECK_EQ(type_, LAYER_TEXTURED); |
DCHECK(!solid_color_layer_.get()); |
- bool has_texture = !!texture; |
- layer_updated_externally_ = has_texture; |
+ layer_updated_externally_ = true; |
texture_ = texture; |
- if (!!texture_layer_.get() != has_texture) { |
- // Switch to a different type of layer. |
- if (has_texture) { |
- scoped_refptr<cc::TextureLayer> new_layer = |
- cc::TextureLayer::Create(this); |
- new_layer->SetFlipped(texture_->flipped()); |
- SwitchToLayer(new_layer); |
- texture_layer_ = new_layer; |
- } else { |
- scoped_refptr<cc::ContentLayer> new_layer = |
- cc::ContentLayer::Create(this); |
- SwitchToLayer(new_layer); |
- content_layer_ = new_layer; |
- mailbox_ = cc::TextureMailbox(); |
- } |
+ if (!texture_layer_.get()) { |
+ scoped_refptr<cc::TextureLayer> new_layer = cc::TextureLayer::Create(this); |
+ new_layer->SetFlipped(texture_->flipped()); |
+ SwitchToLayer(new_layer); |
+ texture_layer_ = new_layer; |
} |
RecomputeDrawsContentAndUVRect(); |
} |
@@ -533,25 +524,18 @@ cc::TextureMailbox Layer::GetTextureMailbox(float* scale_factor) { |
void Layer::SetDelegatedFrame(scoped_ptr<cc::DelegatedFrameData> frame, |
gfx::Size frame_size_in_dip) { |
+ DCHECK(frame && !frame->render_pass_list.empty()); |
+ |
DCHECK_EQ(type_, LAYER_TEXTURED); |
- bool has_frame = frame.get() && !frame->render_pass_list.empty(); |
- layer_updated_externally_ = has_frame; |
+ layer_updated_externally_ = true; |
delegated_frame_size_in_dip_ = frame_size_in_dip; |
- if (!!delegated_renderer_layer_.get() != has_frame) { |
- if (has_frame) { |
- scoped_refptr<cc::DelegatedRendererLayer> new_layer = |
- cc::DelegatedRendererLayer::Create(NULL); |
- SwitchToLayer(new_layer); |
- delegated_renderer_layer_ = new_layer; |
- } else { |
- scoped_refptr<cc::ContentLayer> new_layer = |
- cc::ContentLayer::Create(this); |
- SwitchToLayer(new_layer); |
- content_layer_ = new_layer; |
- } |
+ if (!delegated_renderer_layer_.get()) { |
+ scoped_refptr<cc::DelegatedRendererLayer> new_layer = |
+ cc::DelegatedRendererLayer::Create(NULL); |
+ SwitchToLayer(new_layer); |
+ delegated_renderer_layer_ = new_layer; |
} |
- if (has_frame) |
- delegated_renderer_layer_->SetFrameData(frame.Pass()); |
+ delegated_renderer_layer_->SetFrameData(frame.Pass()); |
RecomputeDrawsContentAndUVRect(); |
} |
@@ -561,10 +545,23 @@ void Layer::TakeUnusedResourcesForChildCompositor( |
delegated_renderer_layer_->TakeUnusedResourcesForChildCompositor(list); |
} |
-void Layer::SetColor(SkColor color) { |
- GetAnimator()->SetColor(color); |
+void Layer::SetShowPaintedContent() { |
+ if (content_layer_.get()) |
+ return; |
+ |
+ scoped_refptr<cc::ContentLayer> new_layer = cc::ContentLayer::Create(this); |
+ SwitchToLayer(new_layer); |
+ content_layer_ = new_layer; |
+ |
+ layer_updated_externally_ = false; |
+ mailbox_ = cc::TextureMailbox(); |
+ texture_ = NULL; |
+ |
+ RecomputeDrawsContentAndUVRect(); |
} |
+void Layer::SetColor(SkColor color) { GetAnimator()->SetColor(color); } |
+ |
bool Layer::SchedulePaint(const gfx::Rect& invalid_rect) { |
if (type_ == LAYER_SOLID_COLOR || (!delegate_ && !texture_.get())) |
return false; |