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 |