| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ui/compositor/compositor.h" | 5 #include "ui/compositor/compositor.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <deque> | 8 #include <deque> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 void CompositorLock::CancelLock() { | 352 void CompositorLock::CancelLock() { |
| 353 if (!compositor_) | 353 if (!compositor_) |
| 354 return; | 354 return; |
| 355 compositor_->UnlockCompositor(); | 355 compositor_->UnlockCompositor(); |
| 356 compositor_ = NULL; | 356 compositor_ = NULL; |
| 357 } | 357 } |
| 358 | 358 |
| 359 // static | 359 // static |
| 360 void DrawWaiterForTest::Wait(Compositor* compositor) { | 360 void DrawWaiterForTest::Wait(Compositor* compositor) { |
| 361 DrawWaiterForTest waiter; | 361 DrawWaiterForTest waiter; |
| 362 waiter.wait_for_commit_ = false; |
| 362 waiter.WaitImpl(compositor); | 363 waiter.WaitImpl(compositor); |
| 363 } | 364 } |
| 364 | 365 |
| 366 // static |
| 367 void DrawWaiterForTest::WaitForCommit(Compositor* compositor) { |
| 368 DrawWaiterForTest waiter; |
| 369 waiter.wait_for_commit_ = true; |
| 370 waiter.WaitImpl(compositor); |
| 371 } |
| 372 |
| 365 DrawWaiterForTest::DrawWaiterForTest() { | 373 DrawWaiterForTest::DrawWaiterForTest() { |
| 366 } | 374 } |
| 367 | 375 |
| 368 DrawWaiterForTest::~DrawWaiterForTest() { | 376 DrawWaiterForTest::~DrawWaiterForTest() { |
| 369 } | 377 } |
| 370 | 378 |
| 371 void DrawWaiterForTest::WaitImpl(Compositor* compositor) { | 379 void DrawWaiterForTest::WaitImpl(Compositor* compositor) { |
| 372 compositor->AddObserver(this); | 380 compositor->AddObserver(this); |
| 373 wait_run_loop_.reset(new base::RunLoop()); | 381 wait_run_loop_.reset(new base::RunLoop()); |
| 374 wait_run_loop_->Run(); | 382 wait_run_loop_->Run(); |
| 375 compositor->RemoveObserver(this); | 383 compositor->RemoveObserver(this); |
| 376 } | 384 } |
| 377 | 385 |
| 378 void DrawWaiterForTest::OnCompositingDidCommit(Compositor* compositor) { | 386 void DrawWaiterForTest::OnCompositingDidCommit(Compositor* compositor) { |
| 387 if (wait_for_commit_) |
| 388 wait_run_loop_->Quit(); |
| 379 } | 389 } |
| 380 | 390 |
| 381 void DrawWaiterForTest::OnCompositingStarted(Compositor* compositor, | 391 void DrawWaiterForTest::OnCompositingStarted(Compositor* compositor, |
| 382 base::TimeTicks start_time) { | 392 base::TimeTicks start_time) { |
| 383 } | 393 } |
| 384 | 394 |
| 385 void DrawWaiterForTest::OnCompositingEnded(Compositor* compositor) { | 395 void DrawWaiterForTest::OnCompositingEnded(Compositor* compositor) { |
| 386 wait_run_loop_->Quit(); | 396 if (!wait_for_commit_) |
| 397 wait_run_loop_->Quit(); |
| 387 } | 398 } |
| 388 | 399 |
| 389 void DrawWaiterForTest::OnCompositingAborted(Compositor* compositor) { | 400 void DrawWaiterForTest::OnCompositingAborted(Compositor* compositor) { |
| 390 } | 401 } |
| 391 | 402 |
| 392 void DrawWaiterForTest::OnCompositingLockStateChanged(Compositor* compositor) { | 403 void DrawWaiterForTest::OnCompositingLockStateChanged(Compositor* compositor) { |
| 393 } | 404 } |
| 394 | 405 |
| 395 void DrawWaiterForTest::OnUpdateVSyncParameters(Compositor* compositor, | 406 void DrawWaiterForTest::OnUpdateVSyncParameters(Compositor* compositor, |
| 396 base::TimeTicks timebase, | 407 base::TimeTicks timebase, |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 FOR_EACH_OBSERVER(CompositorObserver, | 762 FOR_EACH_OBSERVER(CompositorObserver, |
| 752 observer_list_, | 763 observer_list_, |
| 753 OnCompositingDidCommit(this)); | 764 OnCompositingDidCommit(this)); |
| 754 } | 765 } |
| 755 | 766 |
| 756 void Compositor::DidCommitAndDrawFrame() { | 767 void Compositor::DidCommitAndDrawFrame() { |
| 757 base::TimeTicks start_time = base::TimeTicks::Now(); | 768 base::TimeTicks start_time = base::TimeTicks::Now(); |
| 758 FOR_EACH_OBSERVER(CompositorObserver, | 769 FOR_EACH_OBSERVER(CompositorObserver, |
| 759 observer_list_, | 770 observer_list_, |
| 760 OnCompositingStarted(this, start_time)); | 771 OnCompositingStarted(this, start_time)); |
| 761 // If we're threaded without a swap complete callback, we have to | |
| 762 // call DidCompleteSwapBuffersManually. | |
| 763 if (g_compositor_thread && | |
| 764 !host_->GetRendererCapabilities().using_swap_complete_callback) | |
| 765 DidCompleteSwapBuffers(); | |
| 766 } | 772 } |
| 767 | 773 |
| 768 void Compositor::DidCompleteSwapBuffers() { | 774 void Compositor::DidCompleteSwapBuffers() { |
| 769 DCHECK(g_compositor_thread); | 775 DCHECK(g_compositor_thread); |
| 770 NotifyEnd(); | 776 NotifyEnd(); |
| 771 } | 777 } |
| 772 | 778 |
| 773 void Compositor::ScheduleComposite() { | 779 void Compositor::ScheduleComposite() { |
| 774 if (!disable_schedule_composite_) | 780 if (!disable_schedule_composite_) |
| 775 ScheduleDraw(); | 781 ScheduleDraw(); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 846 COMPOSITOR_EXPORT void DisableTestCompositor() { | 852 COMPOSITOR_EXPORT void DisableTestCompositor() { |
| 847 ResetImplicitFactory(); | 853 ResetImplicitFactory(); |
| 848 g_test_compositor_enabled = false; | 854 g_test_compositor_enabled = false; |
| 849 } | 855 } |
| 850 | 856 |
| 851 COMPOSITOR_EXPORT bool IsTestCompositorEnabled() { | 857 COMPOSITOR_EXPORT bool IsTestCompositorEnabled() { |
| 852 return g_test_compositor_enabled; | 858 return g_test_compositor_enabled; |
| 853 } | 859 } |
| 854 | 860 |
| 855 } // namespace ui | 861 } // namespace ui |
| OLD | NEW |