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 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 new Canvas2DLayerBridge(std::move(provider), size, 0, NonOpaque, | 128 new Canvas2DLayerBridge(std::move(provider), size, 0, NonOpaque, |
129 accelerationMode, nullptr, kN32_SkColorType)); | 129 accelerationMode, nullptr, kN32_SkColorType)); |
130 bridge->dontUseIdleSchedulingForTesting(); | 130 bridge->dontUseIdleSchedulingForTesting(); |
131 return bridge.release(); | 131 return bridge.release(); |
132 } | 132 } |
133 | 133 |
134 protected: | 134 protected: |
135 void fullLifecycleTest() { | 135 void fullLifecycleTest() { |
136 FakeGLES2Interface gl; | 136 FakeGLES2Interface gl; |
137 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 137 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
138 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 138 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
139 | 139 |
140 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 140 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
141 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 141 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
142 Canvas2DLayerBridge::DisableAcceleration, nullptr, kN32_SkColorType))); | 142 Canvas2DLayerBridge::DisableAcceleration, nullptr, kN32_SkColorType))); |
143 | 143 |
144 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureInfo( | 144 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureInfo( |
145 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests) | 145 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests) |
146 ->getTextureHandle(true)); | 146 ->getTextureHandle(true)); |
147 EXPECT_EQ(textureInfo, nullptr); | 147 EXPECT_EQ(textureInfo, nullptr); |
148 bridge.clear(); | 148 bridge.clear(); |
149 } | 149 } |
150 | 150 |
151 void fallbackToSoftwareIfContextLost() { | 151 void fallbackToSoftwareIfContextLost() { |
152 FakeGLES2Interface gl; | 152 FakeGLES2Interface gl; |
153 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 153 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
154 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 154 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
155 | 155 |
156 gl.setIsContextLost(true); | 156 gl.setIsContextLost(true); |
157 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 157 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
158 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 158 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
159 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); | 159 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
160 EXPECT_TRUE(bridge->checkSurfaceValid()); | 160 EXPECT_TRUE(bridge->checkSurfaceValid()); |
161 EXPECT_FALSE(bridge->isAccelerated()); | 161 EXPECT_FALSE(bridge->isAccelerated()); |
162 } | 162 } |
163 | 163 |
164 void fallbackToSoftwareOnFailedTextureAlloc() { | 164 void fallbackToSoftwareOnFailedTextureAlloc() { |
165 { | 165 { |
166 // No fallback case. | 166 // No fallback case. |
167 FakeGLES2Interface gl; | 167 FakeGLES2Interface gl; |
168 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 168 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
169 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 169 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
170 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 170 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
171 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 171 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
172 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); | 172 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
173 EXPECT_TRUE(bridge->checkSurfaceValid()); | 173 EXPECT_TRUE(bridge->checkSurfaceValid()); |
174 EXPECT_TRUE(bridge->isAccelerated()); | 174 EXPECT_TRUE(bridge->isAccelerated()); |
175 sk_sp<SkImage> snapshot = | 175 sk_sp<SkImage> snapshot = |
176 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); | 176 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); |
177 EXPECT_TRUE(bridge->isAccelerated()); | 177 EXPECT_TRUE(bridge->isAccelerated()); |
178 EXPECT_TRUE(snapshot->isTextureBacked()); | 178 EXPECT_TRUE(snapshot->isTextureBacked()); |
179 } | 179 } |
180 | 180 |
181 { | 181 { |
182 // Fallback case. | 182 // Fallback case. |
183 FakeGLES2Interface gl; | 183 FakeGLES2Interface gl; |
184 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 184 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
185 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 185 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
186 GrContext* gr = contextProvider->grContext(); | 186 GrContext* gr = contextProvider->grContext(); |
187 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 187 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
188 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 188 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
189 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); | 189 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
190 EXPECT_TRUE(bridge->checkSurfaceValid()); | 190 EXPECT_TRUE(bridge->checkSurfaceValid()); |
191 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that | 191 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that |
192 // allocation will fail. | 192 // allocation will fail. |
193 // This will cause SkSurface_Gpu creation to fail without | 193 // This will cause SkSurface_Gpu creation to fail without |
194 // Canvas2DLayerBridge otherwise detecting that anything was disabled. | 194 // Canvas2DLayerBridge otherwise detecting that anything was disabled. |
195 gr->abandonContext(); | 195 gr->abandonContext(); |
196 sk_sp<SkImage> snapshot = | 196 sk_sp<SkImage> snapshot = |
197 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); | 197 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); |
198 EXPECT_FALSE(bridge->isAccelerated()); | 198 EXPECT_FALSE(bridge->isAccelerated()); |
199 EXPECT_FALSE(snapshot->isTextureBacked()); | 199 EXPECT_FALSE(snapshot->isTextureBacked()); |
200 } | 200 } |
201 } | 201 } |
202 | 202 |
203 void noDrawOnContextLostTest() { | 203 void noDrawOnContextLostTest() { |
204 FakeGLES2Interface gl; | 204 FakeGLES2Interface gl; |
205 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 205 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
206 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 206 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
207 | 207 |
208 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 208 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
209 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 209 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
210 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, | 210 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
211 kN32_SkColorType))); | 211 kN32_SkColorType))); |
212 EXPECT_TRUE(bridge->checkSurfaceValid()); | 212 EXPECT_TRUE(bridge->checkSurfaceValid()); |
213 SkPaint paint; | 213 SkPaint paint; |
214 uint32_t genID = bridge->getOrCreateSurface()->generationID(); | 214 uint32_t genID = bridge->getOrCreateSurface()->generationID(); |
215 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 215 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
216 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 216 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
217 gl.setIsContextLost(true); | 217 gl.setIsContextLost(true); |
218 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 218 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
219 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 219 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
220 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); | 220 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); |
221 // This results in the internal surface being torn down in response to the | 221 // This results in the internal surface being torn down in response to the |
222 // context loss. | 222 // context loss. |
223 EXPECT_FALSE(bridge->checkSurfaceValid()); | 223 EXPECT_FALSE(bridge->checkSurfaceValid()); |
224 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); | 224 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); |
225 // The following passes by not crashing | 225 // The following passes by not crashing |
226 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 226 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
227 bridge->flush(); | 227 bridge->flush(); |
228 } | 228 } |
229 | 229 |
230 void prepareMailboxWhenContextIsLost() { | 230 void prepareMailboxWhenContextIsLost() { |
231 FakeGLES2Interface gl; | 231 FakeGLES2Interface gl; |
232 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 232 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
233 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 233 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
234 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 234 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
235 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 235 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
236 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, | 236 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
237 kN32_SkColorType))); | 237 kN32_SkColorType))); |
238 | 238 |
239 // TODO(junov): The PrepareTextureMailbox() method will fail a DCHECK if we | 239 // TODO(junov): The PrepareTextureMailbox() method will fail a DCHECK if we |
240 // don't do this before calling it the first time when the context is lost. | 240 // don't do this before calling it the first time when the context is lost. |
241 bridge->prepareSurfaceForPaintingIfNeeded(); | 241 bridge->prepareSurfaceForPaintingIfNeeded(); |
242 | 242 |
243 // When the context is lost we are not sure if we should still be producing | 243 // When the context is lost we are not sure if we should still be producing |
244 // GL frames for the compositor or not, so fail to generate frames. | 244 // GL frames for the compositor or not, so fail to generate frames. |
245 gl.setIsContextLost(true); | 245 gl.setIsContextLost(true); |
246 | 246 |
247 cc::TextureMailbox textureMailbox; | 247 cc::TextureMailbox textureMailbox; |
248 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 248 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
249 EXPECT_FALSE( | 249 EXPECT_FALSE( |
250 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); | 250 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); |
251 } | 251 } |
252 | 252 |
253 void prepareMailboxAndLoseResourceTest() { | 253 void prepareMailboxAndLoseResourceTest() { |
254 // Prepare a mailbox, then report the resource as lost. | 254 // Prepare a mailbox, then report the resource as lost. |
255 // This test passes by not crashing and not triggering assertions. | 255 // This test passes by not crashing and not triggering assertions. |
256 { | 256 { |
257 FakeGLES2Interface gl; | 257 FakeGLES2Interface gl; |
258 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 258 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
259 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 259 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
260 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 260 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
261 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 261 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
262 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, | 262 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
263 kN32_SkColorType))); | 263 kN32_SkColorType))); |
264 | 264 |
265 cc::TextureMailbox textureMailbox; | 265 cc::TextureMailbox textureMailbox; |
266 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 266 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
267 EXPECT_TRUE( | 267 EXPECT_TRUE( |
268 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); | 268 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); |
269 | 269 |
270 bool lostResource = true; | 270 bool lostResource = true; |
271 releaseCallback->Run(gpu::SyncToken(), lostResource); | 271 releaseCallback->Run(gpu::SyncToken(), lostResource); |
272 } | 272 } |
273 | 273 |
274 // Retry with mailbox released while bridge destruction is in progress. | 274 // Retry with mailbox released while bridge destruction is in progress. |
275 { | 275 { |
276 FakeGLES2Interface gl; | 276 FakeGLES2Interface gl; |
277 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 277 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
278 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 278 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
279 | 279 |
280 cc::TextureMailbox textureMailbox; | 280 cc::TextureMailbox textureMailbox; |
281 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 281 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
282 | 282 |
283 { | 283 { |
284 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 284 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
285 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 285 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
286 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, | 286 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
287 kN32_SkColorType))); | 287 kN32_SkColorType))); |
288 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback); | 288 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback); |
289 // |bridge| goes out of scope and would normally be destroyed, but | 289 // |bridge| goes out of scope and would normally be destroyed, but |
290 // object is kept alive by self references. | 290 // object is kept alive by self references. |
291 } | 291 } |
292 | 292 |
293 // This should cause the bridge to be destroyed. | 293 // This should cause the bridge to be destroyed. |
294 bool lostResource = true; | 294 bool lostResource = true; |
295 // Before fixing crbug.com/411864, the following line would cause a memory | 295 // Before fixing crbug.com/411864, the following line would cause a memory |
296 // use after free that sometimes caused a crash in normal builds and | 296 // use after free that sometimes caused a crash in normal builds and |
297 // crashed consistently with ASAN. | 297 // crashed consistently with ASAN. |
298 releaseCallback->Run(gpu::SyncToken(), lostResource); | 298 releaseCallback->Run(gpu::SyncToken(), lostResource); |
299 } | 299 } |
300 } | 300 } |
301 | 301 |
302 void accelerationHintTest() { | 302 void accelerationHintTest() { |
303 { | 303 { |
304 FakeGLES2Interface gl; | 304 FakeGLES2Interface gl; |
305 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 305 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
306 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 306 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
307 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 307 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
308 std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, | 308 std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, |
309 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); | 309 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
310 SkPaint paint; | 310 SkPaint paint; |
311 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 311 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
312 sk_sp<SkImage> image = | 312 sk_sp<SkImage> image = |
313 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); | 313 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); |
314 EXPECT_TRUE(bridge->checkSurfaceValid()); | 314 EXPECT_TRUE(bridge->checkSurfaceValid()); |
315 EXPECT_TRUE(bridge->isAccelerated()); | 315 EXPECT_TRUE(bridge->isAccelerated()); |
316 } | 316 } |
317 | 317 |
318 { | 318 { |
319 FakeGLES2Interface gl; | 319 FakeGLES2Interface gl; |
320 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 320 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
321 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 321 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
322 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 322 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
323 std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, | 323 std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, |
324 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); | 324 Canvas2DLayerBridge::EnableAcceleration, nullptr, kN32_SkColorType))); |
325 SkPaint paint; | 325 SkPaint paint; |
326 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); | 326 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); |
327 sk_sp<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleration, | 327 sk_sp<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleration, |
328 SnapshotReasonUnitTests); | 328 SnapshotReasonUnitTests); |
329 EXPECT_TRUE(bridge->checkSurfaceValid()); | 329 EXPECT_TRUE(bridge->checkSurfaceValid()); |
330 EXPECT_FALSE(bridge->isAccelerated()); | 330 EXPECT_FALSE(bridge->isAccelerated()); |
331 } | 331 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 void(Canvas2DLayerBridge::HibernationEvent)); | 366 void(Canvas2DLayerBridge::HibernationEvent)); |
367 MOCK_METHOD0(didStartHibernating, void()); | 367 MOCK_METHOD0(didStartHibernating, void()); |
368 virtual ~MockLogger() {} | 368 virtual ~MockLogger() {} |
369 }; | 369 }; |
370 | 370 |
371 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, | 371 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, |
372 gpu::gles2::GLES2Interface* gl, | 372 gpu::gles2::GLES2Interface* gl, |
373 Canvas2DLayerBridgeTest* testHost, | 373 Canvas2DLayerBridgeTest* testHost, |
374 WaitableEvent* doneEvent) { | 374 WaitableEvent* doneEvent) { |
375 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 375 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
376 makeUnique<FakeWebGraphicsContext3DProvider>(gl); | 376 WTF::makeUnique<FakeWebGraphicsContext3DProvider>(gl); |
377 *bridgePtr = | 377 *bridgePtr = |
378 testHost->makeBridge(std::move(contextProvider), IntSize(300, 300), | 378 testHost->makeBridge(std::move(contextProvider), IntSize(300, 300), |
379 Canvas2DLayerBridge::EnableAcceleration); | 379 Canvas2DLayerBridge::EnableAcceleration); |
380 // draw+flush to trigger the creation of a GPU surface | 380 // draw+flush to trigger the creation of a GPU surface |
381 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); | 381 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); |
382 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); | 382 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); |
383 (*bridgePtr)->flush(); | 383 (*bridgePtr)->flush(); |
384 doneEvent->signal(); | 384 doneEvent->signal(); |
385 } | 385 } |
386 | 386 |
387 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, | 387 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, |
388 WebThread* testThread, | 388 WebThread* testThread, |
389 Canvas2DLayerBridgePtr* bridgePtr, | 389 Canvas2DLayerBridgePtr* bridgePtr, |
390 gpu::gles2::GLES2Interface* gl, | 390 gpu::gles2::GLES2Interface* gl, |
391 Canvas2DLayerBridgeTest* testHost) { | 391 Canvas2DLayerBridgeTest* testHost) { |
392 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = | 392 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = |
393 makeUnique<WaitableEvent>(); | 393 WTF::makeUnique<WaitableEvent>(); |
394 testThread->getWebTaskRunner()->postTask( | 394 testThread->getWebTaskRunner()->postTask( |
395 location, crossThreadBind( | 395 location, crossThreadBind( |
396 &runCreateBridgeTask, crossThreadUnretained(bridgePtr), | 396 &runCreateBridgeTask, crossThreadUnretained(bridgePtr), |
397 crossThreadUnretained(gl), crossThreadUnretained(testHost), | 397 crossThreadUnretained(gl), crossThreadUnretained(testHost), |
398 crossThreadUnretained(bridgeCreatedEvent.get()))); | 398 crossThreadUnretained(bridgeCreatedEvent.get()))); |
399 bridgeCreatedEvent->wait(); | 399 bridgeCreatedEvent->wait(); |
400 } | 400 } |
401 | 401 |
402 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, | 402 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, |
403 WaitableEvent* doneEvent) { | 403 WaitableEvent* doneEvent) { |
404 bridgePtr->clear(); | 404 bridgePtr->clear(); |
405 if (doneEvent) | 405 if (doneEvent) |
406 doneEvent->signal(); | 406 doneEvent->signal(); |
407 } | 407 } |
408 | 408 |
409 void postDestroyBridgeTask(const WebTraceLocation& location, | 409 void postDestroyBridgeTask(const WebTraceLocation& location, |
410 WebThread* testThread, | 410 WebThread* testThread, |
411 Canvas2DLayerBridgePtr* bridgePtr) { | 411 Canvas2DLayerBridgePtr* bridgePtr) { |
412 testThread->getWebTaskRunner()->postTask( | 412 testThread->getWebTaskRunner()->postTask( |
413 location, crossThreadBind(&runDestroyBridgeTask, | 413 location, crossThreadBind(&runDestroyBridgeTask, |
414 crossThreadUnretained(bridgePtr), nullptr)); | 414 crossThreadUnretained(bridgePtr), nullptr)); |
415 } | 415 } |
416 | 416 |
417 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, | 417 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, |
418 WebThread* testThread, | 418 WebThread* testThread, |
419 Canvas2DLayerBridgePtr* bridgePtr) { | 419 Canvas2DLayerBridgePtr* bridgePtr) { |
420 std::unique_ptr<WaitableEvent> bridgeDestroyedEvent = | 420 std::unique_ptr<WaitableEvent> bridgeDestroyedEvent = |
421 makeUnique<WaitableEvent>(); | 421 WTF::makeUnique<WaitableEvent>(); |
422 testThread->getWebTaskRunner()->postTask( | 422 testThread->getWebTaskRunner()->postTask( |
423 location, | 423 location, |
424 crossThreadBind(&runDestroyBridgeTask, crossThreadUnretained(bridgePtr), | 424 crossThreadBind(&runDestroyBridgeTask, crossThreadUnretained(bridgePtr), |
425 crossThreadUnretained(bridgeDestroyedEvent.get()))); | 425 crossThreadUnretained(bridgeDestroyedEvent.get()))); |
426 bridgeDestroyedEvent->wait(); | 426 bridgeDestroyedEvent->wait(); |
427 } | 427 } |
428 | 428 |
429 void runSetIsHiddenTask(Canvas2DLayerBridge* bridge, | 429 void runSetIsHiddenTask(Canvas2DLayerBridge* bridge, |
430 bool value, | 430 bool value, |
431 WaitableEvent* doneEvent) { | 431 WaitableEvent* doneEvent) { |
(...skipping 10 matching lines...) Expand all Loading... |
442 testThread->getWebTaskRunner()->postTask( | 442 testThread->getWebTaskRunner()->postTask( |
443 location, | 443 location, |
444 crossThreadBind(&runSetIsHiddenTask, crossThreadUnretained(bridge), value, | 444 crossThreadBind(&runSetIsHiddenTask, crossThreadUnretained(bridge), value, |
445 crossThreadUnretained(doneEvent))); | 445 crossThreadUnretained(doneEvent))); |
446 } | 446 } |
447 | 447 |
448 void postAndWaitSetIsHiddenTask(const WebTraceLocation& location, | 448 void postAndWaitSetIsHiddenTask(const WebTraceLocation& location, |
449 WebThread* testThread, | 449 WebThread* testThread, |
450 Canvas2DLayerBridge* bridge, | 450 Canvas2DLayerBridge* bridge, |
451 bool value) { | 451 bool value) { |
452 std::unique_ptr<WaitableEvent> doneEvent = makeUnique<WaitableEvent>(); | 452 std::unique_ptr<WaitableEvent> doneEvent = WTF::makeUnique<WaitableEvent>(); |
453 postSetIsHiddenTask(location, testThread, bridge, value, doneEvent.get()); | 453 postSetIsHiddenTask(location, testThread, bridge, value, doneEvent.get()); |
454 doneEvent->wait(); | 454 doneEvent->wait(); |
455 } | 455 } |
456 | 456 |
457 class MockImageBuffer : public ImageBuffer { | 457 class MockImageBuffer : public ImageBuffer { |
458 public: | 458 public: |
459 MockImageBuffer() | 459 MockImageBuffer() |
460 : ImageBuffer( | 460 : ImageBuffer(WTF::wrapUnique( |
461 wrapUnique(new UnacceleratedImageBufferSurface(IntSize(1, 1)))) {} | 461 new UnacceleratedImageBufferSurface(IntSize(1, 1)))) {} |
462 | 462 |
463 MOCK_CONST_METHOD1(resetCanvas, void(SkCanvas*)); | 463 MOCK_CONST_METHOD1(resetCanvas, void(SkCanvas*)); |
464 | 464 |
465 virtual ~MockImageBuffer() {} | 465 virtual ~MockImageBuffer() {} |
466 }; | 466 }; |
467 | 467 |
468 #if CANVAS2D_HIBERNATION_ENABLED | 468 #if CANVAS2D_HIBERNATION_ENABLED |
469 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycle) | 469 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycle) |
470 #else | 470 #else |
471 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycle) | 471 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycle) |
472 #endif | 472 #endif |
473 { | 473 { |
474 FakeGLES2Interface gl; | 474 FakeGLES2Interface gl; |
475 std::unique_ptr<WebThread> testThread = | 475 std::unique_ptr<WebThread> testThread = |
476 wrapUnique(Platform::current()->createThread("TestThread")); | 476 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
477 | 477 |
478 // The Canvas2DLayerBridge has to be created on the thread that will use it | 478 // The Canvas2DLayerBridge has to be created on the thread that will use it |
479 // to avoid WeakPtr thread check issues. | 479 // to avoid WeakPtr thread check issues. |
480 Canvas2DLayerBridgePtr bridge; | 480 Canvas2DLayerBridgePtr bridge; |
481 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 481 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
482 this); | 482 this); |
483 | 483 |
484 // Register an alternate Logger for tracking hibernation events | 484 // Register an alternate Logger for tracking hibernation events |
485 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 485 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
486 MockLogger* mockLoggerPtr = mockLogger.get(); | 486 MockLogger* mockLoggerPtr = mockLogger.get(); |
487 bridge->setLoggerForTesting(std::move(mockLogger)); | 487 bridge->setLoggerForTesting(std::move(mockLogger)); |
488 | 488 |
489 // Test entering hibernation | 489 // Test entering hibernation |
490 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 490 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
491 makeUnique<WaitableEvent>(); | 491 WTF::makeUnique<WaitableEvent>(); |
492 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 492 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
493 Canvas2DLayerBridge::HibernationScheduled)); | 493 Canvas2DLayerBridge::HibernationScheduled)); |
494 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 494 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
495 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 495 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
496 &WaitableEvent::signal)); | 496 &WaitableEvent::signal)); |
497 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 497 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
498 hibernationStartedEvent->wait(); | 498 hibernationStartedEvent->wait(); |
499 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 499 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
500 EXPECT_FALSE(bridge->isAccelerated()); | 500 EXPECT_FALSE(bridge->isAccelerated()); |
501 EXPECT_TRUE(bridge->isHibernating()); | 501 EXPECT_TRUE(bridge->isHibernating()); |
(...skipping 16 matching lines...) Expand all Loading... |
518 } | 518 } |
519 | 519 |
520 #if CANVAS2D_HIBERNATION_ENABLED | 520 #if CANVAS2D_HIBERNATION_ENABLED |
521 TEST_F(Canvas2DLayerBridgeTest, HibernationReEntry) | 521 TEST_F(Canvas2DLayerBridgeTest, HibernationReEntry) |
522 #else | 522 #else |
523 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationReEntry) | 523 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationReEntry) |
524 #endif | 524 #endif |
525 { | 525 { |
526 FakeGLES2Interface gl; | 526 FakeGLES2Interface gl; |
527 std::unique_ptr<WebThread> testThread = | 527 std::unique_ptr<WebThread> testThread = |
528 wrapUnique(Platform::current()->createThread("TestThread")); | 528 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
529 | 529 |
530 // The Canvas2DLayerBridge has to be created on the thread that will use it | 530 // The Canvas2DLayerBridge has to be created on the thread that will use it |
531 // to avoid WeakPtr thread check issues. | 531 // to avoid WeakPtr thread check issues. |
532 Canvas2DLayerBridgePtr bridge; | 532 Canvas2DLayerBridgePtr bridge; |
533 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 533 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
534 this); | 534 this); |
535 | 535 |
536 // Register an alternate Logger for tracking hibernation events | 536 // Register an alternate Logger for tracking hibernation events |
537 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 537 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
538 MockLogger* mockLoggerPtr = mockLogger.get(); | 538 MockLogger* mockLoggerPtr = mockLogger.get(); |
539 bridge->setLoggerForTesting(std::move(mockLogger)); | 539 bridge->setLoggerForTesting(std::move(mockLogger)); |
540 | 540 |
541 // Test entering hibernation | 541 // Test entering hibernation |
542 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 542 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
543 makeUnique<WaitableEvent>(); | 543 WTF::makeUnique<WaitableEvent>(); |
544 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 544 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
545 Canvas2DLayerBridge::HibernationScheduled)); | 545 Canvas2DLayerBridge::HibernationScheduled)); |
546 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 546 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
547 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 547 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
548 &WaitableEvent::signal)); | 548 &WaitableEvent::signal)); |
549 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 549 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
550 // Toggle visibility before the task that enters hibernation gets a | 550 // Toggle visibility before the task that enters hibernation gets a |
551 // chance to run. | 551 // chance to run. |
552 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); | 552 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); |
553 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 553 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
(...skipping 23 matching lines...) Expand all Loading... |
577 #if CANVAS2D_HIBERNATION_ENABLED | 577 #if CANVAS2D_HIBERNATION_ENABLED |
578 TEST_F(Canvas2DLayerBridgeTest, | 578 TEST_F(Canvas2DLayerBridgeTest, |
579 HibernationLifeCycleWithDeferredRenderingDisabled) | 579 HibernationLifeCycleWithDeferredRenderingDisabled) |
580 #else | 580 #else |
581 TEST_F(Canvas2DLayerBridgeTest, | 581 TEST_F(Canvas2DLayerBridgeTest, |
582 DISABLED_HibernationLifeCycleWithDeferredRenderingDisabled) | 582 DISABLED_HibernationLifeCycleWithDeferredRenderingDisabled) |
583 #endif | 583 #endif |
584 { | 584 { |
585 FakeGLES2Interface gl; | 585 FakeGLES2Interface gl; |
586 std::unique_ptr<WebThread> testThread = | 586 std::unique_ptr<WebThread> testThread = |
587 wrapUnique(Platform::current()->createThread("TestThread")); | 587 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
588 | 588 |
589 // The Canvas2DLayerBridge has to be created on the thread that will use it | 589 // The Canvas2DLayerBridge has to be created on the thread that will use it |
590 // to avoid WeakPtr thread check issues. | 590 // to avoid WeakPtr thread check issues. |
591 Canvas2DLayerBridgePtr bridge; | 591 Canvas2DLayerBridgePtr bridge; |
592 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 592 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
593 this); | 593 this); |
594 bridge->disableDeferral(DisableDeferralReasonUnknown); | 594 bridge->disableDeferral(DisableDeferralReasonUnknown); |
595 MockImageBuffer mockImageBuffer; | 595 MockImageBuffer mockImageBuffer; |
596 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 596 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
597 bridge->setImageBuffer(&mockImageBuffer); | 597 bridge->setImageBuffer(&mockImageBuffer); |
598 | 598 |
599 // Register an alternate Logger for tracking hibernation events | 599 // Register an alternate Logger for tracking hibernation events |
600 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 600 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
601 MockLogger* mockLoggerPtr = mockLogger.get(); | 601 MockLogger* mockLoggerPtr = mockLogger.get(); |
602 bridge->setLoggerForTesting(std::move(mockLogger)); | 602 bridge->setLoggerForTesting(std::move(mockLogger)); |
603 | 603 |
604 // Test entering hibernation | 604 // Test entering hibernation |
605 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 605 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
606 makeUnique<WaitableEvent>(); | 606 WTF::makeUnique<WaitableEvent>(); |
607 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 607 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
608 Canvas2DLayerBridge::HibernationScheduled)); | 608 Canvas2DLayerBridge::HibernationScheduled)); |
609 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 609 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
610 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 610 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
611 &WaitableEvent::signal)); | 611 &WaitableEvent::signal)); |
612 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 612 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
613 hibernationStartedEvent->wait(); | 613 hibernationStartedEvent->wait(); |
614 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 614 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
615 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 615 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
616 EXPECT_FALSE(bridge->isAccelerated()); | 616 EXPECT_FALSE(bridge->isAccelerated()); |
(...skipping 22 matching lines...) Expand all Loading... |
639 void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent) { | 639 void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent) { |
640 bridge->didDraw(FloatRect(0, 0, 1, 1)); | 640 bridge->didDraw(FloatRect(0, 0, 1, 1)); |
641 bridge->finalizeFrame(FloatRect(0, 0, 1, 1)); | 641 bridge->finalizeFrame(FloatRect(0, 0, 1, 1)); |
642 bridge->flush(); | 642 bridge->flush(); |
643 doneEvent->signal(); | 643 doneEvent->signal(); |
644 } | 644 } |
645 | 645 |
646 void postAndWaitRenderingTask(const WebTraceLocation& location, | 646 void postAndWaitRenderingTask(const WebTraceLocation& location, |
647 WebThread* testThread, | 647 WebThread* testThread, |
648 Canvas2DLayerBridge* bridge) { | 648 Canvas2DLayerBridge* bridge) { |
649 std::unique_ptr<WaitableEvent> doneEvent = makeUnique<WaitableEvent>(); | 649 std::unique_ptr<WaitableEvent> doneEvent = WTF::makeUnique<WaitableEvent>(); |
650 testThread->getWebTaskRunner()->postTask( | 650 testThread->getWebTaskRunner()->postTask( |
651 location, | 651 location, |
652 crossThreadBind(&runRenderingTask, crossThreadUnretained(bridge), | 652 crossThreadBind(&runRenderingTask, crossThreadUnretained(bridge), |
653 crossThreadUnretained(doneEvent.get()))); | 653 crossThreadUnretained(doneEvent.get()))); |
654 doneEvent->wait(); | 654 doneEvent->wait(); |
655 } | 655 } |
656 | 656 |
657 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU | 657 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU |
658 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating) | 658 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating) |
659 #else | 659 #else |
660 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernating) | 660 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernating) |
661 #endif | 661 #endif |
662 { | 662 { |
663 FakeGLES2Interface gl; | 663 FakeGLES2Interface gl; |
664 std::unique_ptr<WebThread> testThread = | 664 std::unique_ptr<WebThread> testThread = |
665 wrapUnique(Platform::current()->createThread("TestThread")); | 665 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
666 | 666 |
667 // The Canvas2DLayerBridge has to be created on the thread that will use it | 667 // The Canvas2DLayerBridge has to be created on the thread that will use it |
668 // to avoid WeakPtr thread check issues. | 668 // to avoid WeakPtr thread check issues. |
669 Canvas2DLayerBridgePtr bridge; | 669 Canvas2DLayerBridgePtr bridge; |
670 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 670 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
671 this); | 671 this); |
672 | 672 |
673 // Register an alternate Logger for tracking hibernation events | 673 // Register an alternate Logger for tracking hibernation events |
674 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 674 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
675 MockLogger* mockLoggerPtr = mockLogger.get(); | 675 MockLogger* mockLoggerPtr = mockLogger.get(); |
676 bridge->setLoggerForTesting(std::move(mockLogger)); | 676 bridge->setLoggerForTesting(std::move(mockLogger)); |
677 | 677 |
678 // Test entering hibernation | 678 // Test entering hibernation |
679 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 679 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
680 makeUnique<WaitableEvent>(); | 680 WTF::makeUnique<WaitableEvent>(); |
681 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 681 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
682 Canvas2DLayerBridge::HibernationScheduled)); | 682 Canvas2DLayerBridge::HibernationScheduled)); |
683 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 683 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
684 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 684 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
685 &WaitableEvent::signal)); | 685 &WaitableEvent::signal)); |
686 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 686 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
687 hibernationStartedEvent->wait(); | 687 hibernationStartedEvent->wait(); |
688 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 688 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
689 EXPECT_FALSE(bridge->isAccelerated()); | 689 EXPECT_FALSE(bridge->isAccelerated()); |
690 EXPECT_TRUE(bridge->isHibernating()); | 690 EXPECT_TRUE(bridge->isHibernating()); |
(...skipping 28 matching lines...) Expand all Loading... |
719 TEST_F(Canvas2DLayerBridgeTest, | 719 TEST_F(Canvas2DLayerBridgeTest, |
720 BackgroundRenderingWhileHibernatingWithDeferredRenderingDisabled) | 720 BackgroundRenderingWhileHibernatingWithDeferredRenderingDisabled) |
721 #else | 721 #else |
722 TEST_F( | 722 TEST_F( |
723 Canvas2DLayerBridgeTest, | 723 Canvas2DLayerBridgeTest, |
724 DISABLED_BackgroundRenderingWhileHibernatingWithDeferredRenderingDisabled) | 724 DISABLED_BackgroundRenderingWhileHibernatingWithDeferredRenderingDisabled) |
725 #endif | 725 #endif |
726 { | 726 { |
727 FakeGLES2Interface gl; | 727 FakeGLES2Interface gl; |
728 std::unique_ptr<WebThread> testThread = | 728 std::unique_ptr<WebThread> testThread = |
729 wrapUnique(Platform::current()->createThread("TestThread")); | 729 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
730 | 730 |
731 // The Canvas2DLayerBridge has to be created on the thread that will use it | 731 // The Canvas2DLayerBridge has to be created on the thread that will use it |
732 // to avoid WeakPtr thread check issues. | 732 // to avoid WeakPtr thread check issues. |
733 Canvas2DLayerBridgePtr bridge; | 733 Canvas2DLayerBridgePtr bridge; |
734 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 734 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
735 this); | 735 this); |
736 MockImageBuffer mockImageBuffer; | 736 MockImageBuffer mockImageBuffer; |
737 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 737 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
738 bridge->setImageBuffer(&mockImageBuffer); | 738 bridge->setImageBuffer(&mockImageBuffer); |
739 bridge->disableDeferral(DisableDeferralReasonUnknown); | 739 bridge->disableDeferral(DisableDeferralReasonUnknown); |
740 | 740 |
741 // Register an alternate Logger for tracking hibernation events | 741 // Register an alternate Logger for tracking hibernation events |
742 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 742 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
743 MockLogger* mockLoggerPtr = mockLogger.get(); | 743 MockLogger* mockLoggerPtr = mockLogger.get(); |
744 bridge->setLoggerForTesting(std::move(mockLogger)); | 744 bridge->setLoggerForTesting(std::move(mockLogger)); |
745 | 745 |
746 // Test entering hibernation | 746 // Test entering hibernation |
747 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 747 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
748 makeUnique<WaitableEvent>(); | 748 WTF::makeUnique<WaitableEvent>(); |
749 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 749 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
750 Canvas2DLayerBridge::HibernationScheduled)); | 750 Canvas2DLayerBridge::HibernationScheduled)); |
751 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 751 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
752 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 752 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
753 &WaitableEvent::signal)); | 753 &WaitableEvent::signal)); |
754 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 754 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
755 hibernationStartedEvent->wait(); | 755 hibernationStartedEvent->wait(); |
756 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 756 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
757 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 757 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
758 EXPECT_FALSE(bridge->isAccelerated()); | 758 EXPECT_FALSE(bridge->isAccelerated()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
791 | 791 |
792 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU | 792 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU |
793 TEST_F(Canvas2DLayerBridgeTest, DisableDeferredRenderingWhileHibernating) | 793 TEST_F(Canvas2DLayerBridgeTest, DisableDeferredRenderingWhileHibernating) |
794 #else | 794 #else |
795 TEST_F(Canvas2DLayerBridgeTest, | 795 TEST_F(Canvas2DLayerBridgeTest, |
796 DISABLED_DisableDeferredRenderingWhileHibernating) | 796 DISABLED_DisableDeferredRenderingWhileHibernating) |
797 #endif | 797 #endif |
798 { | 798 { |
799 FakeGLES2Interface gl; | 799 FakeGLES2Interface gl; |
800 std::unique_ptr<WebThread> testThread = | 800 std::unique_ptr<WebThread> testThread = |
801 wrapUnique(Platform::current()->createThread("TestThread")); | 801 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
802 | 802 |
803 // The Canvas2DLayerBridge has to be created on the thread that will use it | 803 // The Canvas2DLayerBridge has to be created on the thread that will use it |
804 // to avoid WeakPtr thread check issues. | 804 // to avoid WeakPtr thread check issues. |
805 Canvas2DLayerBridgePtr bridge; | 805 Canvas2DLayerBridgePtr bridge; |
806 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 806 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
807 this); | 807 this); |
808 MockImageBuffer mockImageBuffer; | 808 MockImageBuffer mockImageBuffer; |
809 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); | 809 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); |
810 bridge->setImageBuffer(&mockImageBuffer); | 810 bridge->setImageBuffer(&mockImageBuffer); |
811 | 811 |
812 // Register an alternate Logger for tracking hibernation events | 812 // Register an alternate Logger for tracking hibernation events |
813 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 813 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
814 MockLogger* mockLoggerPtr = mockLogger.get(); | 814 MockLogger* mockLoggerPtr = mockLogger.get(); |
815 bridge->setLoggerForTesting(std::move(mockLogger)); | 815 bridge->setLoggerForTesting(std::move(mockLogger)); |
816 | 816 |
817 // Test entering hibernation | 817 // Test entering hibernation |
818 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 818 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
819 makeUnique<WaitableEvent>(); | 819 WTF::makeUnique<WaitableEvent>(); |
820 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 820 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
821 Canvas2DLayerBridge::HibernationScheduled)); | 821 Canvas2DLayerBridge::HibernationScheduled)); |
822 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 822 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
823 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 823 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
824 &WaitableEvent::signal)); | 824 &WaitableEvent::signal)); |
825 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 825 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
826 hibernationStartedEvent->wait(); | 826 hibernationStartedEvent->wait(); |
827 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 827 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
828 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 828 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
829 EXPECT_FALSE(bridge->isAccelerated()); | 829 EXPECT_FALSE(bridge->isAccelerated()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
861 } | 861 } |
862 | 862 |
863 #if CANVAS2D_HIBERNATION_ENABLED | 863 #if CANVAS2D_HIBERNATION_ENABLED |
864 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating) | 864 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating) |
865 #else | 865 #else |
866 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernating) | 866 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernating) |
867 #endif | 867 #endif |
868 { | 868 { |
869 FakeGLES2Interface gl; | 869 FakeGLES2Interface gl; |
870 std::unique_ptr<WebThread> testThread = | 870 std::unique_ptr<WebThread> testThread = |
871 wrapUnique(Platform::current()->createThread("TestThread")); | 871 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
872 | 872 |
873 // The Canvas2DLayerBridge has to be created on the thread that will use it | 873 // The Canvas2DLayerBridge has to be created on the thread that will use it |
874 // to avoid WeakPtr thread check issues. | 874 // to avoid WeakPtr thread check issues. |
875 Canvas2DLayerBridgePtr bridge; | 875 Canvas2DLayerBridgePtr bridge; |
876 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 876 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
877 this); | 877 this); |
878 | 878 |
879 // Register an alternate Logger for tracking hibernation events | 879 // Register an alternate Logger for tracking hibernation events |
880 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 880 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
881 MockLogger* mockLoggerPtr = mockLogger.get(); | 881 MockLogger* mockLoggerPtr = mockLogger.get(); |
882 bridge->setLoggerForTesting(std::move(mockLogger)); | 882 bridge->setLoggerForTesting(std::move(mockLogger)); |
883 | 883 |
884 // Test entering hibernation | 884 // Test entering hibernation |
885 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 885 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
886 makeUnique<WaitableEvent>(); | 886 WTF::makeUnique<WaitableEvent>(); |
887 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 887 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
888 Canvas2DLayerBridge::HibernationScheduled)); | 888 Canvas2DLayerBridge::HibernationScheduled)); |
889 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 889 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
890 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 890 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
891 &WaitableEvent::signal)); | 891 &WaitableEvent::signal)); |
892 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 892 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
893 hibernationStartedEvent->wait(); | 893 hibernationStartedEvent->wait(); |
894 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 894 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
895 EXPECT_FALSE(bridge->isAccelerated()); | 895 EXPECT_FALSE(bridge->isAccelerated()); |
896 EXPECT_TRUE(bridge->isHibernating()); | 896 EXPECT_TRUE(bridge->isHibernating()); |
897 EXPECT_TRUE(bridge->checkSurfaceValid()); | 897 EXPECT_TRUE(bridge->checkSurfaceValid()); |
898 | 898 |
899 // Tear down the bridge while hibernating | 899 // Tear down the bridge while hibernating |
900 EXPECT_CALL(*mockLoggerPtr, | 900 EXPECT_CALL(*mockLoggerPtr, |
901 reportHibernationEvent( | 901 reportHibernationEvent( |
902 Canvas2DLayerBridge::HibernationEndedWithTeardown)); | 902 Canvas2DLayerBridge::HibernationEndedWithTeardown)); |
903 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 903 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
904 } | 904 } |
905 | 905 |
906 #if CANVAS2D_HIBERNATION_ENABLED | 906 #if CANVAS2D_HIBERNATION_ENABLED |
907 TEST_F(Canvas2DLayerBridgeTest, SnapshotWhileHibernating) | 907 TEST_F(Canvas2DLayerBridgeTest, SnapshotWhileHibernating) |
908 #else | 908 #else |
909 TEST_F(Canvas2DLayerBridgeTest, DISABLED_SnapshotWhileHibernating) | 909 TEST_F(Canvas2DLayerBridgeTest, DISABLED_SnapshotWhileHibernating) |
910 #endif | 910 #endif |
911 { | 911 { |
912 FakeGLES2Interface gl; | 912 FakeGLES2Interface gl; |
913 std::unique_ptr<WebThread> testThread = | 913 std::unique_ptr<WebThread> testThread = |
914 wrapUnique(Platform::current()->createThread("TestThread")); | 914 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
915 | 915 |
916 // The Canvas2DLayerBridge has to be created on the thread that will use it | 916 // The Canvas2DLayerBridge has to be created on the thread that will use it |
917 // to avoid WeakPtr thread check issues. | 917 // to avoid WeakPtr thread check issues. |
918 Canvas2DLayerBridgePtr bridge; | 918 Canvas2DLayerBridgePtr bridge; |
919 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 919 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
920 this); | 920 this); |
921 | 921 |
922 // Register an alternate Logger for tracking hibernation events | 922 // Register an alternate Logger for tracking hibernation events |
923 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 923 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
924 MockLogger* mockLoggerPtr = mockLogger.get(); | 924 MockLogger* mockLoggerPtr = mockLogger.get(); |
925 bridge->setLoggerForTesting(std::move(mockLogger)); | 925 bridge->setLoggerForTesting(std::move(mockLogger)); |
926 | 926 |
927 // Test entering hibernation | 927 // Test entering hibernation |
928 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 928 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
929 makeUnique<WaitableEvent>(); | 929 WTF::makeUnique<WaitableEvent>(); |
930 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 930 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
931 Canvas2DLayerBridge::HibernationScheduled)); | 931 Canvas2DLayerBridge::HibernationScheduled)); |
932 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 932 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
933 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 933 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
934 &WaitableEvent::signal)); | 934 &WaitableEvent::signal)); |
935 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 935 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
936 hibernationStartedEvent->wait(); | 936 hibernationStartedEvent->wait(); |
937 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 937 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
938 EXPECT_FALSE(bridge->isAccelerated()); | 938 EXPECT_FALSE(bridge->isAccelerated()); |
939 EXPECT_TRUE(bridge->isHibernating()); | 939 EXPECT_TRUE(bridge->isHibernating()); |
940 EXPECT_TRUE(bridge->checkSurfaceValid()); | 940 EXPECT_TRUE(bridge->checkSurfaceValid()); |
941 | 941 |
942 // Take a snapshot and verify that it is not accelerated due to hibernation | 942 // Take a snapshot and verify that it is not accelerated due to hibernation |
943 sk_sp<SkImage> image = | 943 sk_sp<SkImage> image = |
944 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); | 944 bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnitTests); |
945 EXPECT_FALSE(image->isTextureBacked()); | 945 EXPECT_FALSE(image->isTextureBacked()); |
946 image.reset(); | 946 image.reset(); |
947 | 947 |
948 // Verify that taking a snapshot did not affect the state of bridge | 948 // Verify that taking a snapshot did not affect the state of bridge |
949 EXPECT_FALSE(bridge->isAccelerated()); | 949 EXPECT_FALSE(bridge->isAccelerated()); |
950 EXPECT_TRUE(bridge->isHibernating()); | 950 EXPECT_TRUE(bridge->isHibernating()); |
951 EXPECT_TRUE(bridge->checkSurfaceValid()); | 951 EXPECT_TRUE(bridge->checkSurfaceValid()); |
952 | 952 |
953 // End hibernation normally | 953 // End hibernation normally |
954 std::unique_ptr<WaitableEvent> hibernationEndedEvent = | 954 std::unique_ptr<WaitableEvent> hibernationEndedEvent = |
955 makeUnique<WaitableEvent>(); | 955 WTF::makeUnique<WaitableEvent>(); |
956 EXPECT_CALL( | 956 EXPECT_CALL( |
957 *mockLoggerPtr, | 957 *mockLoggerPtr, |
958 reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedNormally)) | 958 reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedNormally)) |
959 .WillOnce(testing::InvokeWithoutArgs(hibernationEndedEvent.get(), | 959 .WillOnce(testing::InvokeWithoutArgs(hibernationEndedEvent.get(), |
960 &WaitableEvent::signal)); | 960 &WaitableEvent::signal)); |
961 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); | 961 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); |
962 hibernationEndedEvent->wait(); | 962 hibernationEndedEvent->wait(); |
963 | 963 |
964 // Tear down the bridge while hibernating | 964 // Tear down the bridge while hibernating |
965 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 965 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
966 } | 966 } |
967 | 967 |
968 #if CANVAS2D_HIBERNATION_ENABLED | 968 #if CANVAS2D_HIBERNATION_ENABLED |
969 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernationIsPending) | 969 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernationIsPending) |
970 #else | 970 #else |
971 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernationIsPending) | 971 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernationIsPending) |
972 #endif | 972 #endif |
973 { | 973 { |
974 FakeGLES2Interface gl; | 974 FakeGLES2Interface gl; |
975 std::unique_ptr<WebThread> testThread = | 975 std::unique_ptr<WebThread> testThread = |
976 wrapUnique(Platform::current()->createThread("TestThread")); | 976 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
977 | 977 |
978 // 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 |
979 // to avoid WeakPtr thread check issues. | 979 // to avoid WeakPtr thread check issues. |
980 Canvas2DLayerBridgePtr bridge; | 980 Canvas2DLayerBridgePtr bridge; |
981 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 981 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
982 this); | 982 this); |
983 | 983 |
984 // Register an alternate Logger for tracking hibernation events | 984 // Register an alternate Logger for tracking hibernation events |
985 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 985 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
986 MockLogger* mockLoggerPtr = mockLogger.get(); | 986 MockLogger* mockLoggerPtr = mockLogger.get(); |
987 bridge->setLoggerForTesting(std::move(mockLogger)); | 987 bridge->setLoggerForTesting(std::move(mockLogger)); |
988 | 988 |
989 // Test entering hibernation | 989 // Test entering hibernation |
990 std::unique_ptr<WaitableEvent> hibernationScheduledEvent = | 990 std::unique_ptr<WaitableEvent> hibernationScheduledEvent = |
991 makeUnique<WaitableEvent>(); | 991 WTF::makeUnique<WaitableEvent>(); |
992 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 992 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
993 Canvas2DLayerBridge::HibernationScheduled)); | 993 Canvas2DLayerBridge::HibernationScheduled)); |
994 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, | 994 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, |
995 hibernationScheduledEvent.get()); | 995 hibernationScheduledEvent.get()); |
996 postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 996 postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
997 // In production, we would expect a | 997 // In production, we would expect a |
998 // HibernationAbortedDueToDestructionWhileHibernatePending event to be | 998 // HibernationAbortedDueToDestructionWhileHibernatePending event to be |
999 // fired, but that signal is lost in the unit test due to no longer having | 999 // fired, but that signal is lost in the unit test due to no longer having |
1000 // a bridge to hold the mockLogger. | 1000 // a bridge to hold the mockLogger. |
1001 hibernationScheduledEvent->wait(); | 1001 hibernationScheduledEvent->wait(); |
1002 // Once we know the hibernation task is scheduled, we can schedule a fence. | 1002 // Once we know the hibernation task is scheduled, we can schedule a fence. |
1003 // Assuming tasks are guaranteed to run in the order they were | 1003 // Assuming tasks are guaranteed to run in the order they were |
1004 // submitted, this fence will guarantee the attempt to hibernate runs to | 1004 // submitted, this fence will guarantee the attempt to hibernate runs to |
1005 // completion before the thread is destroyed. | 1005 // completion before the thread is destroyed. |
1006 // This test passes by not crashing, which proves that the WeakPtr logic | 1006 // This test passes by not crashing, which proves that the WeakPtr logic |
1007 // is sound. | 1007 // is sound. |
1008 std::unique_ptr<WaitableEvent> fenceEvent = makeUnique<WaitableEvent>(); | 1008 std::unique_ptr<WaitableEvent> fenceEvent = WTF::makeUnique<WaitableEvent>(); |
1009 testThread->getWebTaskRunner()->postTask( | 1009 testThread->getWebTaskRunner()->postTask( |
1010 BLINK_FROM_HERE, | 1010 BLINK_FROM_HERE, |
1011 WTF::bind(&WaitableEvent::signal, unretained(fenceEvent.get()))); | 1011 WTF::bind(&WaitableEvent::signal, WTF::unretained(fenceEvent.get()))); |
1012 fenceEvent->wait(); | 1012 fenceEvent->wait(); |
1013 } | 1013 } |
1014 | 1014 |
1015 #if CANVAS2D_HIBERNATION_ENABLED | 1015 #if CANVAS2D_HIBERNATION_ENABLED |
1016 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToPendingTeardown) | 1016 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToPendingTeardown) |
1017 #else | 1017 #else |
1018 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToPendingTeardown) | 1018 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToPendingTeardown) |
1019 #endif | 1019 #endif |
1020 { | 1020 { |
1021 FakeGLES2Interface gl; | 1021 FakeGLES2Interface gl; |
1022 std::unique_ptr<WebThread> testThread = | 1022 std::unique_ptr<WebThread> testThread = |
1023 wrapUnique(Platform::current()->createThread("TestThread")); | 1023 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
1024 | 1024 |
1025 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1025 // The Canvas2DLayerBridge has to be created on the thread that will use it |
1026 // to avoid WeakPtr thread check issues. | 1026 // to avoid WeakPtr thread check issues. |
1027 Canvas2DLayerBridgePtr bridge; | 1027 Canvas2DLayerBridgePtr bridge; |
1028 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 1028 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
1029 this); | 1029 this); |
1030 | 1030 |
1031 // Register an alternate Logger for tracking hibernation events | 1031 // Register an alternate Logger for tracking hibernation events |
1032 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 1032 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
1033 MockLogger* mockLoggerPtr = mockLogger.get(); | 1033 MockLogger* mockLoggerPtr = mockLogger.get(); |
1034 bridge->setLoggerForTesting(std::move(mockLogger)); | 1034 bridge->setLoggerForTesting(std::move(mockLogger)); |
1035 | 1035 |
1036 // Test entering hibernation | 1036 // Test entering hibernation |
1037 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = | 1037 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = |
1038 makeUnique<WaitableEvent>(); | 1038 WTF::makeUnique<WaitableEvent>(); |
1039 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1039 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
1040 Canvas2DLayerBridge::HibernationScheduled)); | 1040 Canvas2DLayerBridge::HibernationScheduled)); |
1041 EXPECT_CALL( | 1041 EXPECT_CALL( |
1042 *mockLoggerPtr, | 1042 *mockLoggerPtr, |
1043 reportHibernationEvent( | 1043 reportHibernationEvent( |
1044 Canvas2DLayerBridge::HibernationAbortedDueToPendingDestruction)) | 1044 Canvas2DLayerBridge::HibernationAbortedDueToPendingDestruction)) |
1045 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), | 1045 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), |
1046 &WaitableEvent::signal)); | 1046 &WaitableEvent::signal)); |
1047 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1047 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
1048 testThread->getWebTaskRunner()->postTask( | 1048 testThread->getWebTaskRunner()->postTask( |
1049 BLINK_FROM_HERE, crossThreadBind(&Canvas2DLayerBridge::beginDestruction, | 1049 BLINK_FROM_HERE, crossThreadBind(&Canvas2DLayerBridge::beginDestruction, |
1050 crossThreadUnretained(bridge.get()))); | 1050 crossThreadUnretained(bridge.get()))); |
1051 hibernationAbortedEvent->wait(); | 1051 hibernationAbortedEvent->wait(); |
1052 | 1052 |
1053 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1053 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
1054 | 1054 |
1055 // Tear down bridge on thread | 1055 // Tear down bridge on thread |
1056 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1056 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
1057 } | 1057 } |
1058 | 1058 |
1059 #if CANVAS2D_HIBERNATION_ENABLED | 1059 #if CANVAS2D_HIBERNATION_ENABLED |
1060 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) | 1060 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) |
1061 #else | 1061 #else |
1062 TEST_F(Canvas2DLayerBridgeTest, | 1062 TEST_F(Canvas2DLayerBridgeTest, |
1063 DISABLED_HibernationAbortedDueToVisibilityChange) | 1063 DISABLED_HibernationAbortedDueToVisibilityChange) |
1064 #endif | 1064 #endif |
1065 { | 1065 { |
1066 FakeGLES2Interface gl; | 1066 FakeGLES2Interface gl; |
1067 std::unique_ptr<WebThread> testThread = | 1067 std::unique_ptr<WebThread> testThread = |
1068 wrapUnique(Platform::current()->createThread("TestThread")); | 1068 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
1069 | 1069 |
1070 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1070 // The Canvas2DLayerBridge has to be created on the thread that will use it |
1071 // to avoid WeakPtr thread check issues. | 1071 // to avoid WeakPtr thread check issues. |
1072 Canvas2DLayerBridgePtr bridge; | 1072 Canvas2DLayerBridgePtr bridge; |
1073 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 1073 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
1074 this); | 1074 this); |
1075 | 1075 |
1076 // Register an alternate Logger for tracking hibernation events | 1076 // Register an alternate Logger for tracking hibernation events |
1077 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 1077 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
1078 MockLogger* mockLoggerPtr = mockLogger.get(); | 1078 MockLogger* mockLoggerPtr = mockLogger.get(); |
1079 bridge->setLoggerForTesting(std::move(mockLogger)); | 1079 bridge->setLoggerForTesting(std::move(mockLogger)); |
1080 | 1080 |
1081 // Test entering hibernation | 1081 // Test entering hibernation |
1082 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = | 1082 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = |
1083 makeUnique<WaitableEvent>(); | 1083 WTF::makeUnique<WaitableEvent>(); |
1084 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1084 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
1085 Canvas2DLayerBridge::HibernationScheduled)); | 1085 Canvas2DLayerBridge::HibernationScheduled)); |
1086 EXPECT_CALL(*mockLoggerPtr, | 1086 EXPECT_CALL(*mockLoggerPtr, |
1087 reportHibernationEvent( | 1087 reportHibernationEvent( |
1088 Canvas2DLayerBridge::HibernationAbortedDueToVisibilityChange)) | 1088 Canvas2DLayerBridge::HibernationAbortedDueToVisibilityChange)) |
1089 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), | 1089 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), |
1090 &WaitableEvent::signal)); | 1090 &WaitableEvent::signal)); |
1091 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1091 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
1092 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); | 1092 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); |
1093 hibernationAbortedEvent->wait(); | 1093 hibernationAbortedEvent->wait(); |
1094 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1094 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
1095 EXPECT_TRUE(bridge->isAccelerated()); | 1095 EXPECT_TRUE(bridge->isAccelerated()); |
1096 EXPECT_FALSE(bridge->isHibernating()); | 1096 EXPECT_FALSE(bridge->isHibernating()); |
1097 EXPECT_TRUE(bridge->checkSurfaceValid()); | 1097 EXPECT_TRUE(bridge->checkSurfaceValid()); |
1098 | 1098 |
1099 // Tear down the bridge on the thread so that 'bridge' can go out of scope | 1099 // Tear down the bridge on the thread so that 'bridge' can go out of scope |
1100 // without crashing due to thread checks | 1100 // without crashing due to thread checks |
1101 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1101 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
1102 } | 1102 } |
1103 | 1103 |
1104 #if CANVAS2D_HIBERNATION_ENABLED | 1104 #if CANVAS2D_HIBERNATION_ENABLED |
1105 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToLostContext) | 1105 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToLostContext) |
1106 #else | 1106 #else |
1107 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToLostContext) | 1107 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToLostContext) |
1108 #endif | 1108 #endif |
1109 { | 1109 { |
1110 FakeGLES2Interface gl; | 1110 FakeGLES2Interface gl; |
1111 std::unique_ptr<WebThread> testThread = | 1111 std::unique_ptr<WebThread> testThread = |
1112 wrapUnique(Platform::current()->createThread("TestThread")); | 1112 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
1113 | 1113 |
1114 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1114 // The Canvas2DLayerBridge has to be created on the thread that will use it |
1115 // to avoid WeakPtr thread check issues. | 1115 // to avoid WeakPtr thread check issues. |
1116 Canvas2DLayerBridgePtr bridge; | 1116 Canvas2DLayerBridgePtr bridge; |
1117 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 1117 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
1118 this); | 1118 this); |
1119 | 1119 |
1120 // Register an alternate Logger for tracking hibernation events | 1120 // Register an alternate Logger for tracking hibernation events |
1121 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 1121 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
1122 MockLogger* mockLoggerPtr = mockLogger.get(); | 1122 MockLogger* mockLoggerPtr = mockLogger.get(); |
1123 bridge->setLoggerForTesting(std::move(mockLogger)); | 1123 bridge->setLoggerForTesting(std::move(mockLogger)); |
1124 | 1124 |
1125 gl.setIsContextLost(true); | 1125 gl.setIsContextLost(true); |
1126 // Test entering hibernation | 1126 // Test entering hibernation |
1127 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = | 1127 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = |
1128 makeUnique<WaitableEvent>(); | 1128 WTF::makeUnique<WaitableEvent>(); |
1129 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1129 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
1130 Canvas2DLayerBridge::HibernationScheduled)); | 1130 Canvas2DLayerBridge::HibernationScheduled)); |
1131 EXPECT_CALL(*mockLoggerPtr, | 1131 EXPECT_CALL(*mockLoggerPtr, |
1132 reportHibernationEvent( | 1132 reportHibernationEvent( |
1133 Canvas2DLayerBridge::HibernationAbortedDueGpuContextLoss)) | 1133 Canvas2DLayerBridge::HibernationAbortedDueGpuContextLoss)) |
1134 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), | 1134 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), |
1135 &WaitableEvent::signal)); | 1135 &WaitableEvent::signal)); |
1136 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1136 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
1137 hibernationAbortedEvent->wait(); | 1137 hibernationAbortedEvent->wait(); |
1138 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1138 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
1139 EXPECT_FALSE(bridge->isHibernating()); | 1139 EXPECT_FALSE(bridge->isHibernating()); |
1140 | 1140 |
1141 // Tear down the bridge on the thread so that 'bridge' can go out of scope | 1141 // Tear down the bridge on the thread so that 'bridge' can go out of scope |
1142 // without crashing due to thread checks | 1142 // without crashing due to thread checks |
1143 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1143 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
1144 } | 1144 } |
1145 | 1145 |
1146 #if CANVAS2D_HIBERNATION_ENABLED | 1146 #if CANVAS2D_HIBERNATION_ENABLED |
1147 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileHibernating) | 1147 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileHibernating) |
1148 #else | 1148 #else |
1149 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileHibernating) | 1149 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileHibernating) |
1150 #endif | 1150 #endif |
1151 { | 1151 { |
1152 FakeGLES2Interface gl; | 1152 FakeGLES2Interface gl; |
1153 std::unique_ptr<WebThread> testThread = | 1153 std::unique_ptr<WebThread> testThread = |
1154 wrapUnique(Platform::current()->createThread("TestThread")); | 1154 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
1155 | 1155 |
1156 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1156 // The Canvas2DLayerBridge has to be created on the thread that will use it |
1157 // to avoid WeakPtr thread check issues. | 1157 // to avoid WeakPtr thread check issues. |
1158 Canvas2DLayerBridgePtr bridge; | 1158 Canvas2DLayerBridgePtr bridge; |
1159 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 1159 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
1160 this); | 1160 this); |
1161 | 1161 |
1162 // Register an alternate Logger for tracking hibernation events | 1162 // Register an alternate Logger for tracking hibernation events |
1163 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 1163 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
1164 MockLogger* mockLoggerPtr = mockLogger.get(); | 1164 MockLogger* mockLoggerPtr = mockLogger.get(); |
1165 bridge->setLoggerForTesting(std::move(mockLogger)); | 1165 bridge->setLoggerForTesting(std::move(mockLogger)); |
1166 | 1166 |
1167 // Test entering hibernation | 1167 // Test entering hibernation |
1168 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 1168 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
1169 makeUnique<WaitableEvent>(); | 1169 WTF::makeUnique<WaitableEvent>(); |
1170 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1170 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
1171 Canvas2DLayerBridge::HibernationScheduled)); | 1171 Canvas2DLayerBridge::HibernationScheduled)); |
1172 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 1172 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
1173 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 1173 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
1174 &WaitableEvent::signal)); | 1174 &WaitableEvent::signal)); |
1175 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1175 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
1176 hibernationStartedEvent->wait(); | 1176 hibernationStartedEvent->wait(); |
1177 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1177 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
1178 | 1178 |
1179 // Test prepareMailbox while hibernating | 1179 // Test prepareMailbox while hibernating |
(...skipping 12 matching lines...) Expand all Loading... |
1192 } | 1192 } |
1193 | 1193 |
1194 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU | 1194 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU |
1195 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileBackgroundRendering) | 1195 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileBackgroundRendering) |
1196 #else | 1196 #else |
1197 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileBackgroundRendering) | 1197 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileBackgroundRendering) |
1198 #endif | 1198 #endif |
1199 { | 1199 { |
1200 FakeGLES2Interface gl; | 1200 FakeGLES2Interface gl; |
1201 std::unique_ptr<WebThread> testThread = | 1201 std::unique_ptr<WebThread> testThread = |
1202 wrapUnique(Platform::current()->createThread("TestThread")); | 1202 WTF::wrapUnique(Platform::current()->createThread("TestThread")); |
1203 | 1203 |
1204 // The Canvas2DLayerBridge has to be created on the thread that will use it | 1204 // The Canvas2DLayerBridge has to be created on the thread that will use it |
1205 // to avoid WeakPtr thread check issues. | 1205 // to avoid WeakPtr thread check issues. |
1206 Canvas2DLayerBridgePtr bridge; | 1206 Canvas2DLayerBridgePtr bridge; |
1207 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, | 1207 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, |
1208 this); | 1208 this); |
1209 | 1209 |
1210 // Register an alternate Logger for tracking hibernation events | 1210 // Register an alternate Logger for tracking hibernation events |
1211 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 1211 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
1212 MockLogger* mockLoggerPtr = mockLogger.get(); | 1212 MockLogger* mockLoggerPtr = mockLogger.get(); |
1213 bridge->setLoggerForTesting(std::move(mockLogger)); | 1213 bridge->setLoggerForTesting(std::move(mockLogger)); |
1214 | 1214 |
1215 // Test entering hibernation | 1215 // Test entering hibernation |
1216 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 1216 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
1217 makeUnique<WaitableEvent>(); | 1217 WTF::makeUnique<WaitableEvent>(); |
1218 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1218 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( |
1219 Canvas2DLayerBridge::HibernationScheduled)); | 1219 Canvas2DLayerBridge::HibernationScheduled)); |
1220 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 1220 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
1221 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 1221 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
1222 &WaitableEvent::signal)); | 1222 &WaitableEvent::signal)); |
1223 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1223 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
1224 hibernationStartedEvent->wait(); | 1224 hibernationStartedEvent->wait(); |
1225 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1225 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
1226 | 1226 |
1227 // Rendering in the background -> temp switch to SW | 1227 // Rendering in the background -> temp switch to SW |
(...skipping 21 matching lines...) Expand all Loading... |
1249 | 1249 |
1250 #if USE_IOSURFACE_FOR_2D_CANVAS | 1250 #if USE_IOSURFACE_FOR_2D_CANVAS |
1251 TEST_F(Canvas2DLayerBridgeTest, DeleteIOSurfaceAfterTeardown) | 1251 TEST_F(Canvas2DLayerBridgeTest, DeleteIOSurfaceAfterTeardown) |
1252 #else | 1252 #else |
1253 TEST_F(Canvas2DLayerBridgeTest, DISABLED_DeleteIOSurfaceAfterTeardown) | 1253 TEST_F(Canvas2DLayerBridgeTest, DISABLED_DeleteIOSurfaceAfterTeardown) |
1254 #endif | 1254 #endif |
1255 { | 1255 { |
1256 FakeGLES2InterfaceWithImageSupport gl; | 1256 FakeGLES2InterfaceWithImageSupport gl; |
1257 FakePlatformSupport testingPlatformSupport; | 1257 FakePlatformSupport testingPlatformSupport; |
1258 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 1258 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
1259 wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 1259 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
1260 | 1260 |
1261 cc::TextureMailbox textureMailbox; | 1261 cc::TextureMailbox textureMailbox; |
1262 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 1262 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
1263 | 1263 |
1264 { | 1264 { |
1265 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 1265 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
1266 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 1266 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
1267 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, | 1267 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, |
1268 kN32_SkColorType))); | 1268 kN32_SkColorType))); |
1269 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback); | 1269 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback); |
1270 } | 1270 } |
1271 | 1271 |
1272 bool lostResource = false; | 1272 bool lostResource = false; |
1273 releaseCallback->Run(gpu::SyncToken(), lostResource); | 1273 releaseCallback->Run(gpu::SyncToken(), lostResource); |
1274 | 1274 |
1275 EXPECT_EQ(1u, gl.createImageCount()); | 1275 EXPECT_EQ(1u, gl.createImageCount()); |
1276 EXPECT_EQ(1u, gl.destroyImageCount()); | 1276 EXPECT_EQ(1u, gl.destroyImageCount()); |
1277 } | 1277 } |
1278 | 1278 |
1279 } // namespace blink | 1279 } // namespace blink |
OLD | NEW |