Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp

Issue 1790753002: Expose GLES2Interface to blink, and delete isContextLost() from WGC3D. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wgc3d: deps-for-tests Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp ('k') | third_party/WebKit/Source/platform/graphics/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698