Index: cc/trees/single_thread_proxy.cc |
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
index f4007330011329151558931a8b3955779ab44ab3..1adb2706897e99d67ea81edd139531fc380b834f 100644 |
--- a/cc/trees/single_thread_proxy.cc |
+++ b/cc/trees/single_thread_proxy.cc |
@@ -316,6 +316,11 @@ void SingleThreadProxy::DidLoseOutputSurfaceOnImplThread() { |
// Cause a commit so we can notice the lost context. |
SetNeedsCommitOnImplThread(); |
danakj
2014/08/15 17:45:15
Should this move to STP::DidLoseOutputSurface (ie
dneto
2014/08/15 18:17:17
Actually we might just remove this, since LTH::Did
danakj
2014/08/15 18:18:10
Oh good SGTM
|
client_->DidAbortSwapBuffers(); |
+ // Tell the LayerTreeHost, but not right away. |
+ Proxy::MainThreadTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&LayerTreeHost::DidLoseOutputSurface, |
danakj
2014/08/15 17:45:15
Can you add a SingleThreadProxy::DidLoseOutputSurf
dneto
2014/08/15 17:58:20
Good point. Yes, I can do this.
|
+ base::Unretained(layer_tree_host_))); |
} |
void SingleThreadProxy::DidSwapBuffersOnImplThread() { |
@@ -433,12 +438,13 @@ bool SingleThreadProxy::DoComposite(base::TimeTicks frame_begin_time, |
layer_tree_host_impl_->CurrentFrameTimeTicks()); |
UpdateBackgroundAnimateTicking(); |
- if (!layer_tree_host_impl_->IsContextLost()) { |
- layer_tree_host_impl_->PrepareToDraw(frame); |
+ DrawResult draw_result = layer_tree_host_impl_->PrepareToDraw(frame); |
+ if (draw_result == DRAW_ABORTED_CONTEXT_LOST) { |
+ lost_output_surface = true; |
+ } else { |
layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); |
layer_tree_host_impl_->DidDrawAllLayers(*frame); |
} |
- lost_output_surface = layer_tree_host_impl_->IsContextLost(); |
bool start_ready_animations = true; |
layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); |
@@ -447,7 +453,6 @@ bool SingleThreadProxy::DoComposite(base::TimeTicks frame_begin_time, |
} |
if (lost_output_surface) { |
- layer_tree_host_->DidLoseOutputSurface(); |
return false; |
} |