[chromium] Clean up includes in compositor unit tests
[WebKit-https.git] / Source / WebKit / chromium / tests / WebLayerTreeViewTest.cpp
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1.  Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #include "config.h"
26
27 #include <public/WebLayerTreeView.h>
28
29 #include "CompositorFakeWebGraphicsContext3D.h"
30 #include <gmock/gmock.h>
31 #include <public/Platform.h>
32 #include <public/WebCompositor.h>
33 #include <public/WebLayer.h>
34 #include <public/WebLayerTreeViewClient.h>
35 #include <public/WebThread.h>
36
37 using namespace WebKit;
38 using testing::Mock;
39 using testing::Test;
40
41 namespace {
42
43 class MockWebLayerTreeViewClient : public WebLayerTreeViewClient {
44 public:
45     virtual void scheduleComposite() OVERRIDE { }
46     virtual void updateAnimations(double frameBeginTime) OVERRIDE { }
47     MOCK_METHOD0(willBeginFrame, void());
48     MOCK_METHOD0(didBeginFrame, void());
49     virtual void layout() OVERRIDE { }
50     virtual void applyScrollAndScale(const WebSize& scrollDelta, float scaleFactor) OVERRIDE { }
51     virtual WebGraphicsContext3D* createContext3D() OVERRIDE { return CompositorFakeWebGraphicsContext3D::create(WebGraphicsContext3D::Attributes()).leakPtr(); }
52     virtual void didRebindGraphicsContext(bool success) OVERRIDE { }
53     MOCK_METHOD0(willCommit, void());
54     MOCK_METHOD0(didCommit, void());
55     virtual void didCommitAndDrawFrame() OVERRIDE { }
56     virtual void didCompleteSwapBuffers() OVERRIDE { }
57 };
58
59 class MockWebLayerTreeViewClientForThreadedTests : public MockWebLayerTreeViewClient {
60 public:
61     virtual void didBeginFrame() OVERRIDE
62     {
63         WebKit::Platform::current()->currentThread()->exitRunLoop();
64         MockWebLayerTreeViewClient::didBeginFrame();
65     }
66 };
67
68 class WebLayerTreeViewTestBase : public Test {
69 protected:
70     virtual void initializeCompositor() = 0;
71     virtual WebLayerTreeViewClient* client() = 0;
72
73 public:
74     virtual void SetUp()
75     {
76         initializeCompositor();
77         m_rootLayer = WebLayer::create();
78         EXPECT_TRUE(m_view.initialize(client(), m_rootLayer, WebLayerTreeView::Settings()));
79         m_view.setSurfaceReady();
80     }
81
82     virtual void TearDown()
83     {
84         Mock::VerifyAndClearExpectations(client());
85
86         m_view.setRootLayer(0);
87         m_rootLayer.reset();
88         m_view.reset();
89         WebKit::WebCompositor::shutdown();
90     }
91
92 protected:
93     WebLayer m_rootLayer;
94     WebLayerTreeView m_view;
95 };
96
97 class WebLayerTreeViewSingleThreadTest : public WebLayerTreeViewTestBase {
98 protected:
99     void composite()
100     {
101         m_view.composite();
102     }
103
104     virtual void initializeCompositor() OVERRIDE
105     {
106         WebKit::WebCompositor::initialize(0);
107     }
108
109     virtual WebLayerTreeViewClient* client() OVERRIDE
110     {
111         return &m_client;
112     }
113
114     MockWebLayerTreeViewClient m_client;
115 };
116
117 class CancelableTaskWrapper : public RefCounted<CancelableTaskWrapper> {
118     class Task : public WebThread::Task {
119     public:
120         Task(CancelableTaskWrapper* cancelableTask)
121             : m_cancelableTask(cancelableTask)
122         {
123         }
124
125     private:
126         virtual void run() OVERRIDE
127         {
128             m_cancelableTask->runIfNotCanceled();
129         }
130
131         RefPtr<CancelableTaskWrapper> m_cancelableTask;
132     };
133
134 public:
135     CancelableTaskWrapper(PassOwnPtr<WebThread::Task> task)
136         : m_task(task)
137     {
138     }
139
140     void cancel()
141     {
142         m_task.clear();
143     }
144
145     WebThread::Task* createTask()
146     {
147         ASSERT(m_task);
148         return new Task(this);
149     }
150
151     void runIfNotCanceled()
152     {
153         if (!m_task)
154             return;
155         m_task->run();
156         m_task.clear();
157     }
158
159 private:
160     OwnPtr<WebThread::Task> m_task;
161 };
162
163 class WebLayerTreeViewThreadedTest : public WebLayerTreeViewTestBase {
164 protected:
165     class TimeoutTask : public WebThread::Task {
166         virtual void run() OVERRIDE
167         {
168             WebKit::Platform::current()->currentThread()->exitRunLoop();
169         }
170     };
171
172     void composite()
173     {
174         m_view.setNeedsRedraw();
175         RefPtr<CancelableTaskWrapper> timeoutTask = adoptRef(new CancelableTaskWrapper(adoptPtr(new TimeoutTask())));
176         WebKit::Platform::current()->currentThread()->postDelayedTask(timeoutTask->createTask(), 5000);
177         WebKit::Platform::current()->currentThread()->enterRunLoop();
178         timeoutTask->cancel();
179         m_view.finishAllRendering();
180     }
181
182     virtual void initializeCompositor() OVERRIDE
183     {
184         m_webThread = adoptPtr(WebKit::Platform::current()->createThread("WebLayerTreeViewTest"));
185         WebCompositor::initialize(m_webThread.get());
186     }
187
188     virtual WebLayerTreeViewClient* client() OVERRIDE
189     {
190         return &m_client;
191     }
192
193     MockWebLayerTreeViewClientForThreadedTests m_client;
194     OwnPtr<WebThread> m_webThread;
195 };
196
197 TEST_F(WebLayerTreeViewSingleThreadTest, InstrumentationCallbacks)
198 {
199     ::testing::InSequence dummy;
200
201     EXPECT_CALL(m_client, willCommit());
202     EXPECT_CALL(m_client, didCommit());
203     EXPECT_CALL(m_client, didBeginFrame());
204
205     composite();
206 }
207
208 TEST_F(WebLayerTreeViewThreadedTest, InstrumentationCallbacks)
209 {
210     ::testing::InSequence dummy;
211
212     EXPECT_CALL(m_client, willBeginFrame());
213     EXPECT_CALL(m_client, willCommit());
214     EXPECT_CALL(m_client, didCommit());
215     EXPECT_CALL(m_client, didBeginFrame());
216
217     composite();
218 }
219
220 } // namespace