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 |