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