| 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
|
|
|