Chromium Code Reviews| Index: ui/compositor/compositor_unittest.cc |
| diff --git a/ui/compositor/compositor_unittest.cc b/ui/compositor/compositor_unittest.cc |
| index b182033dabdc861d64a7bfee61beceea1b315430..10ad49c97dffd198d90d9dc59ae334013f622f1e 100644 |
| --- a/ui/compositor/compositor_unittest.cc |
| +++ b/ui/compositor/compositor_unittest.cc |
| @@ -9,6 +9,7 @@ |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/compositor/compositor.h" |
| +#include "ui/compositor/compositor_observer.h" |
| #include "ui/compositor/test/context_factories_for_test.h" |
| using testing::Mock; |
| @@ -22,6 +23,25 @@ class MockCompositorBeginFrameObserver : public CompositorBeginFrameObserver { |
| MOCK_METHOD1(OnSendBeginFrame, void(const cc::BeginFrameArgs&)); |
| }; |
| +class WaitForCompositingObserver : public CompositorObserver { |
| + public: |
| + WaitForCompositingObserver(base::Closure quit_closure) |
| + : quit_closure_(quit_closure) {} |
| + |
| + void OnCompositingDidCommit(Compositor* compositor) override { |
| + quit_closure_.Run(); |
| + } |
| + void OnCompositingStarted(Compositor* compositor, |
| + base::TimeTicks start_time) override {} |
| + void OnCompositingEnded(Compositor* compositor) override {} |
| + void OnCompositingAborted(Compositor* compositor) override {} |
| + void OnCompositingLockStateChanged(Compositor* compositor) override {} |
| + void OnCompositingShuttingDown(Compositor* compositor) override {} |
| + |
| + private: |
| + base::Closure quit_closure_; |
| +}; |
| + |
| // Test fixture for tests that require a ui::Compositor with a real task |
| // runner. |
| class CompositorTest : public testing::Test { |
| @@ -43,6 +63,15 @@ class CompositorTest : public testing::Test { |
| ui::TerminateContextFactoryForTests(); |
| } |
| + void WaitForComposite() { |
| + compositor()->ScheduleDraw(); |
| + base::RunLoop run_loop; |
| + WaitForCompositingObserver observer(run_loop.QuitClosure()); |
| + compositor()->AddObserver(&observer); |
| + run_loop.Run(); |
| + compositor()->RemoveObserver(&observer); |
|
piman
2015/10/05 22:21:26
I think you can use DrawWaiterForTest::WaitForComm
|
| + } |
| + |
| protected: |
| base::SingleThreadTaskRunner* task_runner() { return task_runner_.get(); } |
| ui::Compositor* compositor() { return compositor_.get(); } |
| @@ -125,4 +154,23 @@ TEST_F(CompositorTest, AddAndRemoveBeginFrameObserver) { |
| compositor()->RemoveBeginFrameObserver(&test_observer2); |
| } |
| +TEST_F(CompositorTest, ReleaseWidgetWithOutputSurfaceNeverCreated) { |
| + compositor()->SetVisible(false); |
| + EXPECT_EQ(gfx::kNullAcceleratedWidget, |
| + compositor()->ReleaseAcceleratedWidget()); |
| + compositor()->SetAcceleratedWidget(gfx::kNullAcceleratedWidget); |
| + compositor()->SetVisible(true); |
| +} |
| + |
| +TEST_F(CompositorTest, CreateAndReleaseOutputSurface) { |
| + DCHECK(compositor()->IsVisible()); |
| + WaitForComposite(); |
| + compositor()->SetVisible(false); |
| + EXPECT_EQ(gfx::kNullAcceleratedWidget, |
| + compositor()->ReleaseAcceleratedWidget()); |
| + compositor()->SetAcceleratedWidget(gfx::kNullAcceleratedWidget); |
| + compositor()->SetVisible(true); |
| + WaitForComposite(); |
| +} |
| + |
| } // namespace ui |