| Index: cc/trees/layer_tree_host_impl.cc
|
| diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
|
| index 282471fdc7bcdc85a1506fe4f55bed5fc595c331..a5bc6011bf5b43f89804b034313fffca6507596c 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -106,7 +106,6 @@ class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient {
|
| new DebugScopedSetImplThread(layer_tree_host_impl_->proxy()));
|
| }
|
|
|
| - // TODO(enne): This should probably happen post-animate.
|
| if (layer_tree_host_impl_->pending_tree()) {
|
| layer_tree_host_impl_->ActivatePendingTreeIfNeeded();
|
|
|
| @@ -169,6 +168,7 @@ LayerTreeHostImpl::LayerTreeHostImpl(
|
| RenderingStatsInstrumentation* rendering_stats_instrumentation)
|
| : client_(client),
|
| proxy_(proxy),
|
| + output_surface_lost_(true),
|
| input_handler_client_(NULL),
|
| did_lock_scrolling_layer_(false),
|
| should_bubble_scrolls_(false),
|
| @@ -1271,7 +1271,7 @@ const RendererCapabilities& LayerTreeHostImpl::GetRendererCapabilities() const {
|
| }
|
|
|
| bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) {
|
| - if (frame.has_no_damage)
|
| + if (frame.has_no_damage || output_surface_lost_)
|
| return false;
|
| renderer_->SwapBuffers();
|
| active_tree_->ClearLatencyInfo();
|
| @@ -1312,6 +1312,7 @@ void LayerTreeHostImpl::DidLoseOutputSurface() {
|
| // TODO(jamesr): The renderer_ check is needed to make some of the
|
| // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or
|
| // important) in production. We should adjust the test to not need this.
|
| + output_surface_lost_ = true;
|
| if (renderer_)
|
| client_->DidLoseOutputSurfaceOnImplThread();
|
| }
|
| @@ -1426,6 +1427,8 @@ void LayerTreeHostImpl::ActivatePendingTree() {
|
| root_layer_scroll_offset_delegate_);
|
| active_tree_->DidBecomeActive();
|
|
|
| + client_->DidActivatePendingTree();
|
| +
|
| // Reduce wasted memory now that unlinked resources are guaranteed not
|
| // to be used.
|
| client_->ReduceWastedContentsTextureMemoryOnImplThread();
|
| @@ -1442,8 +1445,6 @@ void LayerTreeHostImpl::ActivatePendingTree() {
|
| stats.total_paint_time + stats.total_record_time +
|
| stats.total_rasterize_time_for_now_bins_on_pending_tree);
|
| }
|
| -
|
| - client_->DidActivatePendingTree();
|
| }
|
|
|
| void LayerTreeHostImpl::SetVisible(bool visible) {
|
| @@ -1536,6 +1537,7 @@ bool LayerTreeHostImpl::InitializeRenderer(
|
| tile_manager_.reset();
|
| resource_provider_.reset();
|
| output_surface_.reset();
|
| + output_surface_lost_ = true;
|
|
|
| if (!output_surface->BindToClient(this))
|
| return false;
|
| @@ -1584,6 +1586,7 @@ bool LayerTreeHostImpl::InitializeRenderer(
|
|
|
| resource_provider_ = resource_provider.Pass();
|
| output_surface_ = output_surface.Pass();
|
| + output_surface_lost_ = false;
|
|
|
| client_->OnCanDrawStateChanged(CanDraw());
|
|
|
|
|