Index: cc/trees/layer_tree_host.cc |
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc |
index 2572cd6df23fdc743abdefbf46b397f044c33c3b..860c2159d098777b50de852de21932558b7d8e9f 100644 |
--- a/cc/trees/layer_tree_host.cc |
+++ b/cc/trees/layer_tree_host.cc |
@@ -388,7 +388,9 @@ void LayerTreeHost::SetOutputSurface(scoped_ptr<OutputSurface> surface) { |
DCHECK(output_surface_lost_); |
DCHECK(surface); |
- proxy_->SetOutputSurface(surface.Pass()); |
+ DCHECK(!new_output_surface_); |
+ new_output_surface_ = surface.Pass(); |
+ proxy_->SetOutputSurface(new_output_surface_.get()); |
} |
void LayerTreeHost::RequestNewOutputSurface() { |
@@ -396,12 +398,20 @@ void LayerTreeHost::RequestNewOutputSurface() { |
} |
void LayerTreeHost::DidInitializeOutputSurface() { |
+ DCHECK(new_output_surface_); |
output_surface_lost_ = false; |
+ current_output_surface_ = new_output_surface_.Pass(); |
client_->DidInitializeOutputSurface(); |
} |
void LayerTreeHost::DidFailToInitializeOutputSurface() { |
DCHECK(output_surface_lost_); |
+ DCHECK(new_output_surface_); |
+ // Note: It is safe to drop all output surface references here as |
+ // LayerTreeHostImpl will not keep a pointer to either the old or |
+ // new output surface after failing to initialize the new one. |
+ current_output_surface_ = nullptr; |
+ new_output_surface_ = nullptr; |
client_->DidFailToInitializeOutputSurface(); |
} |