OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
11 * documentation and/or other materials provided with the distribution. | 11 * documentation and/or other materials provided with the distribution. |
12 * | 12 * |
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y | 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y |
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 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 AN
Y | 16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR AN
Y |
17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 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 O
N | 19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O
N |
20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 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 | 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. | 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
23 */ | 23 */ |
24 | 24 |
25 #include "platform/graphics/Canvas2DLayerBridge.h" | 25 #include "platform/graphics/Canvas2DLayerBridge.h" |
26 | 26 |
27 #include "SkSurface.h" | 27 #include "SkSurface.h" |
28 #include "base/memory/scoped_ptr.h" | 28 #include "base/memory/scoped_ptr.h" |
| 29 #include "gpu/command_buffer/client/gles2_interface.h" |
29 #include "platform/Task.h" | 30 #include "platform/Task.h" |
30 #include "platform/ThreadSafeFunctional.h" | 31 #include "platform/ThreadSafeFunctional.h" |
31 #include "platform/WaitableEvent.h" | 32 #include "platform/WaitableEvent.h" |
32 #include "platform/graphics/ImageBuffer.h" | 33 #include "platform/graphics/ImageBuffer.h" |
33 #include "platform/graphics/UnacceleratedImageBufferSurface.h" | 34 #include "platform/graphics/UnacceleratedImageBufferSurface.h" |
| 35 #include "platform/graphics/test/MockGLES2Interface.h" |
34 #include "platform/graphics/test/MockWebGraphicsContext3D.h" | 36 #include "platform/graphics/test/MockWebGraphicsContext3D.h" |
35 #include "public/platform/Platform.h" | 37 #include "public/platform/Platform.h" |
36 #include "public/platform/WebExternalBitmap.h" | 38 #include "public/platform/WebExternalBitmap.h" |
37 #include "public/platform/WebGraphicsContext3DProvider.h" | 39 #include "public/platform/WebGraphicsContext3DProvider.h" |
38 #include "public/platform/WebScheduler.h" | 40 #include "public/platform/WebScheduler.h" |
39 #include "public/platform/WebTaskRunner.h" | 41 #include "public/platform/WebTaskRunner.h" |
40 #include "public/platform/WebThread.h" | 42 #include "public/platform/WebThread.h" |
41 #include "public/platform/WebTraceLocation.h" | 43 #include "public/platform/WebTraceLocation.h" |
42 #include "skia/ext/texture_handle.h" | 44 #include "skia/ext/texture_handle.h" |
43 #include "testing/gmock/include/gmock/gmock.h" | 45 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 17 matching lines...) Expand all Loading... |
61 | 63 |
62 class MockCanvasContext : public MockWebGraphicsContext3D { | 64 class MockCanvasContext : public MockWebGraphicsContext3D { |
63 public: | 65 public: |
64 MOCK_METHOD0(flush, void(void)); | 66 MOCK_METHOD0(flush, void(void)); |
65 MOCK_METHOD0(createTexture, unsigned(void)); | 67 MOCK_METHOD0(createTexture, unsigned(void)); |
66 MOCK_METHOD1(deleteTexture, void(unsigned)); | 68 MOCK_METHOD1(deleteTexture, void(unsigned)); |
67 }; | 69 }; |
68 | 70 |
69 class MockWebGraphicsContext3DProvider : public WebGraphicsContext3DProvider { | 71 class MockWebGraphicsContext3DProvider : public WebGraphicsContext3DProvider { |
70 public: | 72 public: |
71 MockWebGraphicsContext3DProvider(WebGraphicsContext3D* context3d) | 73 MockWebGraphicsContext3DProvider(WebGraphicsContext3D* context3d, gpu::gles2
::GLES2Interface* gl) |
72 : m_context3d(context3d) | 74 : m_context3d(context3d) |
| 75 , m_gl(gl) |
73 { | 76 { |
74 scoped_ptr<SkGLContext> glContext(SkNullGLContext::Create()); | 77 scoped_ptr<SkGLContext> glContext(SkNullGLContext::Create()); |
75 glContext->makeCurrent(); | 78 glContext->makeCurrent(); |
76 m_grContext = adoptRef(GrContext::Create(kOpenGL_GrBackend, reinterpret_
cast<GrBackendContext>(glContext->gl()))); | 79 m_grContext = adoptRef(GrContext::Create(kOpenGL_GrBackend, reinterpret_
cast<GrBackendContext>(glContext->gl()))); |
77 } | 80 } |
78 | 81 |
79 WebGraphicsContext3D* context3d() override | 82 WebGraphicsContext3D* context3d() override |
80 { | 83 { |
81 return m_context3d; | 84 return m_context3d; |
82 } | 85 } |
83 | 86 |
84 GrContext* grContext() override | 87 GrContext* grContext() override |
85 { | 88 { |
86 return m_grContext.get(); | 89 return m_grContext.get(); |
87 } | 90 } |
88 | 91 |
| 92 gpu::gles2::GLES2Interface* contextGL() override |
| 93 { |
| 94 return m_gl; |
| 95 } |
| 96 |
89 private: | 97 private: |
90 WebGraphicsContext3D* m_context3d; | 98 WebGraphicsContext3D* m_context3d; |
| 99 gpu::gles2::GLES2Interface* m_gl; |
91 RefPtr<GrContext> m_grContext; | 100 RefPtr<GrContext> m_grContext; |
92 }; | 101 }; |
93 | 102 |
94 class Canvas2DLayerBridgePtr { | 103 class Canvas2DLayerBridgePtr { |
95 public: | 104 public: |
96 Canvas2DLayerBridgePtr() { } | 105 Canvas2DLayerBridgePtr() { } |
97 Canvas2DLayerBridgePtr(PassRefPtr<Canvas2DLayerBridge> layerBridge) | 106 Canvas2DLayerBridgePtr(PassRefPtr<Canvas2DLayerBridge> layerBridge) |
98 : m_layerBridge(layerBridge) { } | 107 : m_layerBridge(layerBridge) { } |
99 | 108 |
100 ~Canvas2DLayerBridgePtr() | 109 ~Canvas2DLayerBridgePtr() |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 public: | 155 public: |
147 PassRefPtr<Canvas2DLayerBridge> makeBridge(PassOwnPtr<MockWebGraphicsContext
3DProvider> provider, const IntSize& size, Canvas2DLayerBridge::AccelerationMode
accelerationMode) | 156 PassRefPtr<Canvas2DLayerBridge> makeBridge(PassOwnPtr<MockWebGraphicsContext
3DProvider> provider, const IntSize& size, Canvas2DLayerBridge::AccelerationMode
accelerationMode) |
148 { | 157 { |
149 return adoptRef(new Canvas2DLayerBridge(provider, size, 0, NonOpaque, ac
celerationMode)); | 158 return adoptRef(new Canvas2DLayerBridge(provider, size, 0, NonOpaque, ac
celerationMode)); |
150 } | 159 } |
151 | 160 |
152 protected: | 161 protected: |
153 void fullLifecycleTest() | 162 void fullLifecycleTest() |
154 { | 163 { |
155 MockCanvasContext mainMock; | 164 MockCanvasContext mainMock; |
156 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new
MockWebGraphicsContext3DProvider(&mainMock)); | 165 MockGLES2Interface mockGL; |
| 166 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new
MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
157 | 167 |
158 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 168 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
159 | 169 |
160 { | 170 { |
161 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Dis
ableAcceleration))); | 171 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Dis
ableAcceleration))); |
162 | 172 |
163 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 173 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
164 | 174 |
165 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLText
ureInfo(bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown)->get
TextureHandle(true)); | 175 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLText
ureInfo(bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown)->get
TextureHandle(true)); |
166 EXPECT_EQ(textureInfo, nullptr); | 176 EXPECT_EQ(textureInfo, nullptr); |
167 | 177 |
168 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 178 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
169 } // bridge goes out of scope here | 179 } // bridge goes out of scope here |
170 | 180 |
171 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 181 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
172 } | 182 } |
173 | 183 |
174 void fallbackToSoftwareIfContextLost() | 184 void fallbackToSoftwareIfContextLost() |
175 { | 185 { |
176 MockCanvasContext mainMock; | 186 MockCanvasContext mainMock; |
177 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new
MockWebGraphicsContext3DProvider(&mainMock)); | 187 MockGLES2Interface mockGL; |
| 188 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new
MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
178 | 189 |
179 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 190 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
180 | 191 |
181 { | 192 { |
182 mainMock.fakeContextLost(); | 193 mockGL.setIsContextLost(true); |
183 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); | 194 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
184 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 195 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
185 EXPECT_TRUE(bridge->checkSurfaceValid()); | 196 EXPECT_TRUE(bridge->checkSurfaceValid()); |
186 EXPECT_FALSE(bridge->isAccelerated()); | 197 EXPECT_FALSE(bridge->isAccelerated()); |
187 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 198 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
188 } | 199 } |
189 | 200 |
190 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 201 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
191 } | 202 } |
192 | 203 |
193 void fallbackToSoftwareOnFailedTextureAlloc() | 204 void fallbackToSoftwareOnFailedTextureAlloc() |
194 { | 205 { |
195 MockCanvasContext mainMock; | 206 MockCanvasContext mainMock; |
196 | 207 |
197 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 208 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
198 | 209 |
199 { | 210 { |
200 // No fallback case | 211 // No fallback case |
201 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock)); | 212 MockGLES2Interface mockGL; |
| 213 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
202 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); | 214 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
203 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 215 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
204 EXPECT_TRUE(bridge->checkSurfaceValid()); | 216 EXPECT_TRUE(bridge->checkSurfaceValid()); |
205 EXPECT_TRUE(bridge->isAccelerated()); | 217 EXPECT_TRUE(bridge->isAccelerated()); |
206 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 218 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
207 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati
on, SnapshotReasonUnknown); | 219 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati
on, SnapshotReasonUnknown); |
208 EXPECT_TRUE(bridge->isAccelerated()); | 220 EXPECT_TRUE(bridge->isAccelerated()); |
209 EXPECT_TRUE(snapshot->isTextureBacked()); | 221 EXPECT_TRUE(snapshot->isTextureBacked()); |
210 } | 222 } |
211 | 223 |
212 { | 224 { |
213 // Fallback case | 225 // Fallback case |
214 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock)); | 226 MockGLES2Interface mockGL; |
| 227 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
215 GrContext* gr = mainMockProvider->grContext(); | 228 GrContext* gr = mainMockProvider->grContext(); |
216 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); | 229 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
217 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 230 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
218 EXPECT_TRUE(bridge->checkSurfaceValid()); | 231 EXPECT_TRUE(bridge->checkSurfaceValid()); |
219 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that allo
cation will fail | 232 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that allo
cation will fail |
220 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 233 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
221 gr->abandonContext(); // This will cause SkSurface_Gpu creation to f
ail without Canvas2DLayerBridge otherwise detecting that anything was disabled. | 234 gr->abandonContext(); // This will cause SkSurface_Gpu creation to f
ail without Canvas2DLayerBridge otherwise detecting that anything was disabled. |
222 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati
on, SnapshotReasonUnknown); | 235 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati
on, SnapshotReasonUnknown); |
223 EXPECT_FALSE(bridge->isAccelerated()); | 236 EXPECT_FALSE(bridge->isAccelerated()); |
224 EXPECT_FALSE(snapshot->isTextureBacked()); | 237 EXPECT_FALSE(snapshot->isTextureBacked()); |
225 } | 238 } |
226 | 239 |
227 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 240 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
228 } | 241 } |
229 | 242 |
230 void noDrawOnContextLostTest() | 243 void noDrawOnContextLostTest() |
231 { | 244 { |
232 MockCanvasContext mainMock; | 245 MockCanvasContext mainMock; |
233 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new
MockWebGraphicsContext3DProvider(&mainMock)); | 246 MockGLES2Interface mockGL; |
| 247 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new
MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
234 | 248 |
235 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 249 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
236 | 250 |
237 { | 251 { |
238 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::For
ceAccelerationForTesting))); | 252 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::For
ceAccelerationForTesting))); |
239 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 253 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
240 EXPECT_TRUE(bridge->checkSurfaceValid()); | 254 EXPECT_TRUE(bridge->checkSurfaceValid()); |
241 SkPaint paint; | 255 SkPaint paint; |
242 uint32_t genID = bridge->getOrCreateSurface()->generationID(); | 256 uint32_t genID = bridge->getOrCreateSurface()->generationID(); |
243 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 257 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
244 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 258 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
245 mainMock.fakeContextLost(); | 259 mockGL.setIsContextLost(true); |
246 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 260 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
247 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 261 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
248 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 262 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
249 EXPECT_FALSE(bridge->checkSurfaceValid()); // This results in the in
ternal surface being torn down in response to the context loss | 263 EXPECT_FALSE(bridge->checkSurfaceValid()); // This results in the in
ternal surface being torn down in response to the context loss |
250 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); | 264 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); |
251 // The following passes by not crashing | 265 // The following passes by not crashing |
252 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 266 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
253 bridge->flush(); | 267 bridge->flush(); |
254 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 268 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
255 } | 269 } |
256 | 270 |
257 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 271 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
258 } | 272 } |
259 | 273 |
260 void prepareMailboxWithBitmapTest() | 274 void prepareMailboxWithBitmapTest() |
261 { | 275 { |
262 MockCanvasContext mainMock; | 276 MockCanvasContext mainMock; |
263 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new
MockWebGraphicsContext3DProvider(&mainMock)); | 277 MockGLES2Interface mockGL; |
| 278 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new
MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
264 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockP
rovider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAc
celerationForTesting))); | 279 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockP
rovider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAc
celerationForTesting))); |
265 bridge->m_lastImageId = 1; | 280 bridge->m_lastImageId = 1; |
266 | 281 |
267 NullWebExternalBitmap bitmap; | 282 NullWebExternalBitmap bitmap; |
268 bridge->prepareMailbox(0, &bitmap); | 283 bridge->prepareMailbox(0, &bitmap); |
269 EXPECT_EQ(0u, bridge->m_lastImageId); | 284 EXPECT_EQ(0u, bridge->m_lastImageId); |
270 } | 285 } |
271 | 286 |
272 void prepareMailboxAndLoseResourceTest() | 287 void prepareMailboxAndLoseResourceTest() |
273 { | 288 { |
274 MockCanvasContext mainMock; | 289 MockCanvasContext mainMock; |
| 290 MockGLES2Interface mockGL; |
275 bool lostResource = true; | 291 bool lostResource = true; |
276 | 292 |
277 // Prepare a mailbox, then report the resource as lost. | 293 // Prepare a mailbox, then report the resource as lost. |
278 // This test passes by not crashing and not triggering assertions. | 294 // This test passes by not crashing and not triggering assertions. |
279 { | 295 { |
280 WebExternalTextureMailbox mailbox; | 296 WebExternalTextureMailbox mailbox; |
281 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock)); | 297 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
282 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::For
ceAccelerationForTesting))); | 298 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::For
ceAccelerationForTesting))); |
283 bridge->prepareMailbox(&mailbox, 0); | 299 bridge->prepareMailbox(&mailbox, 0); |
284 bridge->mailboxReleased(mailbox, lostResource); | 300 bridge->mailboxReleased(mailbox, lostResource); |
285 } | 301 } |
286 | 302 |
287 // Retry with mailbox released while bridge destruction is in progress | 303 // Retry with mailbox released while bridge destruction is in progress |
288 { | 304 { |
289 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock)); | 305 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
290 WebExternalTextureMailbox mailbox; | 306 WebExternalTextureMailbox mailbox; |
291 Canvas2DLayerBridge* rawBridge; | 307 Canvas2DLayerBridge* rawBridge; |
292 { | 308 { |
293 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(m
ainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge:
:ForceAccelerationForTesting))); | 309 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(m
ainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge:
:ForceAccelerationForTesting))); |
294 bridge->prepareMailbox(&mailbox, 0); | 310 bridge->prepareMailbox(&mailbox, 0); |
295 rawBridge = bridge.get(); | 311 rawBridge = bridge.get(); |
296 } // bridge goes out of scope, but object is kept alive by self refe
rences | 312 } // bridge goes out of scope, but object is kept alive by self refe
rences |
297 // before fixing crbug.com/411864, the following line you cause a me
mory use after free | 313 // before fixing crbug.com/411864, the following line you cause a me
mory use after free |
298 // that sometimes causes a crash in normal builds and crashes consis
tently with ASAN. | 314 // that sometimes causes a crash in normal builds and crashes consis
tently with ASAN. |
299 rawBridge->mailboxReleased(mailbox, lostResource); // This should se
lf-destruct the bridge. | 315 rawBridge->mailboxReleased(mailbox, lostResource); // This should se
lf-destruct the bridge. |
300 } | 316 } |
301 } | 317 } |
302 | 318 |
303 void accelerationHintTest() | 319 void accelerationHintTest() |
304 { | 320 { |
305 MockCanvasContext mainMock; | 321 MockCanvasContext mainMock; |
| 322 MockGLES2Interface mockGL; |
306 { | 323 { |
307 | 324 |
308 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock)); | 325 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
309 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 326 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
310 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); | 327 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
311 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 328 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
312 SkPaint paint; | 329 SkPaint paint; |
313 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 330 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
314 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration,
SnapshotReasonUnknown); | 331 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration,
SnapshotReasonUnknown); |
315 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 332 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
316 EXPECT_TRUE(bridge->checkSurfaceValid()); | 333 EXPECT_TRUE(bridge->checkSurfaceValid()); |
317 EXPECT_TRUE(bridge->isAccelerated()); | 334 EXPECT_TRUE(bridge->isAccelerated()); |
318 } | 335 } |
319 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 336 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
320 | 337 |
321 { | 338 { |
322 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock)); | 339 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr
(new MockWebGraphicsContext3DProvider(&mainMock, &mockGL)); |
323 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 340 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
324 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); | 341 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainM
ockProvider.release(), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
325 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 342 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
326 SkPaint paint; | 343 SkPaint paint; |
327 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 344 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
328 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleratio
n, SnapshotReasonUnknown); | 345 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleratio
n, SnapshotReasonUnknown); |
329 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 346 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
330 EXPECT_TRUE(bridge->checkSurfaceValid()); | 347 EXPECT_TRUE(bridge->checkSurfaceValid()); |
331 EXPECT_FALSE(bridge->isAccelerated()); | 348 EXPECT_FALSE(bridge->isAccelerated()); |
332 } | 349 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 fallbackToSoftwareOnFailedTextureAlloc(); | 386 fallbackToSoftwareOnFailedTextureAlloc(); |
370 } | 387 } |
371 | 388 |
372 class MockLogger : public Canvas2DLayerBridge::Logger { | 389 class MockLogger : public Canvas2DLayerBridge::Logger { |
373 public: | 390 public: |
374 MOCK_METHOD1(reportHibernationEvent, void(Canvas2DLayerBridge::HibernationEv
ent)); | 391 MOCK_METHOD1(reportHibernationEvent, void(Canvas2DLayerBridge::HibernationEv
ent)); |
375 MOCK_METHOD0(didStartHibernating, void()); | 392 MOCK_METHOD0(didStartHibernating, void()); |
376 virtual ~MockLogger() { } | 393 virtual ~MockLogger() { } |
377 }; | 394 }; |
378 | 395 |
379 | 396 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, MockCanvasContext* m
ockCanvasContext, gpu::gles2::GLES2Interface* gl, Canvas2DLayerBridgeTest* testH
ost, WaitableEvent* doneEvent) |
380 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, MockCanvasContext* m
ockCanvasContext, Canvas2DLayerBridgeTest* testHost, WaitableEvent* doneEvent) | |
381 { | 397 { |
382 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new Moc
kWebGraphicsContext3DProvider(mockCanvasContext)); | 398 OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new Moc
kWebGraphicsContext3DProvider(mockCanvasContext, gl)); |
383 *bridgePtr = testHost->makeBridge(mainMockProvider.release(), IntSize(300, 3
00), Canvas2DLayerBridge::EnableAcceleration); | 399 *bridgePtr = testHost->makeBridge(mainMockProvider.release(), IntSize(300, 3
00), Canvas2DLayerBridge::EnableAcceleration); |
384 // draw+flush to trigger the creation of a GPU surface | 400 // draw+flush to trigger the creation of a GPU surface |
385 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); | 401 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); |
386 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); | 402 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); |
387 (*bridgePtr)->flush(); | 403 (*bridgePtr)->flush(); |
388 doneEvent->signal(); | 404 doneEvent->signal(); |
389 } | 405 } |
390 | 406 |
391 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* te
stThread, Canvas2DLayerBridgePtr* bridgePtr, MockCanvasContext* mockCanvasContex
t, Canvas2DLayerBridgeTest* testHost) | 407 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* te
stThread, Canvas2DLayerBridgePtr* bridgePtr, MockCanvasContext* mockCanvasContex
t, gpu::gles2::GLES2Interface* gl, Canvas2DLayerBridgeTest* testHost) |
392 { | 408 { |
393 OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent()); | 409 OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent()); |
394 testThread->getWebTaskRunner()->postTask( | 410 testThread->getWebTaskRunner()->postTask( |
395 location, | 411 location, |
396 threadSafeBind(&runCreateBridgeTask, | 412 threadSafeBind(&runCreateBridgeTask, |
397 AllowCrossThreadAccess(bridgePtr), | 413 AllowCrossThreadAccess(bridgePtr), |
398 AllowCrossThreadAccess(mockCanvasContext), | 414 AllowCrossThreadAccess(mockCanvasContext), |
| 415 AllowCrossThreadAccess(gl), |
399 AllowCrossThreadAccess(testHost), | 416 AllowCrossThreadAccess(testHost), |
400 AllowCrossThreadAccess(bridgeCreatedEvent.get()))); | 417 AllowCrossThreadAccess(bridgeCreatedEvent.get()))); |
401 bridgeCreatedEvent->wait(); | 418 bridgeCreatedEvent->wait(); |
402 } | 419 } |
403 | 420 |
404 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, WaitableEvent* done
Event) | 421 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, WaitableEvent* done
Event) |
405 { | 422 { |
406 bridgePtr->clear(); | 423 bridgePtr->clear(); |
407 if (doneEvent) | 424 if (doneEvent) |
408 doneEvent->signal(); | 425 doneEvent->signal(); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 virtual ~MockImageBuffer() { } | 479 virtual ~MockImageBuffer() { } |
463 }; | 480 }; |
464 | 481 |
465 #if CANVAS2D_HIBERNATION_ENABLED | 482 #if CANVAS2D_HIBERNATION_ENABLED |
466 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycle) | 483 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycle) |
467 #else | 484 #else |
468 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycle) | 485 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycle) |
469 #endif | 486 #endif |
470 { | 487 { |
471 MockCanvasContext mainMock; | 488 MockCanvasContext mainMock; |
| 489 MockGLES2Interface mockGL; |
472 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 490 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
473 | 491 |
474 // The Canvas2DLayerBridge has to be created on the thread that will use it | 492 // The Canvas2DLayerBridge has to be created on the thread that will use it |
475 // to avoid WeakPtr thread check issues. | 493 // to avoid WeakPtr thread check issues. |
476 Canvas2DLayerBridgePtr bridge; | 494 Canvas2DLayerBridgePtr bridge; |
477 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 495 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
478 | 496 |
479 // Register an alternate Logger for tracking hibernation events | 497 // Register an alternate Logger for tracking hibernation events |
480 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 498 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
481 MockLogger* mockLoggerPtr = mockLogger.get(); | 499 MockLogger* mockLoggerPtr = mockLogger.get(); |
482 bridge->setLoggerForTesting(mockLogger.release()); | 500 bridge->setLoggerForTesting(mockLogger.release()); |
483 | 501 |
484 // Test entering hibernation | 502 // Test entering hibernation |
485 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 503 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
486 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 504 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
487 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 505 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
(...skipping 20 matching lines...) Expand all Loading... |
508 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 526 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
509 } | 527 } |
510 | 528 |
511 #if CANVAS2D_HIBERNATION_ENABLED | 529 #if CANVAS2D_HIBERNATION_ENABLED |
512 TEST_F(Canvas2DLayerBridgeTest, HibernationReEntry) | 530 TEST_F(Canvas2DLayerBridgeTest, HibernationReEntry) |
513 #else | 531 #else |
514 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationReEntry) | 532 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationReEntry) |
515 #endif | 533 #endif |
516 { | 534 { |
517 MockCanvasContext mainMock; | 535 MockCanvasContext mainMock; |
| 536 MockGLES2Interface mockGL; |
518 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 537 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
519 | 538 |
520 // The Canvas2DLayerBridge has to be created on the thread that will use it | 539 // The Canvas2DLayerBridge has to be created on the thread that will use it |
521 // to avoid WeakPtr thread check issues. | 540 // to avoid WeakPtr thread check issues. |
522 Canvas2DLayerBridgePtr bridge; | 541 Canvas2DLayerBridgePtr bridge; |
523 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 542 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
524 | 543 |
525 // Register an alternate Logger for tracking hibernation events | 544 // Register an alternate Logger for tracking hibernation events |
526 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 545 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
527 MockLogger* mockLoggerPtr = mockLogger.get(); | 546 MockLogger* mockLoggerPtr = mockLogger.get(); |
528 bridge->setLoggerForTesting(mockLogger.release()); | 547 bridge->setLoggerForTesting(mockLogger.release()); |
529 | 548 |
530 // Test entering hibernation | 549 // Test entering hibernation |
531 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 550 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
532 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 551 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
533 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 552 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
(...skipping 26 matching lines...) Expand all Loading... |
560 | 579 |
561 } | 580 } |
562 | 581 |
563 #if CANVAS2D_HIBERNATION_ENABLED | 582 #if CANVAS2D_HIBERNATION_ENABLED |
564 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycleWithDeferredRenderingDisable
d) | 583 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycleWithDeferredRenderingDisable
d) |
565 #else | 584 #else |
566 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycleWithDeferredRenderi
ngDisabled) | 585 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycleWithDeferredRenderi
ngDisabled) |
567 #endif | 586 #endif |
568 { | 587 { |
569 MockCanvasContext mainMock; | 588 MockCanvasContext mainMock; |
| 589 MockGLES2Interface mockGL; |
570 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 590 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
571 | 591 |
572 // The Canvas2DLayerBridge has to be created on the thread that will use it | 592 // The Canvas2DLayerBridge has to be created on the thread that will use it |
573 // to avoid WeakPtr thread check issues. | 593 // to avoid WeakPtr thread check issues. |
574 Canvas2DLayerBridgePtr bridge; | 594 Canvas2DLayerBridgePtr bridge; |
575 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 595 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
576 bridge->disableDeferral(DisableDeferralReasonUnknown); | 596 bridge->disableDeferral(DisableDeferralReasonUnknown); |
577 MockImageBuffer mockImageBuffer; | 597 MockImageBuffer mockImageBuffer; |
578 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 598 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
579 bridge->setImageBuffer(&mockImageBuffer); | 599 bridge->setImageBuffer(&mockImageBuffer); |
580 | 600 |
581 // Register an alternate Logger for tracking hibernation events | 601 // Register an alternate Logger for tracking hibernation events |
582 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 602 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
583 MockLogger* mockLoggerPtr = mockLogger.get(); | 603 MockLogger* mockLoggerPtr = mockLogger.get(); |
584 bridge->setLoggerForTesting(mockLogger.release()); | 604 bridge->setLoggerForTesting(mockLogger.release()); |
585 | 605 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
632 doneEvent->wait(); | 652 doneEvent->wait(); |
633 } | 653 } |
634 | 654 |
635 #if CANVAS2D_HIBERNATION_ENABLED | 655 #if CANVAS2D_HIBERNATION_ENABLED |
636 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating) | 656 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating) |
637 #else | 657 #else |
638 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernating) | 658 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernating) |
639 #endif | 659 #endif |
640 { | 660 { |
641 MockCanvasContext mainMock; | 661 MockCanvasContext mainMock; |
| 662 MockGLES2Interface mockGL; |
642 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 663 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
643 | 664 |
644 // The Canvas2DLayerBridge has to be created on the thread that will use it | 665 // The Canvas2DLayerBridge has to be created on the thread that will use it |
645 // to avoid WeakPtr thread check issues. | 666 // to avoid WeakPtr thread check issues. |
646 Canvas2DLayerBridgePtr bridge; | 667 Canvas2DLayerBridgePtr bridge; |
647 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 668 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
648 | 669 |
649 // Register an alternate Logger for tracking hibernation events | 670 // Register an alternate Logger for tracking hibernation events |
650 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 671 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
651 MockLogger* mockLoggerPtr = mockLogger.get(); | 672 MockLogger* mockLoggerPtr = mockLogger.get(); |
652 bridge->setLoggerForTesting(mockLogger.release()); | 673 bridge->setLoggerForTesting(mockLogger.release()); |
653 | 674 |
654 // Test entering hibernation | 675 // Test entering hibernation |
655 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 676 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
656 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 677 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
657 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 678 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
(...skipping 27 matching lines...) Expand all Loading... |
685 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 706 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
686 } | 707 } |
687 | 708 |
688 #if CANVAS2D_HIBERNATION_ENABLED | 709 #if CANVAS2D_HIBERNATION_ENABLED |
689 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernatingWithDeferredR
enderingDisabled) | 710 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernatingWithDeferredR
enderingDisabled) |
690 #else | 711 #else |
691 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernatingWith
DeferredRenderingDisabled) | 712 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernatingWith
DeferredRenderingDisabled) |
692 #endif | 713 #endif |
693 { | 714 { |
694 MockCanvasContext mainMock; | 715 MockCanvasContext mainMock; |
| 716 MockGLES2Interface mockGL; |
695 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 717 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
696 | 718 |
697 // The Canvas2DLayerBridge has to be created on the thread that will use it | 719 // The Canvas2DLayerBridge has to be created on the thread that will use it |
698 // to avoid WeakPtr thread check issues. | 720 // to avoid WeakPtr thread check issues. |
699 Canvas2DLayerBridgePtr bridge; | 721 Canvas2DLayerBridgePtr bridge; |
700 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 722 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
701 MockImageBuffer mockImageBuffer; | 723 MockImageBuffer mockImageBuffer; |
702 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 724 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
703 bridge->setImageBuffer(&mockImageBuffer); | 725 bridge->setImageBuffer(&mockImageBuffer); |
704 bridge->disableDeferral(DisableDeferralReasonUnknown); | 726 bridge->disableDeferral(DisableDeferralReasonUnknown); |
705 | 727 |
706 // Register an alternate Logger for tracking hibernation events | 728 // Register an alternate Logger for tracking hibernation events |
707 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 729 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
708 MockLogger* mockLoggerPtr = mockLogger.get(); | 730 MockLogger* mockLoggerPtr = mockLogger.get(); |
709 bridge->setLoggerForTesting(mockLogger.release()); | 731 bridge->setLoggerForTesting(mockLogger.release()); |
710 | 732 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 768 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
747 } | 769 } |
748 | 770 |
749 #if CANVAS2D_HIBERNATION_ENABLED | 771 #if CANVAS2D_HIBERNATION_ENABLED |
750 TEST_F(Canvas2DLayerBridgeTest, DisableDeferredRenderingWhileHibernating) | 772 TEST_F(Canvas2DLayerBridgeTest, DisableDeferredRenderingWhileHibernating) |
751 #else | 773 #else |
752 TEST_F(Canvas2DLayerBridgeTest, DISABLED_DisableDeferredRenderingWhileHibernatin
g) | 774 TEST_F(Canvas2DLayerBridgeTest, DISABLED_DisableDeferredRenderingWhileHibernatin
g) |
753 #endif | 775 #endif |
754 { | 776 { |
755 MockCanvasContext mainMock; | 777 MockCanvasContext mainMock; |
| 778 MockGLES2Interface mockGL; |
756 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 779 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
757 | 780 |
758 // The Canvas2DLayerBridge has to be created on the thread that will use it | 781 // The Canvas2DLayerBridge has to be created on the thread that will use it |
759 // to avoid WeakPtr thread check issues. | 782 // to avoid WeakPtr thread check issues. |
760 Canvas2DLayerBridgePtr bridge; | 783 Canvas2DLayerBridgePtr bridge; |
761 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 784 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
762 MockImageBuffer mockImageBuffer; | 785 MockImageBuffer mockImageBuffer; |
763 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 786 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
764 bridge->setImageBuffer(&mockImageBuffer); | 787 bridge->setImageBuffer(&mockImageBuffer); |
765 | 788 |
766 // Register an alternate Logger for tracking hibernation events | 789 // Register an alternate Logger for tracking hibernation events |
767 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 790 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
768 MockLogger* mockLoggerPtr = mockLogger.get(); | 791 MockLogger* mockLoggerPtr = mockLogger.get(); |
769 bridge->setLoggerForTesting(mockLogger.release()); | 792 bridge->setLoggerForTesting(mockLogger.release()); |
770 | 793 |
771 // Test entering hibernation | 794 // Test entering hibernation |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
806 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 829 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
807 } | 830 } |
808 | 831 |
809 #if CANVAS2D_HIBERNATION_ENABLED | 832 #if CANVAS2D_HIBERNATION_ENABLED |
810 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating) | 833 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating) |
811 #else | 834 #else |
812 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernating) | 835 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernating) |
813 #endif | 836 #endif |
814 { | 837 { |
815 MockCanvasContext mainMock; | 838 MockCanvasContext mainMock; |
| 839 MockGLES2Interface mockGL; |
816 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 840 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
817 | 841 |
818 // The Canvas2DLayerBridge has to be created on the thread that will use it | 842 // The Canvas2DLayerBridge has to be created on the thread that will use it |
819 // to avoid WeakPtr thread check issues. | 843 // to avoid WeakPtr thread check issues. |
820 Canvas2DLayerBridgePtr bridge; | 844 Canvas2DLayerBridgePtr bridge; |
821 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 845 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
822 | 846 |
823 // Register an alternate Logger for tracking hibernation events | 847 // Register an alternate Logger for tracking hibernation events |
824 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 848 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
825 MockLogger* mockLoggerPtr = mockLogger.get(); | 849 MockLogger* mockLoggerPtr = mockLogger.get(); |
826 bridge->setLoggerForTesting(mockLogger.release()); | 850 bridge->setLoggerForTesting(mockLogger.release()); |
827 | 851 |
828 // Test entering hibernation | 852 // Test entering hibernation |
829 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 853 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
830 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 854 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
831 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 855 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
(...skipping 29 matching lines...) Expand all Loading... |
861 WaitableEvent* m_doneEvent; | 885 WaitableEvent* m_doneEvent; |
862 }; | 886 }; |
863 | 887 |
864 #if CANVAS2D_HIBERNATION_ENABLED | 888 #if CANVAS2D_HIBERNATION_ENABLED |
865 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernationIsPending) | 889 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernationIsPending) |
866 #else | 890 #else |
867 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernationIsPending) | 891 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernationIsPending) |
868 #endif | 892 #endif |
869 { | 893 { |
870 MockCanvasContext mainMock; | 894 MockCanvasContext mainMock; |
| 895 MockGLES2Interface mockGL; |
871 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 896 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
872 | 897 |
873 // The Canvas2DLayerBridge has to be created on the thread that will use it | 898 // The Canvas2DLayerBridge has to be created on the thread that will use it |
874 // to avoid WeakPtr thread check issues. | 899 // to avoid WeakPtr thread check issues. |
875 Canvas2DLayerBridgePtr bridge; | 900 Canvas2DLayerBridgePtr bridge; |
876 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 901 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
877 | 902 |
878 // Register an alternate Logger for tracking hibernation events | 903 // Register an alternate Logger for tracking hibernation events |
879 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 904 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
880 MockLogger* mockLoggerPtr = mockLogger.get(); | 905 MockLogger* mockLoggerPtr = mockLogger.get(); |
881 bridge->setLoggerForTesting(mockLogger.release()); | 906 bridge->setLoggerForTesting(mockLogger.release()); |
882 | 907 |
883 // Test entering hibernation | 908 // Test entering hibernation |
884 OwnPtr<WaitableEvent> hibernationScheduledEvent = adoptPtr(new WaitableEvent
()); | 909 OwnPtr<WaitableEvent> hibernationScheduledEvent = adoptPtr(new WaitableEvent
()); |
885 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 910 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
886 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, h
ibernationScheduledEvent.get()); | 911 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, h
ibernationScheduledEvent.get()); |
(...skipping 16 matching lines...) Expand all Loading... |
903 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 928 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
904 } | 929 } |
905 | 930 |
906 #if CANVAS2D_HIBERNATION_ENABLED | 931 #if CANVAS2D_HIBERNATION_ENABLED |
907 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToPendingTeardown) | 932 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToPendingTeardown) |
908 #else | 933 #else |
909 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToPendingTeardown) | 934 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToPendingTeardown) |
910 #endif | 935 #endif |
911 { | 936 { |
912 MockCanvasContext mainMock; | 937 MockCanvasContext mainMock; |
| 938 MockGLES2Interface mockGL; |
913 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 939 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
914 | 940 |
915 // The Canvas2DLayerBridge has to be created on the thread that will use it | 941 // The Canvas2DLayerBridge has to be created on the thread that will use it |
916 // to avoid WeakPtr thread check issues. | 942 // to avoid WeakPtr thread check issues. |
917 Canvas2DLayerBridgePtr bridge; | 943 Canvas2DLayerBridgePtr bridge; |
918 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 944 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
919 | 945 |
920 // Register an alternate Logger for tracking hibernation events | 946 // Register an alternate Logger for tracking hibernation events |
921 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 947 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
922 MockLogger* mockLoggerPtr = mockLogger.get(); | 948 MockLogger* mockLoggerPtr = mockLogger.get(); |
923 bridge->setLoggerForTesting(mockLogger.release()); | 949 bridge->setLoggerForTesting(mockLogger.release()); |
924 | 950 |
925 // Test entering hibernation | 951 // Test entering hibernation |
926 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); | 952 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); |
927 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 953 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
928 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToPendingDestruction)) | 954 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToPendingDestruction)) |
(...skipping 10 matching lines...) Expand all Loading... |
939 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 965 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
940 } | 966 } |
941 | 967 |
942 #if CANVAS2D_HIBERNATION_ENABLED | 968 #if CANVAS2D_HIBERNATION_ENABLED |
943 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) | 969 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) |
944 #else | 970 #else |
945 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToVisibilityChange
) | 971 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToVisibilityChange
) |
946 #endif | 972 #endif |
947 { | 973 { |
948 MockCanvasContext mainMock; | 974 MockCanvasContext mainMock; |
| 975 MockGLES2Interface mockGL; |
949 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 976 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
950 | 977 |
951 // The Canvas2DLayerBridge has to be created on the thread that will use it | 978 // The Canvas2DLayerBridge has to be created on the thread that will use it |
952 // to avoid WeakPtr thread check issues. | 979 // to avoid WeakPtr thread check issues. |
953 Canvas2DLayerBridgePtr bridge; | 980 Canvas2DLayerBridgePtr bridge; |
954 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 981 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
955 | 982 |
956 // Register an alternate Logger for tracking hibernation events | 983 // Register an alternate Logger for tracking hibernation events |
957 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 984 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
958 MockLogger* mockLoggerPtr = mockLogger.get(); | 985 MockLogger* mockLoggerPtr = mockLogger.get(); |
959 bridge->setLoggerForTesting(mockLogger.release()); | 986 bridge->setLoggerForTesting(mockLogger.release()); |
960 | 987 |
961 // Test entering hibernation | 988 // Test entering hibernation |
962 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); | 989 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); |
963 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 990 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
964 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToVisibilityChange)) | 991 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToVisibilityChange)) |
(...skipping 13 matching lines...) Expand all Loading... |
978 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 1005 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
979 } | 1006 } |
980 | 1007 |
981 #if CANVAS2D_HIBERNATION_ENABLED | 1008 #if CANVAS2D_HIBERNATION_ENABLED |
982 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToLostContext) | 1009 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToLostContext) |
983 #else | 1010 #else |
984 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToLostContext) | 1011 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToLostContext) |
985 #endif | 1012 #endif |
986 { | 1013 { |
987 MockCanvasContext mainMock; | 1014 MockCanvasContext mainMock; |
| 1015 MockGLES2Interface mockGL; |
988 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 1016 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
989 | 1017 |
990 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1018 // The Canvas2DLayerBridge has to be created on the thread that will use it |
991 // to avoid WeakPtr thread check issues. | 1019 // to avoid WeakPtr thread check issues. |
992 Canvas2DLayerBridgePtr bridge; | 1020 Canvas2DLayerBridgePtr bridge; |
993 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 1021 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
994 | 1022 |
995 // Register an alternate Logger for tracking hibernation events | 1023 // Register an alternate Logger for tracking hibernation events |
996 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 1024 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
997 MockLogger* mockLoggerPtr = mockLogger.get(); | 1025 MockLogger* mockLoggerPtr = mockLogger.get(); |
998 bridge->setLoggerForTesting(mockLogger.release()); | 1026 bridge->setLoggerForTesting(mockLogger.release()); |
999 | 1027 |
1000 mainMock.fakeContextLost(); | 1028 mockGL.setIsContextLost(true); |
1001 // Test entering hibernation | 1029 // Test entering hibernation |
1002 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); | 1030 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); |
1003 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 1031 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
1004 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueGpuContextLoss)) | 1032 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueGpuContextLoss)) |
1005 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); | 1033 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); |
1006 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1034 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
1007 hibernationAbortedEvent->wait(); | 1035 hibernationAbortedEvent->wait(); |
1008 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1036 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
1009 EXPECT_FALSE(bridge->isHibernating()); | 1037 EXPECT_FALSE(bridge->isHibernating()); |
1010 | 1038 |
1011 // Tear down the bridge on the thread so that 'bridge' can go out of scope | 1039 // Tear down the bridge on the thread so that 'bridge' can go out of scope |
1012 // without crashing due to thread checks | 1040 // without crashing due to thread checks |
1013 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1041 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
1014 | 1042 |
1015 ::testing::Mock::VerifyAndClearExpectations(&mainMock); | 1043 ::testing::Mock::VerifyAndClearExpectations(&mainMock); |
1016 } | 1044 } |
1017 | 1045 |
1018 #if CANVAS2D_HIBERNATION_ENABLED | 1046 #if CANVAS2D_HIBERNATION_ENABLED |
1019 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileHibernating) | 1047 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileHibernating) |
1020 #else | 1048 #else |
1021 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileHibernating) | 1049 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileHibernating) |
1022 #endif | 1050 #endif |
1023 { | 1051 { |
1024 MockCanvasContext mainMock; | 1052 MockCanvasContext mainMock; |
| 1053 MockGLES2Interface mockGL; |
1025 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 1054 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
1026 | 1055 |
1027 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1056 // The Canvas2DLayerBridge has to be created on the thread that will use it |
1028 // to avoid WeakPtr thread check issues. | 1057 // to avoid WeakPtr thread check issues. |
1029 Canvas2DLayerBridgePtr bridge; | 1058 Canvas2DLayerBridgePtr bridge; |
1030 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 1059 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
1031 | 1060 |
1032 // Register an alternate Logger for tracking hibernation events | 1061 // Register an alternate Logger for tracking hibernation events |
1033 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 1062 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
1034 MockLogger* mockLoggerPtr = mockLogger.get(); | 1063 MockLogger* mockLoggerPtr = mockLogger.get(); |
1035 bridge->setLoggerForTesting(mockLogger.release()); | 1064 bridge->setLoggerForTesting(mockLogger.release()); |
1036 | 1065 |
1037 // Test entering hibernation | 1066 // Test entering hibernation |
1038 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 1067 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
1039 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 1068 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
1040 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 1069 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
(...skipping 13 matching lines...) Expand all Loading... |
1054 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1083 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
1055 } | 1084 } |
1056 | 1085 |
1057 #if CANVAS2D_HIBERNATION_ENABLED | 1086 #if CANVAS2D_HIBERNATION_ENABLED |
1058 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileBackgroundRendering) | 1087 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileBackgroundRendering) |
1059 #else | 1088 #else |
1060 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileBackgroundRendering) | 1089 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileBackgroundRendering) |
1061 #endif | 1090 #endif |
1062 { | 1091 { |
1063 MockCanvasContext mainMock; | 1092 MockCanvasContext mainMock; |
| 1093 MockGLES2Interface mockGL; |
1064 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 1094 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
1065 | 1095 |
1066 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1096 // The Canvas2DLayerBridge has to be created on the thread that will use it |
1067 // to avoid WeakPtr thread check issues. | 1097 // to avoid WeakPtr thread check issues. |
1068 Canvas2DLayerBridgePtr bridge; | 1098 Canvas2DLayerBridgePtr bridge; |
1069 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, this); | 1099 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &mai
nMock, &mockGL, this); |
1070 | 1100 |
1071 // Register an alternate Logger for tracking hibernation events | 1101 // Register an alternate Logger for tracking hibernation events |
1072 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 1102 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
1073 MockLogger* mockLoggerPtr = mockLogger.get(); | 1103 MockLogger* mockLoggerPtr = mockLogger.get(); |
1074 bridge->setLoggerForTesting(mockLogger.release()); | 1104 bridge->setLoggerForTesting(mockLogger.release()); |
1075 | 1105 |
1076 // Test entering hibernation | 1106 // Test entering hibernation |
1077 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 1107 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
1078 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 1108 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
1079 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 1109 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
(...skipping 14 matching lines...) Expand all Loading... |
1094 WebExternalTextureMailbox mailbox; | 1124 WebExternalTextureMailbox mailbox; |
1095 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0)); | 1125 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0)); |
1096 EXPECT_TRUE(bridge->checkSurfaceValid()); | 1126 EXPECT_TRUE(bridge->checkSurfaceValid()); |
1097 | 1127 |
1098 // Tear down the bridge on the thread so that 'bridge' can go out of scope | 1128 // Tear down the bridge on the thread so that 'bridge' can go out of scope |
1099 // without crashing due to thread checks | 1129 // without crashing due to thread checks |
1100 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1130 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
1101 } | 1131 } |
1102 | 1132 |
1103 } // namespace blink | 1133 } // namespace blink |
OLD | NEW |