Chromium Code Reviews| 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(); |
| } |