OLD | NEW |
(Empty) | |
| 1 // Copyright 2012 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 "config.h" |
| 6 |
| 7 #include <public/WebLayerTreeView.h> |
| 8 |
| 9 #include "CompositorFakeWebGraphicsContext3D.h" |
| 10 #include "FakeWebCompositorOutputSurface.h" |
| 11 #include "WebLayerTreeViewTestCommon.h" |
| 12 #include <gmock/gmock.h> |
| 13 #include <public/Platform.h> |
| 14 #include <public/WebCompositor.h> |
| 15 #include <public/WebLayer.h> |
| 16 #include <public/WebLayerTreeViewClient.h> |
| 17 #include <public/WebThread.h> |
| 18 #include <wtf/RefCounted.h> |
| 19 #include <wtf/RefPtr.h> |
| 20 |
| 21 using namespace WebKit; |
| 22 using testing::Mock; |
| 23 using testing::Test; |
| 24 |
| 25 namespace { |
| 26 |
| 27 class MockWebLayerTreeViewClientForThreadedTests : public MockWebLayerTreeViewCl
ient { |
| 28 public: |
| 29 virtual void didBeginFrame() OVERRIDE |
| 30 { |
| 31 WebKit::Platform::current()->currentThread()->exitRunLoop(); |
| 32 MockWebLayerTreeViewClient::didBeginFrame(); |
| 33 } |
| 34 }; |
| 35 |
| 36 class WebLayerTreeViewTestBase : public Test { |
| 37 protected: |
| 38 virtual void initializeCompositor() = 0; |
| 39 virtual WebLayerTreeViewClient* client() = 0; |
| 40 |
| 41 public: |
| 42 virtual void SetUp() |
| 43 { |
| 44 initializeCompositor(); |
| 45 m_rootLayer = adoptPtr(WebLayer::create()); |
| 46 ASSERT_TRUE(m_view = adoptPtr(WebLayerTreeView::create(client(), *m_root
Layer, WebLayerTreeView::Settings()))); |
| 47 m_view->setSurfaceReady(); |
| 48 } |
| 49 |
| 50 virtual void TearDown() |
| 51 { |
| 52 Mock::VerifyAndClearExpectations(client()); |
| 53 |
| 54 m_rootLayer.clear(); |
| 55 m_view.clear(); |
| 56 WebKit::WebCompositor::shutdown(); |
| 57 } |
| 58 |
| 59 protected: |
| 60 OwnPtr<WebLayer> m_rootLayer; |
| 61 OwnPtr<WebLayerTreeView> m_view; |
| 62 }; |
| 63 |
| 64 class WebLayerTreeViewSingleThreadTest : public WebLayerTreeViewTestBase { |
| 65 protected: |
| 66 void composite() |
| 67 { |
| 68 m_view->composite(); |
| 69 } |
| 70 |
| 71 virtual void initializeCompositor() OVERRIDE |
| 72 { |
| 73 WebKit::WebCompositor::initialize(0); |
| 74 } |
| 75 |
| 76 virtual WebLayerTreeViewClient* client() OVERRIDE |
| 77 { |
| 78 return &m_client; |
| 79 } |
| 80 |
| 81 MockWebLayerTreeViewClient m_client; |
| 82 }; |
| 83 |
| 84 class CancelableTaskWrapper : public RefCounted<CancelableTaskWrapper> { |
| 85 class Task : public WebThread::Task { |
| 86 public: |
| 87 Task(CancelableTaskWrapper* cancelableTask) |
| 88 : m_cancelableTask(cancelableTask) |
| 89 { |
| 90 } |
| 91 |
| 92 private: |
| 93 virtual void run() OVERRIDE |
| 94 { |
| 95 m_cancelableTask->runIfNotCanceled(); |
| 96 } |
| 97 |
| 98 RefPtr<CancelableTaskWrapper> m_cancelableTask; |
| 99 }; |
| 100 |
| 101 public: |
| 102 CancelableTaskWrapper(PassOwnPtr<WebThread::Task> task) |
| 103 : m_task(task) |
| 104 { |
| 105 } |
| 106 |
| 107 void cancel() |
| 108 { |
| 109 m_task.clear(); |
| 110 } |
| 111 |
| 112 WebThread::Task* createTask() |
| 113 { |
| 114 ASSERT(m_task); |
| 115 return new Task(this); |
| 116 } |
| 117 |
| 118 void runIfNotCanceled() |
| 119 { |
| 120 if (!m_task) |
| 121 return; |
| 122 m_task->run(); |
| 123 m_task.clear(); |
| 124 } |
| 125 |
| 126 private: |
| 127 OwnPtr<WebThread::Task> m_task; |
| 128 }; |
| 129 |
| 130 class WebLayerTreeViewThreadedTest : public WebLayerTreeViewTestBase { |
| 131 protected: |
| 132 class TimeoutTask : public WebThread::Task { |
| 133 virtual void run() OVERRIDE |
| 134 { |
| 135 WebKit::Platform::current()->currentThread()->exitRunLoop(); |
| 136 } |
| 137 }; |
| 138 |
| 139 void composite() |
| 140 { |
| 141 m_view->setNeedsRedraw(); |
| 142 RefPtr<CancelableTaskWrapper> timeoutTask = adoptRef(new CancelableTaskW
rapper(adoptPtr(new TimeoutTask()))); |
| 143 WebKit::Platform::current()->currentThread()->postDelayedTask(timeoutTas
k->createTask(), 5000); |
| 144 WebKit::Platform::current()->currentThread()->enterRunLoop(); |
| 145 timeoutTask->cancel(); |
| 146 m_view->finishAllRendering(); |
| 147 } |
| 148 |
| 149 virtual void initializeCompositor() OVERRIDE |
| 150 { |
| 151 m_webThread = adoptPtr(WebKit::Platform::current()->createThread("WebLay
erTreeViewTest")); |
| 152 WebCompositor::initialize(m_webThread.get()); |
| 153 } |
| 154 |
| 155 virtual WebLayerTreeViewClient* client() OVERRIDE |
| 156 { |
| 157 return &m_client; |
| 158 } |
| 159 |
| 160 MockWebLayerTreeViewClientForThreadedTests m_client; |
| 161 OwnPtr<WebThread> m_webThread; |
| 162 }; |
| 163 |
| 164 TEST_F(WebLayerTreeViewSingleThreadTest, InstrumentationCallbacks) |
| 165 { |
| 166 ::testing::InSequence dummy; |
| 167 |
| 168 EXPECT_CALL(m_client, willCommit()); |
| 169 EXPECT_CALL(m_client, didCommit()); |
| 170 EXPECT_CALL(m_client, didBeginFrame()); |
| 171 |
| 172 composite(); |
| 173 } |
| 174 |
| 175 TEST_F(WebLayerTreeViewThreadedTest, InstrumentationCallbacks) |
| 176 { |
| 177 ::testing::InSequence dummy; |
| 178 |
| 179 EXPECT_CALL(m_client, willBeginFrame()); |
| 180 EXPECT_CALL(m_client, willCommit()); |
| 181 EXPECT_CALL(m_client, didCommit()); |
| 182 EXPECT_CALL(m_client, didBeginFrame()); |
| 183 |
| 184 composite(); |
| 185 } |
| 186 |
| 187 } // namespace |
OLD | NEW |