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_) |
brianderson
2013/07/10 21:58:04
I avoid swapping if we don't have an output surfac
|
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()); |