Index: cc/trees/layer_tree_host.cc |
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc |
index 48604f7e9760172cf3d48f6f48ed22696201e318..3134b3addfa73eba7ef7047773b52082edabef6d 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()); |
piman
2015/09/14 21:54:38
Would it be possible to add a test that verifies t
reveman
2015/09/15 20:38:35
Done. LayerTreeHostTestDestroyWhileInitializingOut
|
} |
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(); |
} |