Index: ui/compositor/compositor_unittest.cc |
diff --git a/ui/compositor/compositor_unittest.cc b/ui/compositor/compositor_unittest.cc |
index 810f1c96d0875938de0b2460aaddcb4eaf4568f4..fb1f931961804c4830418e300a8d1bc827c7ac3c 100644 |
--- a/ui/compositor/compositor_unittest.cc |
+++ b/ui/compositor/compositor_unittest.cc |
@@ -3,13 +3,24 @@ |
// found in the LICENSE file. |
#include "base/test/test_simple_task_runner.h" |
+#include "cc/output/begin_frame_args.h" |
+#include "cc/test/begin_frame_args_test.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/compositor/compositor.h" |
#include "ui/compositor/test/context_factories_for_test.h" |
+using testing::Mock; |
+using testing::_; |
+ |
namespace ui { |
namespace { |
+class MockCompositorBeginFrameObserver : public CompositorBeginFrameObserver { |
+ public: |
+ MOCK_METHOD1(OnSendBeginFrame, void(const cc::BeginFrameArgs&)); |
+}; |
+ |
// Test fixture for tests that require a ui::Compositor with a real task |
// runner. |
class CompositorTest : public testing::Test { |
@@ -61,4 +72,37 @@ TEST_F(CompositorTest, LocksTimeOut) { |
EXPECT_TRUE(compositor()->IsLocked()); |
} |
+// Tests whether |missed_begin_frame_args_| is used immediately or not when new |
+// observer is added. |
+TEST_F(CompositorTest, AddBeginFrameObserver) { |
+ cc::BeginFrameArgs last_args = |
+ cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, |
+ base::TimeTicks::FromInternalValue(33)); |
+ cc::BeginFrameArgs new_args = |
+ cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, |
+ base::TimeTicks::FromInternalValue(55)); |
+ |
+ // Simulate to trigger new BeginFrame by using |new_args|. |
+ compositor()->SendBeginFramesToChildren(new_args); |
+ |
+ // When |missed_begin_frame_args_| is sent, its type is set to MISSED. |
+ cc::BeginFrameArgs expected_args(new_args); |
+ expected_args.type = cc::BeginFrameArgs::MISSED; |
+ |
+ MockCompositorBeginFrameObserver test_observer; |
+ EXPECT_CALL(test_observer, OnSendBeginFrame(expected_args)); |
+ // When new observer is added, Compositor immediately sends BeginFrame with |
+ // |missed_begin_frame_args_| when new observer didn't used it. |
+ compositor()->AddBeginFrameObserver(&test_observer, last_args); |
+ compositor()->RemoveBeginFrameObserver(&test_observer); |
+ Mock::VerifyAndClearExpectations(&test_observer); |
+ |
+ EXPECT_CALL(test_observer, OnSendBeginFrame(_)).Times(0); |
+ //test_observer.Reset(); |
+ // BeginFrame is not sended immediately because new observer already used |
+ // |missed_begin_frame_args_|. |
+ compositor()->AddBeginFrameObserver(&test_observer, new_args); |
+ compositor()->RemoveBeginFrameObserver(&test_observer); |
+} |
+ |
} // namespace ui |