OLD | NEW |
---|---|
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/trees/single_thread_proxy.h" | 5 #include "cc/trees/single_thread_proxy.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "cc/debug/benchmark_instrumentation.h" | 9 #include "cc/debug/benchmark_instrumentation.h" |
10 #include "cc/output/context_provider.h" | 10 #include "cc/output/context_provider.h" |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
307 | 307 |
308 void SingleThreadProxy::UpdateRendererCapabilitiesOnImplThread() { | 308 void SingleThreadProxy::UpdateRendererCapabilitiesOnImplThread() { |
309 DCHECK(IsImplThread()); | 309 DCHECK(IsImplThread()); |
310 renderer_capabilities_for_main_thread_ = | 310 renderer_capabilities_for_main_thread_ = |
311 layer_tree_host_impl_->GetRendererCapabilities().MainThreadCapabilities(); | 311 layer_tree_host_impl_->GetRendererCapabilities().MainThreadCapabilities(); |
312 } | 312 } |
313 | 313 |
314 void SingleThreadProxy::DidLoseOutputSurfaceOnImplThread() { | 314 void SingleThreadProxy::DidLoseOutputSurfaceOnImplThread() { |
315 TRACE_EVENT0("cc", "SingleThreadProxy::DidLoseOutputSurfaceOnImplThread"); | 315 TRACE_EVENT0("cc", "SingleThreadProxy::DidLoseOutputSurfaceOnImplThread"); |
316 // Cause a commit so we can notice the lost context. | 316 // Cause a commit so we can notice the lost context. |
317 SetNeedsCommitOnImplThread(); | 317 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
| |
318 client_->DidAbortSwapBuffers(); | 318 client_->DidAbortSwapBuffers(); |
319 // Tell the LayerTreeHost, but not right away. | |
320 Proxy::MainThreadTaskRunner()->PostTask( | |
321 FROM_HERE, | |
322 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.
| |
323 base::Unretained(layer_tree_host_))); | |
319 } | 324 } |
320 | 325 |
321 void SingleThreadProxy::DidSwapBuffersOnImplThread() { | 326 void SingleThreadProxy::DidSwapBuffersOnImplThread() { |
322 client_->DidPostSwapBuffers(); | 327 client_->DidPostSwapBuffers(); |
323 } | 328 } |
324 | 329 |
325 void SingleThreadProxy::DidSwapBuffersCompleteOnImplThread() { | 330 void SingleThreadProxy::DidSwapBuffersCompleteOnImplThread() { |
326 TRACE_EVENT0("cc", "SingleThreadProxy::DidSwapBuffersCompleteOnImplThread"); | 331 TRACE_EVENT0("cc", "SingleThreadProxy::DidSwapBuffersCompleteOnImplThread"); |
327 client_->DidCompleteSwapBuffers(); | 332 client_->DidCompleteSwapBuffers(); |
328 } | 333 } |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
426 // CanDraw() as well. | 431 // CanDraw() as well. |
427 if (!ShouldComposite()) { | 432 if (!ShouldComposite()) { |
428 UpdateBackgroundAnimateTicking(); | 433 UpdateBackgroundAnimateTicking(); |
429 return false; | 434 return false; |
430 } | 435 } |
431 | 436 |
432 layer_tree_host_impl_->Animate( | 437 layer_tree_host_impl_->Animate( |
433 layer_tree_host_impl_->CurrentFrameTimeTicks()); | 438 layer_tree_host_impl_->CurrentFrameTimeTicks()); |
434 UpdateBackgroundAnimateTicking(); | 439 UpdateBackgroundAnimateTicking(); |
435 | 440 |
436 if (!layer_tree_host_impl_->IsContextLost()) { | 441 DrawResult draw_result = layer_tree_host_impl_->PrepareToDraw(frame); |
437 layer_tree_host_impl_->PrepareToDraw(frame); | 442 if (draw_result == DRAW_ABORTED_CONTEXT_LOST) { |
443 lost_output_surface = true; | |
444 } else { | |
438 layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); | 445 layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); |
439 layer_tree_host_impl_->DidDrawAllLayers(*frame); | 446 layer_tree_host_impl_->DidDrawAllLayers(*frame); |
440 } | 447 } |
441 lost_output_surface = layer_tree_host_impl_->IsContextLost(); | |
442 | 448 |
443 bool start_ready_animations = true; | 449 bool start_ready_animations = true; |
444 layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); | 450 layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); |
445 | 451 |
446 layer_tree_host_impl_->ResetCurrentFrameTimeForNextFrame(); | 452 layer_tree_host_impl_->ResetCurrentFrameTimeForNextFrame(); |
447 } | 453 } |
448 | 454 |
449 if (lost_output_surface) { | 455 if (lost_output_surface) { |
450 layer_tree_host_->DidLoseOutputSurface(); | |
451 return false; | 456 return false; |
452 } | 457 } |
453 | 458 |
454 return true; | 459 return true; |
455 } | 460 } |
456 | 461 |
457 void SingleThreadProxy::DidSwapFrame() { | 462 void SingleThreadProxy::DidSwapFrame() { |
458 if (next_frame_is_newly_committed_frame_) { | 463 if (next_frame_is_newly_committed_frame_) { |
459 next_frame_is_newly_committed_frame_ = false; | 464 next_frame_is_newly_committed_frame_ = false; |
460 layer_tree_host_->DidCommitAndDrawFrame(); | 465 layer_tree_host_->DidCommitAndDrawFrame(); |
461 } | 466 } |
462 } | 467 } |
463 | 468 |
464 bool SingleThreadProxy::MainFrameWillHappenForTesting() { | 469 bool SingleThreadProxy::MainFrameWillHappenForTesting() { |
465 return false; | 470 return false; |
466 } | 471 } |
467 | 472 |
468 } // namespace cc | 473 } // namespace cc |
OLD | NEW |