| 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 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 { | 154 { |
| 155 return adoptRef(new Canvas2DLayerBridge(std::move(provider), size, 0, No
nOpaque, accelerationMode)); | 155 return adoptRef(new Canvas2DLayerBridge(std::move(provider), size, 0, No
nOpaque, accelerationMode)); |
| 156 } | 156 } |
| 157 | 157 |
| 158 protected: | 158 protected: |
| 159 void fullLifecycleTest() | 159 void fullLifecycleTest() |
| 160 { | 160 { |
| 161 FakeGLES2Interface gl; | 161 FakeGLES2Interface gl; |
| 162 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new
FakeWebGraphicsContext3DProvider(&gl)); | 162 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new
FakeWebGraphicsContext3DProvider(&gl)); |
| 163 | 163 |
| 164 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(contextPr
ovider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::DisableA
cceleration))); | 164 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move
(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Disable
Acceleration))); |
| 165 | 165 |
| 166 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureI
nfo(bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown)->getText
ureHandle(true)); | 166 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureI
nfo(bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown)->getText
ureHandle(true)); |
| 167 EXPECT_EQ(textureInfo, nullptr); | 167 EXPECT_EQ(textureInfo, nullptr); |
| 168 bridge.clear(); | 168 bridge.clear(); |
| 169 } | 169 } |
| 170 | 170 |
| 171 void fallbackToSoftwareIfContextLost() | 171 void fallbackToSoftwareIfContextLost() |
| 172 { | 172 { |
| 173 FakeGLES2Interface gl; | 173 FakeGLES2Interface gl; |
| 174 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new
FakeWebGraphicsContext3DProvider(&gl)); | 174 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new
FakeWebGraphicsContext3DProvider(&gl)); |
| 175 | 175 |
| 176 gl.setIsContextLost(true); | 176 gl.setIsContextLost(true); |
| 177 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(contextPr
ovider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableAc
celeration))); | 177 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move
(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableA
cceleration))); |
| 178 EXPECT_TRUE(bridge->checkSurfaceValid()); | 178 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 179 EXPECT_FALSE(bridge->isAccelerated()); | 179 EXPECT_FALSE(bridge->isAccelerated()); |
| 180 } | 180 } |
| 181 | 181 |
| 182 void fallbackToSoftwareOnFailedTextureAlloc() | 182 void fallbackToSoftwareOnFailedTextureAlloc() |
| 183 { | 183 { |
| 184 { | 184 { |
| 185 // No fallback case. | 185 // No fallback case. |
| 186 FakeGLES2Interface gl; | 186 FakeGLES2Interface gl; |
| 187 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); | 187 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); |
| 188 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(conte
xtProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Enab
leAcceleration))); | 188 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::
move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
| 189 EXPECT_TRUE(bridge->checkSurfaceValid()); | 189 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 190 EXPECT_TRUE(bridge->isAccelerated()); | 190 EXPECT_TRUE(bridge->isAccelerated()); |
| 191 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati
on, SnapshotReasonUnknown); | 191 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati
on, SnapshotReasonUnknown); |
| 192 EXPECT_TRUE(bridge->isAccelerated()); | 192 EXPECT_TRUE(bridge->isAccelerated()); |
| 193 EXPECT_TRUE(snapshot->isTextureBacked()); | 193 EXPECT_TRUE(snapshot->isTextureBacked()); |
| 194 } | 194 } |
| 195 | 195 |
| 196 { | 196 { |
| 197 // Fallback case. | 197 // Fallback case. |
| 198 FakeGLES2Interface gl; | 198 FakeGLES2Interface gl; |
| 199 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); | 199 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); |
| 200 GrContext* gr = contextProvider->grContext(); | 200 GrContext* gr = contextProvider->grContext(); |
| 201 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(conte
xtProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Enab
leAcceleration))); | 201 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::
move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
| 202 EXPECT_TRUE(bridge->checkSurfaceValid()); | 202 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 203 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that allo
cation will fail | 203 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that allo
cation will fail |
| 204 // This will cause SkSurface_Gpu creation to fail without | 204 // This will cause SkSurface_Gpu creation to fail without |
| 205 // Canvas2DLayerBridge otherwise detecting that anything was disable
d. | 205 // Canvas2DLayerBridge otherwise detecting that anything was disable
d. |
| 206 gr->abandonContext(); | 206 gr->abandonContext(); |
| 207 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati
on, SnapshotReasonUnknown); | 207 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati
on, SnapshotReasonUnknown); |
| 208 EXPECT_FALSE(bridge->isAccelerated()); | 208 EXPECT_FALSE(bridge->isAccelerated()); |
| 209 EXPECT_FALSE(snapshot->isTextureBacked()); | 209 EXPECT_FALSE(snapshot->isTextureBacked()); |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 | 212 |
| 213 void noDrawOnContextLostTest() | 213 void noDrawOnContextLostTest() |
| 214 { | 214 { |
| 215 FakeGLES2Interface gl; | 215 FakeGLES2Interface gl; |
| 216 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new
FakeWebGraphicsContext3DProvider(&gl)); | 216 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new
FakeWebGraphicsContext3DProvider(&gl)); |
| 217 | 217 |
| 218 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(contextPr
ovider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAcc
elerationForTesting))); | 218 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move
(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAc
celerationForTesting))); |
| 219 EXPECT_TRUE(bridge->checkSurfaceValid()); | 219 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 220 SkPaint paint; | 220 SkPaint paint; |
| 221 uint32_t genID = bridge->getOrCreateSurface()->generationID(); | 221 uint32_t genID = bridge->getOrCreateSurface()->generationID(); |
| 222 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 222 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 223 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 223 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
| 224 gl.setIsContextLost(true); | 224 gl.setIsContextLost(true); |
| 225 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 225 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
| 226 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 226 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 227 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 227 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
| 228 // This results in the internal surface being torn down in response to t
he context loss. | 228 // This results in the internal surface being torn down in response to t
he context loss. |
| 229 EXPECT_FALSE(bridge->checkSurfaceValid()); | 229 EXPECT_FALSE(bridge->checkSurfaceValid()); |
| 230 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); | 230 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); |
| 231 // The following passes by not crashing | 231 // The following passes by not crashing |
| 232 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 232 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 233 bridge->flush(); | 233 bridge->flush(); |
| 234 } | 234 } |
| 235 | 235 |
| 236 void prepareMailboxWithBitmapTest() | 236 void prepareMailboxWithBitmapTest() |
| 237 { | 237 { |
| 238 FakeGLES2Interface gl; | 238 FakeGLES2Interface gl; |
| 239 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new
FakeWebGraphicsContext3DProvider(&gl)); | 239 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new
FakeWebGraphicsContext3DProvider(&gl)); |
| 240 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(contextPr
ovider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAcc
elerationForTesting))); | 240 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move
(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAc
celerationForTesting))); |
| 241 bridge->m_lastImageId = 1; | 241 bridge->m_lastImageId = 1; |
| 242 | 242 |
| 243 NullWebExternalBitmap bitmap; | 243 NullWebExternalBitmap bitmap; |
| 244 bridge->prepareMailbox(0, &bitmap); | 244 bridge->prepareMailbox(0, &bitmap); |
| 245 EXPECT_EQ(0u, bridge->m_lastImageId); | 245 EXPECT_EQ(0u, bridge->m_lastImageId); |
| 246 } | 246 } |
| 247 | 247 |
| 248 void prepareMailboxAndLoseResourceTest() | 248 void prepareMailboxAndLoseResourceTest() |
| 249 { | 249 { |
| 250 bool lostResource = true; | 250 bool lostResource = true; |
| 251 | 251 |
| 252 // Prepare a mailbox, then report the resource as lost. | 252 // Prepare a mailbox, then report the resource as lost. |
| 253 // This test passes by not crashing and not triggering assertions. | 253 // This test passes by not crashing and not triggering assertions. |
| 254 { | 254 { |
| 255 FakeGLES2Interface gl; | 255 FakeGLES2Interface gl; |
| 256 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); | 256 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); |
| 257 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(conte
xtProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Forc
eAccelerationForTesting))); | 257 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::
move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::For
ceAccelerationForTesting))); |
| 258 WebExternalTextureMailbox mailbox; | 258 WebExternalTextureMailbox mailbox; |
| 259 bridge->prepareMailbox(&mailbox, 0); | 259 bridge->prepareMailbox(&mailbox, 0); |
| 260 bridge->mailboxReleased(mailbox, lostResource); | 260 bridge->mailboxReleased(mailbox, lostResource); |
| 261 } | 261 } |
| 262 | 262 |
| 263 // Retry with mailbox released while bridge destruction is in progress. | 263 // Retry with mailbox released while bridge destruction is in progress. |
| 264 { | 264 { |
| 265 FakeGLES2Interface gl; | 265 FakeGLES2Interface gl; |
| 266 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); | 266 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); |
| 267 WebExternalTextureMailbox mailbox; | 267 WebExternalTextureMailbox mailbox; |
| 268 Canvas2DLayerBridge* rawBridge; | 268 Canvas2DLayerBridge* rawBridge; |
| 269 { | 269 { |
| 270 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(c
ontextProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::
ForceAccelerationForTesting))); | 270 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(s
td::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge:
:ForceAccelerationForTesting))); |
| 271 bridge->prepareMailbox(&mailbox, 0); | 271 bridge->prepareMailbox(&mailbox, 0); |
| 272 rawBridge = bridge.get(); | 272 rawBridge = bridge.get(); |
| 273 } // bridge goes out of scope, but object is kept alive by self refe
rences. | 273 } // bridge goes out of scope, but object is kept alive by self refe
rences. |
| 274 // Before fixing crbug.com/411864, the following line you cause a me
mory use after free | 274 // Before fixing crbug.com/411864, the following line you cause a me
mory use after free |
| 275 // that sometimes causes a crash in normal builds and crashes consis
tently with ASAN. | 275 // that sometimes causes a crash in normal builds and crashes consis
tently with ASAN. |
| 276 rawBridge->mailboxReleased(mailbox, lostResource); // This should se
lf-destruct the bridge. | 276 rawBridge->mailboxReleased(mailbox, lostResource); // This should se
lf-destruct the bridge. |
| 277 } | 277 } |
| 278 } | 278 } |
| 279 | 279 |
| 280 void accelerationHintTest() | 280 void accelerationHintTest() |
| 281 { | 281 { |
| 282 { | 282 { |
| 283 FakeGLES2Interface gl; | 283 FakeGLES2Interface gl; |
| 284 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); | 284 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); |
| 285 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(conte
xtProvider.release(), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Enab
leAcceleration))); | 285 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::
move(contextProvider), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
| 286 SkPaint paint; | 286 SkPaint paint; |
| 287 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 287 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 288 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration,
SnapshotReasonUnknown); | 288 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration,
SnapshotReasonUnknown); |
| 289 EXPECT_TRUE(bridge->checkSurfaceValid()); | 289 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 290 EXPECT_TRUE(bridge->isAccelerated()); | 290 EXPECT_TRUE(bridge->isAccelerated()); |
| 291 } | 291 } |
| 292 | 292 |
| 293 { | 293 { |
| 294 FakeGLES2Interface gl; | 294 FakeGLES2Interface gl; |
| 295 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); | 295 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(
new FakeWebGraphicsContext3DProvider(&gl)); |
| 296 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(conte
xtProvider.release(), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Enab
leAcceleration))); | 296 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::
move(contextProvider), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena
bleAcceleration))); |
| 297 SkPaint paint; | 297 SkPaint paint; |
| 298 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 298 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
| 299 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleratio
n, SnapshotReasonUnknown); | 299 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleratio
n, SnapshotReasonUnknown); |
| 300 EXPECT_TRUE(bridge->checkSurfaceValid()); | 300 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 301 EXPECT_FALSE(bridge->isAccelerated()); | 301 EXPECT_FALSE(bridge->isAccelerated()); |
| 302 } | 302 } |
| 303 } | 303 } |
| 304 }; | 304 }; |
| 305 | 305 |
| 306 TEST_F(Canvas2DLayerBridgeTest, FullLifecycleSingleThreaded) | 306 TEST_F(Canvas2DLayerBridgeTest, FullLifecycleSingleThreaded) |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 class MockLogger : public Canvas2DLayerBridge::Logger { | 341 class MockLogger : public Canvas2DLayerBridge::Logger { |
| 342 public: | 342 public: |
| 343 MOCK_METHOD1(reportHibernationEvent, void(Canvas2DLayerBridge::HibernationEv
ent)); | 343 MOCK_METHOD1(reportHibernationEvent, void(Canvas2DLayerBridge::HibernationEv
ent)); |
| 344 MOCK_METHOD0(didStartHibernating, void()); | 344 MOCK_METHOD0(didStartHibernating, void()); |
| 345 virtual ~MockLogger() { } | 345 virtual ~MockLogger() { } |
| 346 }; | 346 }; |
| 347 | 347 |
| 348 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Int
erface* gl, Canvas2DLayerBridgeTest* testHost, WaitableEvent* doneEvent) | 348 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Int
erface* gl, Canvas2DLayerBridgeTest* testHost, WaitableEvent* doneEvent) |
| 349 { | 349 { |
| 350 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new Fake
WebGraphicsContext3DProvider(gl)); | 350 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new Fake
WebGraphicsContext3DProvider(gl)); |
| 351 *bridgePtr = testHost->makeBridge(contextProvider.release(), IntSize(300, 30
0), Canvas2DLayerBridge::EnableAcceleration); | 351 *bridgePtr = testHost->makeBridge(std::move(contextProvider), IntSize(300, 3
00), Canvas2DLayerBridge::EnableAcceleration); |
| 352 // draw+flush to trigger the creation of a GPU surface | 352 // draw+flush to trigger the creation of a GPU surface |
| 353 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); | 353 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); |
| 354 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); | 354 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); |
| 355 (*bridgePtr)->flush(); | 355 (*bridgePtr)->flush(); |
| 356 doneEvent->signal(); | 356 doneEvent->signal(); |
| 357 } | 357 } |
| 358 | 358 |
| 359 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* te
stThread, Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Interface* gl, Can
vas2DLayerBridgeTest* testHost) | 359 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* te
stThread, Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Interface* gl, Can
vas2DLayerBridgeTest* testHost) |
| 360 { | 360 { |
| 361 OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent()); | 361 OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent()); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 440 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 441 | 441 |
| 442 // The Canvas2DLayerBridge has to be created on the thread that will use it | 442 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 443 // to avoid WeakPtr thread check issues. | 443 // to avoid WeakPtr thread check issues. |
| 444 Canvas2DLayerBridgePtr bridge; | 444 Canvas2DLayerBridgePtr bridge; |
| 445 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 445 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 446 | 446 |
| 447 // Register an alternate Logger for tracking hibernation events | 447 // Register an alternate Logger for tracking hibernation events |
| 448 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 448 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 449 MockLogger* mockLoggerPtr = mockLogger.get(); | 449 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 450 bridge->setLoggerForTesting(mockLogger.release()); | 450 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 451 | 451 |
| 452 // Test entering hibernation | 452 // Test entering hibernation |
| 453 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 453 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 454 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 454 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 455 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 455 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 456 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 456 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 457 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 457 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 458 hibernationStartedEvent->wait(); | 458 hibernationStartedEvent->wait(); |
| 459 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 459 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 460 EXPECT_FALSE(bridge->isAccelerated()); | 460 EXPECT_FALSE(bridge->isAccelerated()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 484 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 484 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 485 | 485 |
| 486 // The Canvas2DLayerBridge has to be created on the thread that will use it | 486 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 487 // to avoid WeakPtr thread check issues. | 487 // to avoid WeakPtr thread check issues. |
| 488 Canvas2DLayerBridgePtr bridge; | 488 Canvas2DLayerBridgePtr bridge; |
| 489 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 489 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 490 | 490 |
| 491 // Register an alternate Logger for tracking hibernation events | 491 // Register an alternate Logger for tracking hibernation events |
| 492 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 492 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 493 MockLogger* mockLoggerPtr = mockLogger.get(); | 493 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 494 bridge->setLoggerForTesting(mockLogger.release()); | 494 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 495 | 495 |
| 496 // Test entering hibernation | 496 // Test entering hibernation |
| 497 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 497 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 498 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 498 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 499 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 499 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 500 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 500 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 501 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 501 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 502 // Toggle visibility before the idle tasks that enters hibernation gets a | 502 // Toggle visibility before the idle tasks that enters hibernation gets a |
| 503 // chance to run. | 503 // chance to run. |
| 504 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); | 504 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 Canvas2DLayerBridgePtr bridge; | 537 Canvas2DLayerBridgePtr bridge; |
| 538 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 538 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 539 bridge->disableDeferral(DisableDeferralReasonUnknown); | 539 bridge->disableDeferral(DisableDeferralReasonUnknown); |
| 540 MockImageBuffer mockImageBuffer; | 540 MockImageBuffer mockImageBuffer; |
| 541 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 541 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
| 542 bridge->setImageBuffer(&mockImageBuffer); | 542 bridge->setImageBuffer(&mockImageBuffer); |
| 543 | 543 |
| 544 // Register an alternate Logger for tracking hibernation events | 544 // Register an alternate Logger for tracking hibernation events |
| 545 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 545 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 546 MockLogger* mockLoggerPtr = mockLogger.get(); | 546 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 547 bridge->setLoggerForTesting(mockLogger.release()); | 547 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 548 | 548 |
| 549 // Test entering hibernation | 549 // Test entering hibernation |
| 550 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 550 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 551 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 551 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 552 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 552 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 553 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 553 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 554 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 554 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 555 hibernationStartedEvent->wait(); | 555 hibernationStartedEvent->wait(); |
| 556 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 556 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 557 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 557 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 603 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 604 | 604 |
| 605 // The Canvas2DLayerBridge has to be created on the thread that will use it | 605 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 606 // to avoid WeakPtr thread check issues. | 606 // to avoid WeakPtr thread check issues. |
| 607 Canvas2DLayerBridgePtr bridge; | 607 Canvas2DLayerBridgePtr bridge; |
| 608 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 608 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 609 | 609 |
| 610 // Register an alternate Logger for tracking hibernation events | 610 // Register an alternate Logger for tracking hibernation events |
| 611 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 611 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 612 MockLogger* mockLoggerPtr = mockLogger.get(); | 612 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 613 bridge->setLoggerForTesting(mockLogger.release()); | 613 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 614 | 614 |
| 615 // Test entering hibernation | 615 // Test entering hibernation |
| 616 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 616 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 617 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 617 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 618 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 618 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 619 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 619 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 620 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 620 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 621 hibernationStartedEvent->wait(); | 621 hibernationStartedEvent->wait(); |
| 622 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 622 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 623 EXPECT_FALSE(bridge->isAccelerated()); | 623 EXPECT_FALSE(bridge->isAccelerated()); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 Canvas2DLayerBridgePtr bridge; | 658 Canvas2DLayerBridgePtr bridge; |
| 659 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 659 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 660 MockImageBuffer mockImageBuffer; | 660 MockImageBuffer mockImageBuffer; |
| 661 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 661 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
| 662 bridge->setImageBuffer(&mockImageBuffer); | 662 bridge->setImageBuffer(&mockImageBuffer); |
| 663 bridge->disableDeferral(DisableDeferralReasonUnknown); | 663 bridge->disableDeferral(DisableDeferralReasonUnknown); |
| 664 | 664 |
| 665 // Register an alternate Logger for tracking hibernation events | 665 // Register an alternate Logger for tracking hibernation events |
| 666 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 666 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 667 MockLogger* mockLoggerPtr = mockLogger.get(); | 667 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 668 bridge->setLoggerForTesting(mockLogger.release()); | 668 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 669 | 669 |
| 670 // Test entering hibernation | 670 // Test entering hibernation |
| 671 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 671 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 672 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 672 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 673 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 673 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 674 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 674 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 675 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 675 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 676 hibernationStartedEvent->wait(); | 676 hibernationStartedEvent->wait(); |
| 677 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 677 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 678 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 678 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 718 // to avoid WeakPtr thread check issues. | 718 // to avoid WeakPtr thread check issues. |
| 719 Canvas2DLayerBridgePtr bridge; | 719 Canvas2DLayerBridgePtr bridge; |
| 720 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 720 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 721 MockImageBuffer mockImageBuffer; | 721 MockImageBuffer mockImageBuffer; |
| 722 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 722 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
| 723 bridge->setImageBuffer(&mockImageBuffer); | 723 bridge->setImageBuffer(&mockImageBuffer); |
| 724 | 724 |
| 725 // Register an alternate Logger for tracking hibernation events | 725 // Register an alternate Logger for tracking hibernation events |
| 726 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 726 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 727 MockLogger* mockLoggerPtr = mockLogger.get(); | 727 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 728 bridge->setLoggerForTesting(mockLogger.release()); | 728 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 729 | 729 |
| 730 // Test entering hibernation | 730 // Test entering hibernation |
| 731 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 731 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 732 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 732 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 733 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 733 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 734 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 734 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 735 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 735 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 736 hibernationStartedEvent->wait(); | 736 hibernationStartedEvent->wait(); |
| 737 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 737 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 738 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 738 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 775 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 775 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 776 | 776 |
| 777 // The Canvas2DLayerBridge has to be created on the thread that will use it | 777 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 778 // to avoid WeakPtr thread check issues. | 778 // to avoid WeakPtr thread check issues. |
| 779 Canvas2DLayerBridgePtr bridge; | 779 Canvas2DLayerBridgePtr bridge; |
| 780 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 780 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 781 | 781 |
| 782 // Register an alternate Logger for tracking hibernation events | 782 // Register an alternate Logger for tracking hibernation events |
| 783 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 783 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 784 MockLogger* mockLoggerPtr = mockLogger.get(); | 784 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 785 bridge->setLoggerForTesting(mockLogger.release()); | 785 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 786 | 786 |
| 787 // Test entering hibernation | 787 // Test entering hibernation |
| 788 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 788 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 789 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 789 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 790 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 790 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 791 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 791 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 792 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 792 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 793 hibernationStartedEvent->wait(); | 793 hibernationStartedEvent->wait(); |
| 794 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 794 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 795 EXPECT_FALSE(bridge->isAccelerated()); | 795 EXPECT_FALSE(bridge->isAccelerated()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 828 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 829 | 829 |
| 830 // The Canvas2DLayerBridge has to be created on the thread that will use it | 830 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 831 // to avoid WeakPtr thread check issues. | 831 // to avoid WeakPtr thread check issues. |
| 832 Canvas2DLayerBridgePtr bridge; | 832 Canvas2DLayerBridgePtr bridge; |
| 833 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 833 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 834 | 834 |
| 835 // Register an alternate Logger for tracking hibernation events | 835 // Register an alternate Logger for tracking hibernation events |
| 836 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 836 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 837 MockLogger* mockLoggerPtr = mockLogger.get(); | 837 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 838 bridge->setLoggerForTesting(mockLogger.release()); | 838 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 839 | 839 |
| 840 // Test entering hibernation | 840 // Test entering hibernation |
| 841 OwnPtr<WaitableEvent> hibernationScheduledEvent = adoptPtr(new WaitableEvent
()); | 841 OwnPtr<WaitableEvent> hibernationScheduledEvent = adoptPtr(new WaitableEvent
()); |
| 842 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 842 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 843 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, h
ibernationScheduledEvent.get()); | 843 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, h
ibernationScheduledEvent.get()); |
| 844 postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 844 postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
| 845 // In production, we would expect a | 845 // In production, we would expect a |
| 846 // HibernationAbortedDueToDestructionWhileHibernatePending event to be | 846 // HibernationAbortedDueToDestructionWhileHibernatePending event to be |
| 847 // fired, but that signal is lost in the unit test due to no longer having | 847 // fired, but that signal is lost in the unit test due to no longer having |
| 848 // a bridge to hold the mockLogger. | 848 // a bridge to hold the mockLogger. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 868 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 868 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 869 | 869 |
| 870 // The Canvas2DLayerBridge has to be created on the thread that will use it | 870 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 871 // to avoid WeakPtr thread check issues. | 871 // to avoid WeakPtr thread check issues. |
| 872 Canvas2DLayerBridgePtr bridge; | 872 Canvas2DLayerBridgePtr bridge; |
| 873 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 873 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 874 | 874 |
| 875 // Register an alternate Logger for tracking hibernation events | 875 // Register an alternate Logger for tracking hibernation events |
| 876 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 876 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 877 MockLogger* mockLoggerPtr = mockLogger.get(); | 877 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 878 bridge->setLoggerForTesting(mockLogger.release()); | 878 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 879 | 879 |
| 880 // Test entering hibernation | 880 // Test entering hibernation |
| 881 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); | 881 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); |
| 882 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 882 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 883 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToPendingDestruction)) | 883 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToPendingDestruction)) |
| 884 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); | 884 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); |
| 885 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 885 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 886 testThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&Ca
nvas2DLayerBridge::beginDestruction, AllowCrossThreadAccess(bridge.get()))); | 886 testThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&Ca
nvas2DLayerBridge::beginDestruction, AllowCrossThreadAccess(bridge.get()))); |
| 887 hibernationAbortedEvent->wait(); | 887 hibernationAbortedEvent->wait(); |
| 888 | 888 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 902 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 902 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 903 | 903 |
| 904 // The Canvas2DLayerBridge has to be created on the thread that will use it | 904 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 905 // to avoid WeakPtr thread check issues. | 905 // to avoid WeakPtr thread check issues. |
| 906 Canvas2DLayerBridgePtr bridge; | 906 Canvas2DLayerBridgePtr bridge; |
| 907 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 907 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 908 | 908 |
| 909 // Register an alternate Logger for tracking hibernation events | 909 // Register an alternate Logger for tracking hibernation events |
| 910 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 910 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 911 MockLogger* mockLoggerPtr = mockLogger.get(); | 911 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 912 bridge->setLoggerForTesting(mockLogger.release()); | 912 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 913 | 913 |
| 914 // Test entering hibernation | 914 // Test entering hibernation |
| 915 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); | 915 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); |
| 916 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 916 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 917 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToVisibilityChange)) | 917 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToVisibilityChange)) |
| 918 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); | 918 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); |
| 919 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 919 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 920 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); | 920 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); |
| 921 hibernationAbortedEvent->wait(); | 921 hibernationAbortedEvent->wait(); |
| 922 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 922 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 939 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 939 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 940 | 940 |
| 941 // 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 |
| 942 // to avoid WeakPtr thread check issues. | 942 // to avoid WeakPtr thread check issues. |
| 943 Canvas2DLayerBridgePtr bridge; | 943 Canvas2DLayerBridgePtr bridge; |
| 944 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 944 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 945 | 945 |
| 946 // Register an alternate Logger for tracking hibernation events | 946 // Register an alternate Logger for tracking hibernation events |
| 947 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 947 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 948 MockLogger* mockLoggerPtr = mockLogger.get(); | 948 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 949 bridge->setLoggerForTesting(mockLogger.release()); | 949 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 950 | 950 |
| 951 gl.setIsContextLost(true); | 951 gl.setIsContextLost(true); |
| 952 // Test entering hibernation | 952 // Test entering hibernation |
| 953 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); | 953 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent()
); |
| 954 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 954 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 955 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueGpuContextLoss)) | 955 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueGpuContextLoss)) |
| 956 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); | 956 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); |
| 957 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 957 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 958 hibernationAbortedEvent->wait(); | 958 hibernationAbortedEvent->wait(); |
| 959 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 959 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 974 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 974 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 975 | 975 |
| 976 // The Canvas2DLayerBridge has to be created on the thread that will use it | 976 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 977 // to avoid WeakPtr thread check issues. | 977 // to avoid WeakPtr thread check issues. |
| 978 Canvas2DLayerBridgePtr bridge; | 978 Canvas2DLayerBridgePtr bridge; |
| 979 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 979 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 980 | 980 |
| 981 // Register an alternate Logger for tracking hibernation events | 981 // Register an alternate Logger for tracking hibernation events |
| 982 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 982 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 983 MockLogger* mockLoggerPtr = mockLogger.get(); | 983 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 984 bridge->setLoggerForTesting(mockLogger.release()); | 984 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 985 | 985 |
| 986 // Test entering hibernation | 986 // Test entering hibernation |
| 987 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 987 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 988 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 988 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 989 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 989 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 990 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 990 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 991 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 991 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 992 hibernationStartedEvent->wait(); | 992 hibernationStartedEvent->wait(); |
| 993 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 993 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 994 | 994 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1013 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); | 1013 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T
estThread")); |
| 1014 | 1014 |
| 1015 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1015 // The Canvas2DLayerBridge has to be created on the thread that will use it |
| 1016 // to avoid WeakPtr thread check issues. | 1016 // to avoid WeakPtr thread check issues. |
| 1017 Canvas2DLayerBridgePtr bridge; | 1017 Canvas2DLayerBridgePtr bridge; |
| 1018 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); | 1018 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl,
this); |
| 1019 | 1019 |
| 1020 // Register an alternate Logger for tracking hibernation events | 1020 // Register an alternate Logger for tracking hibernation events |
| 1021 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); | 1021 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger); |
| 1022 MockLogger* mockLoggerPtr = mockLogger.get(); | 1022 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 1023 bridge->setLoggerForTesting(mockLogger.release()); | 1023 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 1024 | 1024 |
| 1025 // Test entering hibernation | 1025 // Test entering hibernation |
| 1026 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); | 1026 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent()
); |
| 1027 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 1027 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 1028 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 1028 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 1029 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); | 1029 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent:
:signal)); |
| 1030 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1030 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 1031 hibernationStartedEvent->wait(); | 1031 hibernationStartedEvent->wait(); |
| 1032 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1032 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 1033 | 1033 |
| 1034 // Rendering in the background -> temp switch to SW | 1034 // Rendering in the background -> temp switch to SW |
| 1035 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationEndedWithSwitchToBackgroundRendering)); | 1035 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationEndedWithSwitchToBackgroundRendering)); |
| 1036 postAndWaitRenderingTask(BLINK_FROM_HERE, testThread.get(), bridge.get()); | 1036 postAndWaitRenderingTask(BLINK_FROM_HERE, testThread.get(), bridge.get()); |
| 1037 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1037 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 1038 EXPECT_FALSE(bridge->isAccelerated()); | 1038 EXPECT_FALSE(bridge->isAccelerated()); |
| 1039 EXPECT_FALSE(bridge->isHibernating()); | 1039 EXPECT_FALSE(bridge->isHibernating()); |
| 1040 EXPECT_TRUE(bridge->checkSurfaceValid()); | 1040 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 1041 | 1041 |
| 1042 // Test prepareMailbox while background rendering | 1042 // Test prepareMailbox while background rendering |
| 1043 WebExternalTextureMailbox mailbox; | 1043 WebExternalTextureMailbox mailbox; |
| 1044 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0)); | 1044 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0)); |
| 1045 EXPECT_TRUE(bridge->checkSurfaceValid()); | 1045 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 1046 | 1046 |
| 1047 // Tear down the bridge on the thread so that 'bridge' can go out of scope | 1047 // Tear down the bridge on the thread so that 'bridge' can go out of scope |
| 1048 // without crashing due to thread checks | 1048 // without crashing due to thread checks |
| 1049 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1049 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
| 1050 } | 1050 } |
| 1051 | 1051 |
| 1052 } // namespace blink | 1052 } // namespace blink |
| OLD | NEW |