| 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 |