1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/renderer/gpu/render_widget_compositor.h" 6 7 #include "cc/output/begin_frame_args.h" 8 #include "content/public/test/mock_render_thread.h" 9 #include "content/renderer/render_widget.h" 10 #include "testing/gmock/include/gmock/gmock.h" 11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "third_party/WebKit/public/platform/WebScreenInfo.h" 13 14 using testing::AllOf; 15 using testing::Field; 16 17 namespace content { 18 19 class MockWebWidget : public blink::WebWidget { 20 public: 21 MOCK_METHOD1(beginFrame, void(const blink::WebBeginFrameArgs& args)); 22 }; 23 24 class TestRenderWidget : public RenderWidget { 25 public: 26 TestRenderWidget() 27 : RenderWidget(blink::WebPopupTypeNone, 28 blink::WebScreenInfo(), 29 true, 30 false, 31 false) { 32 webwidget_ = &mock_webwidget_; 33 } 34 35 MockWebWidget mock_webwidget_; 36 37 private: 38 virtual ~TestRenderWidget() { webwidget_ = NULL; } 39 40 DISALLOW_COPY_AND_ASSIGN(TestRenderWidget); 41 }; 42 43 class RenderWidgetCompositorTest : public testing::Test { 44 public: 45 RenderWidgetCompositorTest() 46 : render_widget_(make_scoped_refptr(new TestRenderWidget())), 47 render_widget_compositor_( 48 RenderWidgetCompositor::Create(render_widget_.get(), false)) {} 49 virtual ~RenderWidgetCompositorTest() {} 50 51 protected: 52 MockRenderThread render_thread_; 53 scoped_refptr<TestRenderWidget> render_widget_; 54 scoped_ptr<RenderWidgetCompositor> render_widget_compositor_; 55 56 private: 57 DISALLOW_COPY_AND_ASSIGN(RenderWidgetCompositorTest); 58 }; 59 60 TEST_F(RenderWidgetCompositorTest, BeginMainFrame) { 61 base::TimeTicks frame_time(base::TimeTicks() + 62 base::TimeDelta::FromSeconds(1)); 63 base::TimeTicks deadline(base::TimeTicks() + base::TimeDelta::FromSeconds(2)); 64 base::TimeDelta interval(base::TimeDelta::FromSeconds(3)); 65 cc::BeginFrameArgs args( 66 cc::BeginFrameArgs::Create(frame_time, deadline, interval)); 67 68 EXPECT_CALL(render_widget_->mock_webwidget_, 69 beginFrame(AllOf( 70 Field(&blink::WebBeginFrameArgs::lastFrameTimeMonotonic, 1), 71 Field(&blink::WebBeginFrameArgs::deadline, 2), 72 Field(&blink::WebBeginFrameArgs::interval, 3)))); 73 74 render_widget_compositor_->BeginMainFrame(args); 75 } 76 77 } // namespace content 78