| Index: content/browser/renderer_host/compositor_begin_frame_observer_impl_unittest.cc | 
| diff --git a/content/browser/renderer_host/compositor_begin_frame_observer_impl_unittest.cc b/content/browser/renderer_host/compositor_begin_frame_observer_impl_unittest.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..d3b2e69ca7a01781611c9e5d7838d8c50c8f1b3e | 
| --- /dev/null | 
| +++ b/content/browser/renderer_host/compositor_begin_frame_observer_impl_unittest.cc | 
| @@ -0,0 +1,98 @@ | 
| +// 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 <algorithm> | 
| +#include <list> | 
| + | 
| +#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 "content/browser/renderer_host/compositor_begin_frame_observer_impl.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 content { | 
| +namespace { | 
| + | 
| +class MockCompositorBeginFrameObserverImplClient | 
| +    : public CompositorBeginFrameObserverImplClient { | 
| + public: | 
| +  MOCK_METHOD1(SendBeginFrame, void(const cc::BeginFrameArgs&)); | 
| +}; | 
| + | 
| +class CompositorBeginFrameObserverImplTest : public testing::Test { | 
| + public: | 
| +  CompositorBeginFrameObserverImplTest() {} | 
| +  ~CompositorBeginFrameObserverImplTest() override {} | 
| + | 
| +  void SetUp() override { | 
| +    bool enable_pixel_output = false; | 
| +    ui::ContextFactory* context_factory = | 
| +        ui::InitializeContextFactoryForTests(enable_pixel_output); | 
| +    compositor_task_runner_ = new base::TestSimpleTaskRunner(); | 
| +    compositor_.reset(new ui::Compositor(gfx::kNullAcceleratedWidget, | 
| +                                         context_factory, | 
| +                                         compositor_task_runner_)); | 
| +  } | 
| + | 
| +  void TearDown() override { | 
| +    compositor_.reset(); | 
| +    ui::TerminateContextFactoryForTests(); | 
| +  } | 
| + | 
| +  ui::Compositor* compositor() { return compositor_.get(); } | 
| + | 
| + private: | 
| +  scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; | 
| +  scoped_ptr<ui::Compositor> compositor_; | 
| +}; | 
| + | 
| +}  // namespace | 
| + | 
| +TEST_F(CompositorBeginFrameObserverImplTest, BeginFrameScheduling) { | 
| +  MockCompositorBeginFrameObserverImplClient client; | 
| +  CompositorBeginFrameObserverImpl begin_frame_observer(&client); | 
| +  begin_frame_observer.SetCompositor(compositor()); | 
| +  begin_frame_observer.SetNeedsBeginFrames(true); | 
| + | 
| +  // SendBeginFrame is called when new |args| is delivered. | 
| +  cc::BeginFrameArgs args = | 
| +    cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, | 
| +                                       base::TimeTicks::FromInternalValue(33)); | 
| +  EXPECT_CALL(client, SendBeginFrame(args)); | 
| +  compositor()->SendBeginFramesToChildren(args); | 
| +  Mock::VerifyAndClearExpectations(&client); | 
| + | 
| +  // SendBeginFrame is called when new |args2| is delivered. | 
| +  cc::BeginFrameArgs args2 = | 
| +    cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, | 
| +                                       base::TimeTicks::FromInternalValue(66)); | 
| +  EXPECT_CALL(client, SendBeginFrame(args2)); | 
| +  compositor()->SendBeginFramesToChildren(args2); | 
| +  Mock::VerifyAndClearExpectations(&client); | 
| + | 
| +  // SendBeginFrame is not called when used |args2| is delivered. | 
| +  EXPECT_CALL(client, SendBeginFrame(_)).Times(0); | 
| +  compositor()->SendBeginFramesToChildren(args2); | 
| +  Mock::VerifyAndClearExpectations(&client); | 
| + | 
| +  // SendBeginFrame is not called when compositor is reset. | 
| +  begin_frame_observer.ResetCompositor(); | 
| +  cc::BeginFrameArgs args3 = | 
| +    cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, | 
| +                                       base::TimeTicks::FromInternalValue(99)); | 
| +  EXPECT_CALL(client, SendBeginFrame(_)).Times(0); | 
| +  compositor()->SendBeginFramesToChildren(args3); | 
| +  Mock::VerifyAndClearExpectations(&client); | 
| +} | 
| + | 
| +}  // namespace content | 
|  |