| 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/output/context_provider.h" | 9 #include "cc/output/context_provider.h" |
| 10 #include "cc/output/output_surface.h" | 10 #include "cc/output/output_surface.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 void SingleThreadProxy::SetLayerTreeHostClientReady() { | 93 void SingleThreadProxy::SetLayerTreeHostClientReady() { |
| 94 // Scheduling is controlled by the embedder in the single thread case, so | 94 // Scheduling is controlled by the embedder in the single thread case, so |
| 95 // nothing to do. | 95 // nothing to do. |
| 96 } | 96 } |
| 97 | 97 |
| 98 void SingleThreadProxy::SetVisible(bool visible) { | 98 void SingleThreadProxy::SetVisible(bool visible) { |
| 99 DebugScopedSetImplThread impl(this); | 99 DebugScopedSetImplThread impl(this); |
| 100 layer_tree_host_impl_->SetVisible(visible); | 100 layer_tree_host_impl_->SetVisible(visible); |
| 101 | 101 |
| 102 // Changing visibility could change ShouldComposite(). | 102 // Changing visibility could change ShouldComposite(). |
| 103 layer_tree_host_impl_->UpdateBackgroundAnimateTicking(!ShouldComposite()); | 103 UpdateBackgroundAnimateTicking(); |
| 104 } | 104 } |
| 105 | 105 |
| 106 void SingleThreadProxy::CreateAndInitializeOutputSurface() { | 106 void SingleThreadProxy::CreateAndInitializeOutputSurface() { |
| 107 TRACE_EVENT0( | 107 TRACE_EVENT0( |
| 108 "cc", "SingleThreadProxy::CreateAndInitializeOutputSurface"); | 108 "cc", "SingleThreadProxy::CreateAndInitializeOutputSurface"); |
| 109 DCHECK(Proxy::IsMainThread()); | 109 DCHECK(Proxy::IsMainThread()); |
| 110 | 110 |
| 111 scoped_ptr<OutputSurface> output_surface = first_output_surface_.Pass(); | 111 scoped_ptr<OutputSurface> output_surface = first_output_surface_.Pass(); |
| 112 if (!output_surface) | 112 if (!output_surface) |
| 113 output_surface = layer_tree_host_->CreateOutputSurface(); | 113 output_surface = layer_tree_host_->CreateOutputSurface(); |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 | 258 |
| 259 layer_tree_host_->DeleteContentsTexturesOnImplThread( | 259 layer_tree_host_->DeleteContentsTexturesOnImplThread( |
| 260 layer_tree_host_impl_->resource_provider()); | 260 layer_tree_host_impl_->resource_provider()); |
| 261 layer_tree_host_impl_.reset(); | 261 layer_tree_host_impl_.reset(); |
| 262 } | 262 } |
| 263 layer_tree_host_ = NULL; | 263 layer_tree_host_ = NULL; |
| 264 } | 264 } |
| 265 | 265 |
| 266 void SingleThreadProxy::OnCanDrawStateChanged(bool can_draw) { | 266 void SingleThreadProxy::OnCanDrawStateChanged(bool can_draw) { |
| 267 DCHECK(Proxy::IsImplThread()); | 267 DCHECK(Proxy::IsImplThread()); |
| 268 layer_tree_host_impl_->UpdateBackgroundAnimateTicking(!ShouldComposite()); | 268 UpdateBackgroundAnimateTicking(); |
| 269 } | 269 } |
| 270 | 270 |
| 271 void SingleThreadProxy::NotifyReadyToActivate() { | 271 void SingleThreadProxy::NotifyReadyToActivate() { |
| 272 // Thread-only feature. | 272 // Thread-only feature. |
| 273 NOTREACHED(); | 273 NOTREACHED(); |
| 274 } | 274 } |
| 275 | 275 |
| 276 void SingleThreadProxy::SetNeedsRedrawOnImplThread() { | 276 void SingleThreadProxy::SetNeedsRedrawOnImplThread() { |
| 277 layer_tree_host_->ScheduleComposite(); | 277 layer_tree_host_->ScheduleComposite(); |
| 278 } | 278 } |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 layer_tree_host_->DidBeginFrame(); | 420 layer_tree_host_->DidBeginFrame(); |
| 421 return result; | 421 return result; |
| 422 } | 422 } |
| 423 | 423 |
| 424 bool SingleThreadProxy::ShouldComposite() const { | 424 bool SingleThreadProxy::ShouldComposite() const { |
| 425 DCHECK(Proxy::IsImplThread()); | 425 DCHECK(Proxy::IsImplThread()); |
| 426 return layer_tree_host_impl_->visible() && | 426 return layer_tree_host_impl_->visible() && |
| 427 layer_tree_host_impl_->CanDraw(); | 427 layer_tree_host_impl_->CanDraw(); |
| 428 } | 428 } |
| 429 | 429 |
| 430 void SingleThreadProxy::UpdateBackgroundAnimateTicking() { |
| 431 DCHECK(Proxy::IsImplThread()); |
| 432 layer_tree_host_impl_->UpdateBackgroundAnimateTicking( |
| 433 !ShouldComposite() && layer_tree_host_impl_->active_tree()->root_layer()); |
| 434 } |
| 435 |
| 430 bool SingleThreadProxy::DoComposite( | 436 bool SingleThreadProxy::DoComposite( |
| 431 scoped_refptr<cc::ContextProvider> offscreen_context_provider, | 437 scoped_refptr<cc::ContextProvider> offscreen_context_provider, |
| 432 base::TimeTicks frame_begin_time, | 438 base::TimeTicks frame_begin_time, |
| 433 gfx::Rect device_viewport_damage_rect, | 439 gfx::Rect device_viewport_damage_rect, |
| 434 bool for_readback, | 440 bool for_readback, |
| 435 LayerTreeHostImpl::FrameData* frame) { | 441 LayerTreeHostImpl::FrameData* frame) { |
| 436 DCHECK(!layer_tree_host_->output_surface_lost()); | 442 DCHECK(!layer_tree_host_->output_surface_lost()); |
| 437 | 443 |
| 438 bool lost_output_surface = false; | 444 bool lost_output_surface = false; |
| 439 { | 445 { |
| 440 DebugScopedSetImplThread impl(this); | 446 DebugScopedSetImplThread impl(this); |
| 441 base::AutoReset<bool> mark_inside(&inside_draw_, true); | 447 base::AutoReset<bool> mark_inside(&inside_draw_, true); |
| 442 | 448 |
| 443 layer_tree_host_impl_->SetOffscreenContextProvider( | 449 layer_tree_host_impl_->SetOffscreenContextProvider( |
| 444 offscreen_context_provider); | 450 offscreen_context_provider); |
| 445 | 451 |
| 446 bool can_do_readback = layer_tree_host_impl_->renderer()->CanReadPixels(); | 452 bool can_do_readback = layer_tree_host_impl_->renderer()->CanReadPixels(); |
| 447 | 453 |
| 448 // We guard PrepareToDraw() with CanDraw() because it always returns a valid | 454 // We guard PrepareToDraw() with CanDraw() because it always returns a valid |
| 449 // frame, so can only be used when such a frame is possible. Since | 455 // frame, so can only be used when such a frame is possible. Since |
| 450 // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on | 456 // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on |
| 451 // CanDraw() as well. | 457 // CanDraw() as well. |
| 452 if (!ShouldComposite() || (for_readback && !can_do_readback)) { | 458 if (!ShouldComposite() || (for_readback && !can_do_readback)) { |
| 453 layer_tree_host_impl_->UpdateBackgroundAnimateTicking(true); | 459 UpdateBackgroundAnimateTicking(); |
| 454 return false; | 460 return false; |
| 455 } | 461 } |
| 456 | 462 |
| 457 layer_tree_host_impl_->Animate( | 463 layer_tree_host_impl_->Animate( |
| 458 layer_tree_host_impl_->CurrentFrameTimeTicks(), | 464 layer_tree_host_impl_->CurrentFrameTimeTicks(), |
| 459 layer_tree_host_impl_->CurrentFrameTime()); | 465 layer_tree_host_impl_->CurrentFrameTime()); |
| 460 layer_tree_host_impl_->UpdateBackgroundAnimateTicking(false); | 466 UpdateBackgroundAnimateTicking(); |
| 461 | 467 |
| 462 layer_tree_host_impl_->PrepareToDraw(frame, device_viewport_damage_rect); | 468 layer_tree_host_impl_->PrepareToDraw(frame, device_viewport_damage_rect); |
| 463 layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); | 469 layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); |
| 464 layer_tree_host_impl_->DidDrawAllLayers(*frame); | 470 layer_tree_host_impl_->DidDrawAllLayers(*frame); |
| 465 lost_output_surface = layer_tree_host_impl_->IsContextLost(); | 471 lost_output_surface = layer_tree_host_impl_->IsContextLost(); |
| 466 | 472 |
| 467 bool start_ready_animations = true; | 473 bool start_ready_animations = true; |
| 468 layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); | 474 layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); |
| 469 | 475 |
| 470 layer_tree_host_impl_->ResetCurrentFrameTimeForNextFrame(); | 476 layer_tree_host_impl_->ResetCurrentFrameTimeForNextFrame(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 485 void SingleThreadProxy::DidSwapFrame() { | 491 void SingleThreadProxy::DidSwapFrame() { |
| 486 if (next_frame_is_newly_committed_frame_) { | 492 if (next_frame_is_newly_committed_frame_) { |
| 487 next_frame_is_newly_committed_frame_ = false; | 493 next_frame_is_newly_committed_frame_ = false; |
| 488 layer_tree_host_->DidCommitAndDrawFrame(); | 494 layer_tree_host_->DidCommitAndDrawFrame(); |
| 489 } | 495 } |
| 490 } | 496 } |
| 491 | 497 |
| 492 bool SingleThreadProxy::CommitPendingForTesting() { return false; } | 498 bool SingleThreadProxy::CommitPendingForTesting() { return false; } |
| 493 | 499 |
| 494 } // namespace cc | 500 } // namespace cc |
| OLD | NEW |