Chromium Code Reviews| Index: ui/compositor/compositor_unittest.cc |
| diff --git a/ui/compositor/compositor_unittest.cc b/ui/compositor/compositor_unittest.cc |
| index 810f1c96d0875938de0b2460aaddcb4eaf4568f4..35f6c5a3718073587ad8fad0dc88de469e52326d 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,41 @@ 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); |
| + // |new_args| is stored in |missed_begin_frame_args_| in Compositor for using |
| + // later added observers. |
| + EXPECT_EQ(new_args.frame_time, |
| + compositor()->MissedBeginFrameArgsForTesting().frame_time); |
|
danakj
2015/03/17 18:56:45
I don't think you need this check (or the ForTesti
simonhong
2015/03/19 15:48:46
Removed.
|
| + |
| + // 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)); |
|
danakj
2015/03/17 18:56:45
This is the right level of testing here.
|
| + // 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 |