| Index: ui/compositor/compositor_unittest.cc
|
| diff --git a/ui/compositor/compositor_unittest.cc b/ui/compositor/compositor_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f9c646977270e3fba04beb12013926135d07ceae
|
| --- /dev/null
|
| +++ b/ui/compositor/compositor_unittest.cc
|
| @@ -0,0 +1,100 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/compiler_specific.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#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"
|
| +#include "ui/gfx/geometry/rect.h"
|
| +
|
| +using testing::Mock;
|
| +using testing::_;
|
| +
|
| +namespace ui {
|
| +namespace {
|
| +
|
| +class MockCompositorBeginFrameObserver : public CompositorBeginFrameObserver {
|
| + public:
|
| + MOCK_METHOD1(OnSendBeginFrame, void(const cc::BeginFrameArgs&));
|
| +};
|
| +
|
| +class BeginFrameWithCompositorTest : public testing::Test {
|
| + public:
|
| + BeginFrameWithCompositorTest() {}
|
| + ~BeginFrameWithCompositorTest() override {}
|
| +
|
| + // Overridden from testing::Test:
|
| + void SetUp() override {
|
| + bool enable_pixel_output = false;
|
| + ui::ContextFactory* context_factory =
|
| + InitializeContextFactoryForTests(enable_pixel_output);
|
| + compositor_task_runner_ = new base::TestSimpleTaskRunner();
|
| + compositor_.reset(new ui::Compositor(gfx::kNullAcceleratedWidget,
|
| + context_factory,
|
| + compositor_task_runner_.get()));
|
| + }
|
| +
|
| + void TearDown() override {
|
| + compositor_.reset();
|
| + TerminateContextFactoryForTests();
|
| + }
|
| +
|
| + Compositor* compositor() { return compositor_.get(); }
|
| +
|
| + cc::BeginFrameArgs missed_begin_frame_args() {
|
| + return compositor()->MissedBeginFrameArgsForTesting();
|
| + }
|
| +
|
| + private:
|
| + scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
|
| + scoped_ptr<ui::Compositor> compositor_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(BeginFrameWithCompositorTest);
|
| +};
|
| +
|
| +// Tests whether |missed_begin_frame_args_| is used immediately or not when new
|
| +// observer is added.
|
| +TEST_F(BeginFrameWithCompositorTest, 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,
|
| + missed_begin_frame_args().frame_time);
|
| +
|
| + // 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
|
| +} // namespace ui
|
|
|