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

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

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 29 matching lines...) Expand all
40 #include "public/platform/WebThread.h" 40 #include "public/platform/WebThread.h"
41 #include "public/platform/WebTraceLocation.h" 41 #include "public/platform/WebTraceLocation.h"
42 #include "public/platform/functional/WebFunction.h" 42 #include "public/platform/functional/WebFunction.h"
43 #include "skia/ext/texture_handle.h" 43 #include "skia/ext/texture_handle.h"
44 #include "testing/gmock/include/gmock/gmock.h" 44 #include "testing/gmock/include/gmock/gmock.h"
45 #include "testing/gtest/include/gtest/gtest.h" 45 #include "testing/gtest/include/gtest/gtest.h"
46 #include "third_party/skia/include/core/SkCanvas.h" 46 #include "third_party/skia/include/core/SkCanvas.h"
47 #include "third_party/skia/include/gpu/GrContext.h" 47 #include "third_party/skia/include/gpu/GrContext.h"
48 #include "third_party/skia/include/gpu/gl/GrGLInterface.h" 48 #include "third_party/skia/include/gpu/gl/GrGLInterface.h"
49 #include "third_party/skia/include/gpu/gl/GrGLTypes.h" 49 #include "third_party/skia/include/gpu/gl/GrGLTypes.h"
50 #include "wtf/PtrUtil.h"
51 #include "wtf/RefPtr.h" 50 #include "wtf/RefPtr.h"
51
52 #include <memory> 52 #include <memory>
53 53
54 using testing::AnyNumber; 54 using testing::AnyNumber;
55 using testing::AtLeast; 55 using testing::AtLeast;
56 using testing::InSequence; 56 using testing::InSequence;
57 using testing::Return; 57 using testing::Return;
58 using testing::Test; 58 using testing::Test;
59 using testing::_; 59 using testing::_;
60 60
61 namespace blink { 61 namespace blink {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 uint8_t* pixels() override 142 uint8_t* pixels() override
143 { 143 {
144 return nullptr; 144 return nullptr;
145 } 145 }
146 }; 146 };
147 147
148 } // anonymous namespace 148 } // anonymous namespace
149 149
150 class Canvas2DLayerBridgeTest : public Test { 150 class Canvas2DLayerBridgeTest : public Test {
151 public: 151 public:
152 PassRefPtr<Canvas2DLayerBridge> makeBridge(std::unique_ptr<FakeWebGraphicsCo ntext3DProvider> provider, const IntSize& size, Canvas2DLayerBridge::Acceleratio nMode accelerationMode) 152 PassRefPtr<Canvas2DLayerBridge> makeBridge(PassOwnPtr<FakeWebGraphicsContext 3DProvider> provider, const IntSize& size, Canvas2DLayerBridge::AccelerationMode accelerationMode)
153 { 153 {
154 return adoptRef(new Canvas2DLayerBridge(std::move(provider), size, 0, No nOpaque, accelerationMode)); 154 return adoptRef(new Canvas2DLayerBridge(std::move(provider), size, 0, No nOpaque, accelerationMode));
155 } 155 }
156 156
157 protected: 157 protected:
158 void fullLifecycleTest() 158 void fullLifecycleTest()
159 { 159 {
160 FakeGLES2Interface gl; 160 FakeGLES2Interface gl;
161 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrap Unique(new FakeWebGraphicsContext3DProvider(&gl)); 161 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
162 162
163 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move (contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Disable Acceleration))); 163 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move (contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Disable Acceleration)));
164 164
165 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureI nfo(bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown)->getText ureHandle(true)); 165 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureI nfo(bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown)->getText ureHandle(true));
166 EXPECT_EQ(textureInfo, nullptr); 166 EXPECT_EQ(textureInfo, nullptr);
167 bridge.clear(); 167 bridge.clear();
168 } 168 }
169 169
170 void fallbackToSoftwareIfContextLost() 170 void fallbackToSoftwareIfContextLost()
171 { 171 {
172 FakeGLES2Interface gl; 172 FakeGLES2Interface gl;
173 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrap Unique(new FakeWebGraphicsContext3DProvider(&gl)); 173 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
174 174
175 gl.setIsContextLost(true); 175 gl.setIsContextLost(true);
176 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move (contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableA cceleration))); 176 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move (contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableA cceleration)));
177 EXPECT_TRUE(bridge->checkSurfaceValid()); 177 EXPECT_TRUE(bridge->checkSurfaceValid());
178 EXPECT_FALSE(bridge->isAccelerated()); 178 EXPECT_FALSE(bridge->isAccelerated());
179 } 179 }
180 180
181 void fallbackToSoftwareOnFailedTextureAlloc() 181 void fallbackToSoftwareOnFailedTextureAlloc()
182 { 182 {
183 { 183 {
184 // No fallback case. 184 // No fallback case.
185 FakeGLES2Interface gl; 185 FakeGLES2Interface gl;
186 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); 186 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr( new FakeWebGraphicsContext3DProvider(&gl));
187 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena bleAcceleration))); 187 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena bleAcceleration)));
188 EXPECT_TRUE(bridge->checkSurfaceValid()); 188 EXPECT_TRUE(bridge->checkSurfaceValid());
189 EXPECT_TRUE(bridge->isAccelerated()); 189 EXPECT_TRUE(bridge->isAccelerated());
190 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati on, SnapshotReasonUnknown); 190 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati on, SnapshotReasonUnknown);
191 EXPECT_TRUE(bridge->isAccelerated()); 191 EXPECT_TRUE(bridge->isAccelerated());
192 EXPECT_TRUE(snapshot->isTextureBacked()); 192 EXPECT_TRUE(snapshot->isTextureBacked());
193 } 193 }
194 194
195 { 195 {
196 // Fallback case. 196 // Fallback case.
197 FakeGLES2Interface gl; 197 FakeGLES2Interface gl;
198 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); 198 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr( new FakeWebGraphicsContext3DProvider(&gl));
199 GrContext* gr = contextProvider->grContext(); 199 GrContext* gr = contextProvider->grContext();
200 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena bleAcceleration))); 200 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::Ena bleAcceleration)));
201 EXPECT_TRUE(bridge->checkSurfaceValid()); 201 EXPECT_TRUE(bridge->checkSurfaceValid());
202 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that allo cation will fail 202 EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that allo cation will fail
203 // This will cause SkSurface_Gpu creation to fail without 203 // This will cause SkSurface_Gpu creation to fail without
204 // Canvas2DLayerBridge otherwise detecting that anything was disable d. 204 // Canvas2DLayerBridge otherwise detecting that anything was disable d.
205 gr->abandonContext(); 205 gr->abandonContext();
206 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati on, SnapshotReasonUnknown); 206 RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAccelerati on, SnapshotReasonUnknown);
207 EXPECT_FALSE(bridge->isAccelerated()); 207 EXPECT_FALSE(bridge->isAccelerated());
208 EXPECT_FALSE(snapshot->isTextureBacked()); 208 EXPECT_FALSE(snapshot->isTextureBacked());
209 } 209 }
210 } 210 }
211 211
212 void noDrawOnContextLostTest() 212 void noDrawOnContextLostTest()
213 { 213 {
214 FakeGLES2Interface gl; 214 FakeGLES2Interface gl;
215 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrap Unique(new FakeWebGraphicsContext3DProvider(&gl)); 215 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
216 216
217 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move (contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAc celerationForTesting))); 217 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move (contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAc celerationForTesting)));
218 EXPECT_TRUE(bridge->checkSurfaceValid()); 218 EXPECT_TRUE(bridge->checkSurfaceValid());
219 SkPaint paint; 219 SkPaint paint;
220 uint32_t genID = bridge->getOrCreateSurface()->generationID(); 220 uint32_t genID = bridge->getOrCreateSurface()->generationID();
221 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); 221 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
222 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); 222 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID());
223 gl.setIsContextLost(true); 223 gl.setIsContextLost(true);
224 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); 224 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID());
225 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); 225 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
226 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID()); 226 EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID());
227 // This results in the internal surface being torn down in response to t he context loss. 227 // This results in the internal surface being torn down in response to t he context loss.
228 EXPECT_FALSE(bridge->checkSurfaceValid()); 228 EXPECT_FALSE(bridge->checkSurfaceValid());
229 EXPECT_EQ(nullptr, bridge->getOrCreateSurface()); 229 EXPECT_EQ(nullptr, bridge->getOrCreateSurface());
230 // The following passes by not crashing 230 // The following passes by not crashing
231 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); 231 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
232 bridge->flush(); 232 bridge->flush();
233 } 233 }
234 234
235 void prepareMailboxWithBitmapTest() 235 void prepareMailboxWithBitmapTest()
236 { 236 {
237 FakeGLES2Interface gl; 237 FakeGLES2Interface gl;
238 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrap Unique(new FakeWebGraphicsContext3DProvider(&gl)); 238 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
239 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move (contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAc celerationForTesting))); 239 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move (contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAc celerationForTesting)));
240 bridge->m_lastImageId = 1; 240 bridge->m_lastImageId = 1;
241 241
242 NullWebExternalBitmap bitmap; 242 NullWebExternalBitmap bitmap;
243 bridge->prepareMailbox(0, &bitmap); 243 bridge->prepareMailbox(0, &bitmap);
244 EXPECT_EQ(0u, bridge->m_lastImageId); 244 EXPECT_EQ(0u, bridge->m_lastImageId);
245 } 245 }
246 246
247 void prepareMailboxAndLoseResourceTest() 247 void prepareMailboxAndLoseResourceTest()
248 { 248 {
249 bool lostResource = true; 249 bool lostResource = true;
250 250
251 // Prepare a mailbox, then report the resource as lost. 251 // Prepare a mailbox, then report the resource as lost.
252 // This test passes by not crashing and not triggering assertions. 252 // This test passes by not crashing and not triggering assertions.
253 { 253 {
254 FakeGLES2Interface gl; 254 FakeGLES2Interface gl;
255 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); 255 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr( new FakeWebGraphicsContext3DProvider(&gl));
256 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::For ceAccelerationForTesting))); 256 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::For ceAccelerationForTesting)));
257 WebExternalTextureMailbox mailbox; 257 WebExternalTextureMailbox mailbox;
258 bridge->prepareMailbox(&mailbox, 0); 258 bridge->prepareMailbox(&mailbox, 0);
259 bridge->mailboxReleased(mailbox, lostResource); 259 bridge->mailboxReleased(mailbox, lostResource);
260 } 260 }
261 261
262 // Retry with mailbox released while bridge destruction is in progress. 262 // Retry with mailbox released while bridge destruction is in progress.
263 { 263 {
264 FakeGLES2Interface gl; 264 FakeGLES2Interface gl;
265 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); 265 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr( new FakeWebGraphicsContext3DProvider(&gl));
266 WebExternalTextureMailbox mailbox; 266 WebExternalTextureMailbox mailbox;
267 Canvas2DLayerBridge* rawBridge; 267 Canvas2DLayerBridge* rawBridge;
268 { 268 {
269 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(s td::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge: :ForceAccelerationForTesting))); 269 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(s td::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge: :ForceAccelerationForTesting)));
270 bridge->prepareMailbox(&mailbox, 0); 270 bridge->prepareMailbox(&mailbox, 0);
271 rawBridge = bridge.get(); 271 rawBridge = bridge.get();
272 } // bridge goes out of scope, but object is kept alive by self refe rences. 272 } // bridge goes out of scope, but object is kept alive by self refe rences.
273 // Before fixing crbug.com/411864, the following line you cause a me mory use after free 273 // Before fixing crbug.com/411864, the following line you cause a me mory use after free
274 // that sometimes causes a crash in normal builds and crashes consis tently with ASAN. 274 // that sometimes causes a crash in normal builds and crashes consis tently with ASAN.
275 rawBridge->mailboxReleased(mailbox, lostResource); // This should se lf-destruct the bridge. 275 rawBridge->mailboxReleased(mailbox, lostResource); // This should se lf-destruct the bridge.
276 } 276 }
277 } 277 }
278 278
279 void accelerationHintTest() 279 void accelerationHintTest()
280 { 280 {
281 { 281 {
282 FakeGLES2Interface gl; 282 FakeGLES2Interface gl;
283 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); 283 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr( new FakeWebGraphicsContext3DProvider(&gl));
284 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena bleAcceleration))); 284 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena bleAcceleration)));
285 SkPaint paint; 285 SkPaint paint;
286 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); 286 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
287 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown); 287 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown);
288 EXPECT_TRUE(bridge->checkSurfaceValid()); 288 EXPECT_TRUE(bridge->checkSurfaceValid());
289 EXPECT_TRUE(bridge->isAccelerated()); 289 EXPECT_TRUE(bridge->isAccelerated());
290 } 290 }
291 291
292 { 292 {
293 FakeGLES2Interface gl; 293 FakeGLES2Interface gl;
294 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); 294 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr( new FakeWebGraphicsContext3DProvider(&gl));
295 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena bleAcceleration))); 295 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std:: move(contextProvider), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::Ena bleAcceleration)));
296 SkPaint paint; 296 SkPaint paint;
297 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint); 297 bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
298 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleratio n, SnapshotReasonUnknown); 298 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleratio n, SnapshotReasonUnknown);
299 EXPECT_TRUE(bridge->checkSurfaceValid()); 299 EXPECT_TRUE(bridge->checkSurfaceValid());
300 EXPECT_FALSE(bridge->isAccelerated()); 300 EXPECT_FALSE(bridge->isAccelerated());
301 } 301 }
302 } 302 }
303 }; 303 };
304 304
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 339
340 class MockLogger : public Canvas2DLayerBridge::Logger { 340 class MockLogger : public Canvas2DLayerBridge::Logger {
341 public: 341 public:
342 MOCK_METHOD1(reportHibernationEvent, void(Canvas2DLayerBridge::HibernationEv ent)); 342 MOCK_METHOD1(reportHibernationEvent, void(Canvas2DLayerBridge::HibernationEv ent));
343 MOCK_METHOD0(didStartHibernating, void()); 343 MOCK_METHOD0(didStartHibernating, void());
344 virtual ~MockLogger() { } 344 virtual ~MockLogger() { }
345 }; 345 };
346 346
347 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Int erface* gl, Canvas2DLayerBridgeTest* testHost, WaitableEvent* doneEvent) 347 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Int erface* gl, Canvas2DLayerBridgeTest* testHost, WaitableEvent* doneEvent)
348 { 348 {
349 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUniq ue(new FakeWebGraphicsContext3DProvider(gl)); 349 OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new Fake WebGraphicsContext3DProvider(gl));
350 *bridgePtr = testHost->makeBridge(std::move(contextProvider), IntSize(300, 3 00), Canvas2DLayerBridge::EnableAcceleration); 350 *bridgePtr = testHost->makeBridge(std::move(contextProvider), IntSize(300, 3 00), Canvas2DLayerBridge::EnableAcceleration);
351 // draw+flush to trigger the creation of a GPU surface 351 // draw+flush to trigger the creation of a GPU surface
352 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); 352 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1));
353 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); 353 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1));
354 (*bridgePtr)->flush(); 354 (*bridgePtr)->flush();
355 doneEvent->signal(); 355 doneEvent->signal();
356 } 356 }
357 357
358 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* te stThread, Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Interface* gl, Can vas2DLayerBridgeTest* testHost) 358 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* te stThread, Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Interface* gl, Can vas2DLayerBridgeTest* testHost)
359 { 359 {
360 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = wrapUnique(new WaitableE vent()); 360 OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
361 testThread->getWebTaskRunner()->postTask( 361 testThread->getWebTaskRunner()->postTask(
362 location, 362 location,
363 threadSafeBind(&runCreateBridgeTask, 363 threadSafeBind(&runCreateBridgeTask,
364 AllowCrossThreadAccess(bridgePtr), 364 AllowCrossThreadAccess(bridgePtr),
365 AllowCrossThreadAccess(gl), 365 AllowCrossThreadAccess(gl),
366 AllowCrossThreadAccess(testHost), 366 AllowCrossThreadAccess(testHost),
367 AllowCrossThreadAccess(bridgeCreatedEvent.get()))); 367 AllowCrossThreadAccess(bridgeCreatedEvent.get())));
368 bridgeCreatedEvent->wait(); 368 bridgeCreatedEvent->wait();
369 } 369 }
370 370
371 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, WaitableEvent* done Event) 371 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, WaitableEvent* done Event)
372 { 372 {
373 bridgePtr->clear(); 373 bridgePtr->clear();
374 if (doneEvent) 374 if (doneEvent)
375 doneEvent->signal(); 375 doneEvent->signal();
376 } 376 }
377 377
378 void postDestroyBridgeTask(const WebTraceLocation& location, WebThread* testThre ad, Canvas2DLayerBridgePtr* bridgePtr) 378 void postDestroyBridgeTask(const WebTraceLocation& location, WebThread* testThre ad, Canvas2DLayerBridgePtr* bridgePtr)
379 { 379 {
380 testThread->getWebTaskRunner()->postTask( 380 testThread->getWebTaskRunner()->postTask(
381 location, 381 location,
382 threadSafeBind(&runDestroyBridgeTask, 382 threadSafeBind(&runDestroyBridgeTask,
383 AllowCrossThreadAccess(bridgePtr), 383 AllowCrossThreadAccess(bridgePtr),
384 nullptr)); 384 nullptr));
385 } 385 }
386 386
387 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, WebThread* t estThread, Canvas2DLayerBridgePtr* bridgePtr) 387 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, WebThread* t estThread, Canvas2DLayerBridgePtr* bridgePtr)
388 { 388 {
389 std::unique_ptr<WaitableEvent> bridgeDestroyedEvent = wrapUnique(new Waitabl eEvent()); 389 OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
390 testThread->getWebTaskRunner()->postTask( 390 testThread->getWebTaskRunner()->postTask(
391 location, 391 location,
392 threadSafeBind(&runDestroyBridgeTask, 392 threadSafeBind(&runDestroyBridgeTask,
393 AllowCrossThreadAccess(bridgePtr), 393 AllowCrossThreadAccess(bridgePtr),
394 AllowCrossThreadAccess(bridgeDestroyedEvent.get()))); 394 AllowCrossThreadAccess(bridgeDestroyedEvent.get())));
395 bridgeDestroyedEvent->wait(); 395 bridgeDestroyedEvent->wait();
396 } 396 }
397 397
398 void runSetIsHiddenTask(Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent) 398 void runSetIsHiddenTask(Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent)
399 { 399 {
400 bridge->setIsHidden(value); 400 bridge->setIsHidden(value);
401 if (doneEvent) 401 if (doneEvent)
402 doneEvent->signal(); 402 doneEvent->signal();
403 } 403 }
404 404
405 void postSetIsHiddenTask(const WebTraceLocation& location, WebThread* testThread , Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent = nullptr) 405 void postSetIsHiddenTask(const WebTraceLocation& location, WebThread* testThread , Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent = nullptr)
406 { 406 {
407 testThread->getWebTaskRunner()->postTask( 407 testThread->getWebTaskRunner()->postTask(
408 location, 408 location,
409 threadSafeBind(&runSetIsHiddenTask, 409 threadSafeBind(&runSetIsHiddenTask,
410 AllowCrossThreadAccess(bridge), 410 AllowCrossThreadAccess(bridge),
411 value, 411 value,
412 AllowCrossThreadAccess(doneEvent))); 412 AllowCrossThreadAccess(doneEvent)));
413 } 413 }
414 414
415 void postAndWaitSetIsHiddenTask(const WebTraceLocation& location, WebThread* tes tThread, Canvas2DLayerBridge* bridge, bool value) 415 void postAndWaitSetIsHiddenTask(const WebTraceLocation& location, WebThread* tes tThread, Canvas2DLayerBridge* bridge, bool value)
416 { 416 {
417 std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent()); 417 OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
418 postSetIsHiddenTask(location, testThread, bridge, value, doneEvent.get()); 418 postSetIsHiddenTask(location, testThread, bridge, value, doneEvent.get());
419 doneEvent->wait(); 419 doneEvent->wait();
420 } 420 }
421 421
422 class MockImageBuffer : public ImageBuffer { 422 class MockImageBuffer : public ImageBuffer {
423 public: 423 public:
424 MockImageBuffer() 424 MockImageBuffer()
425 : ImageBuffer(wrapUnique(new UnacceleratedImageBufferSurface(IntSize(1, 1)))) { } 425 : ImageBuffer(adoptPtr(new UnacceleratedImageBufferSurface(IntSize(1, 1) ))) { }
426 426
427 MOCK_CONST_METHOD1(resetCanvas, void(SkCanvas*)); 427 MOCK_CONST_METHOD1(resetCanvas, void(SkCanvas*));
428 428
429 virtual ~MockImageBuffer() { } 429 virtual ~MockImageBuffer() { }
430 }; 430 };
431 431
432 #if CANVAS2D_HIBERNATION_ENABLED 432 #if CANVAS2D_HIBERNATION_ENABLED
433 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycle) 433 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycle)
434 #else 434 #else
435 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycle) 435 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycle)
436 #endif 436 #endif
437 { 437 {
438 FakeGLES2Interface gl; 438 FakeGLES2Interface gl;
439 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 439 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
440 440
441 // The Canvas2DLayerBridge has to be created on the thread that will use it 441 // The Canvas2DLayerBridge has to be created on the thread that will use it
442 // to avoid WeakPtr thread check issues. 442 // to avoid WeakPtr thread check issues.
443 Canvas2DLayerBridgePtr bridge; 443 Canvas2DLayerBridgePtr bridge;
444 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 444 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
445 445
446 // Register an alternate Logger for tracking hibernation events 446 // Register an alternate Logger for tracking hibernation events
447 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 447 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
448 MockLogger* mockLoggerPtr = mockLogger.get(); 448 MockLogger* mockLoggerPtr = mockLogger.get();
449 bridge->setLoggerForTesting(std::move(mockLogger)); 449 bridge->setLoggerForTesting(std::move(mockLogger));
450 450
451 // Test entering hibernation 451 // Test entering hibernation
452 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 452 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
453 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 453 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
454 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 454 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
455 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 455 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
456 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 456 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
457 hibernationStartedEvent->wait(); 457 hibernationStartedEvent->wait();
458 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 458 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
459 EXPECT_FALSE(bridge->isAccelerated()); 459 EXPECT_FALSE(bridge->isAccelerated());
460 EXPECT_TRUE(bridge->isHibernating()); 460 EXPECT_TRUE(bridge->isHibernating());
461 EXPECT_TRUE(bridge->checkSurfaceValid()); 461 EXPECT_TRUE(bridge->checkSurfaceValid());
462 462
(...skipping 10 matching lines...) Expand all
473 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 473 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
474 } 474 }
475 475
476 #if CANVAS2D_HIBERNATION_ENABLED 476 #if CANVAS2D_HIBERNATION_ENABLED
477 TEST_F(Canvas2DLayerBridgeTest, HibernationReEntry) 477 TEST_F(Canvas2DLayerBridgeTest, HibernationReEntry)
478 #else 478 #else
479 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationReEntry) 479 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationReEntry)
480 #endif 480 #endif
481 { 481 {
482 FakeGLES2Interface gl; 482 FakeGLES2Interface gl;
483 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 483 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
484 484
485 // The Canvas2DLayerBridge has to be created on the thread that will use it 485 // The Canvas2DLayerBridge has to be created on the thread that will use it
486 // to avoid WeakPtr thread check issues. 486 // to avoid WeakPtr thread check issues.
487 Canvas2DLayerBridgePtr bridge; 487 Canvas2DLayerBridgePtr bridge;
488 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 488 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
489 489
490 // Register an alternate Logger for tracking hibernation events 490 // Register an alternate Logger for tracking hibernation events
491 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 491 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
492 MockLogger* mockLoggerPtr = mockLogger.get(); 492 MockLogger* mockLoggerPtr = mockLogger.get();
493 bridge->setLoggerForTesting(std::move(mockLogger)); 493 bridge->setLoggerForTesting(std::move(mockLogger));
494 494
495 // Test entering hibernation 495 // Test entering hibernation
496 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 496 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
497 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 497 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
498 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 498 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
499 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 499 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
500 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 500 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
501 // Toggle visibility before the idle tasks that enters hibernation gets a 501 // Toggle visibility before the idle tasks that enters hibernation gets a
502 // chance to run. 502 // chance to run.
503 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); 503 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
504 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 504 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
505 505
506 hibernationStartedEvent->wait(); 506 hibernationStartedEvent->wait();
(...skipping 15 matching lines...) Expand all
522 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 522 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
523 } 523 }
524 524
525 #if CANVAS2D_HIBERNATION_ENABLED 525 #if CANVAS2D_HIBERNATION_ENABLED
526 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycleWithDeferredRenderingDisable d) 526 TEST_F(Canvas2DLayerBridgeTest, HibernationLifeCycleWithDeferredRenderingDisable d)
527 #else 527 #else
528 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycleWithDeferredRenderi ngDisabled) 528 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationLifeCycleWithDeferredRenderi ngDisabled)
529 #endif 529 #endif
530 { 530 {
531 FakeGLES2Interface gl; 531 FakeGLES2Interface gl;
532 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 532 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
533 533
534 // The Canvas2DLayerBridge has to be created on the thread that will use it 534 // The Canvas2DLayerBridge has to be created on the thread that will use it
535 // to avoid WeakPtr thread check issues. 535 // to avoid WeakPtr thread check issues.
536 Canvas2DLayerBridgePtr bridge; 536 Canvas2DLayerBridgePtr bridge;
537 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 537 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
538 bridge->disableDeferral(DisableDeferralReasonUnknown); 538 bridge->disableDeferral(DisableDeferralReasonUnknown);
539 MockImageBuffer mockImageBuffer; 539 MockImageBuffer mockImageBuffer;
540 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); 540 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber());
541 bridge->setImageBuffer(&mockImageBuffer); 541 bridge->setImageBuffer(&mockImageBuffer);
542 542
543 // Register an alternate Logger for tracking hibernation events 543 // Register an alternate Logger for tracking hibernation events
544 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 544 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
545 MockLogger* mockLoggerPtr = mockLogger.get(); 545 MockLogger* mockLoggerPtr = mockLogger.get();
546 bridge->setLoggerForTesting(std::move(mockLogger)); 546 bridge->setLoggerForTesting(std::move(mockLogger));
547 547
548 // Test entering hibernation 548 // Test entering hibernation
549 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 549 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
550 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 550 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
551 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 551 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
552 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 552 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
553 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 553 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
554 hibernationStartedEvent->wait(); 554 hibernationStartedEvent->wait();
555 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 555 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
556 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); 556 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
557 EXPECT_FALSE(bridge->isAccelerated()); 557 EXPECT_FALSE(bridge->isAccelerated());
558 EXPECT_TRUE(bridge->isHibernating()); 558 EXPECT_TRUE(bridge->isHibernating());
559 EXPECT_TRUE(bridge->checkSurfaceValid()); 559 EXPECT_TRUE(bridge->checkSurfaceValid());
(...skipping 16 matching lines...) Expand all
576 void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent) 576 void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent)
577 { 577 {
578 bridge->didDraw(FloatRect(0, 0, 1, 1)); 578 bridge->didDraw(FloatRect(0, 0, 1, 1));
579 bridge->finalizeFrame(FloatRect(0, 0, 1, 1)); 579 bridge->finalizeFrame(FloatRect(0, 0, 1, 1));
580 bridge->flush(); 580 bridge->flush();
581 doneEvent->signal(); 581 doneEvent->signal();
582 } 582 }
583 583
584 void postAndWaitRenderingTask(const WebTraceLocation& location, WebThread* testT hread, Canvas2DLayerBridge* bridge) 584 void postAndWaitRenderingTask(const WebTraceLocation& location, WebThread* testT hread, Canvas2DLayerBridge* bridge)
585 { 585 {
586 std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent()); 586 OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
587 testThread->getWebTaskRunner()->postTask( 587 testThread->getWebTaskRunner()->postTask(
588 location, 588 location,
589 threadSafeBind(&runRenderingTask, 589 threadSafeBind(&runRenderingTask,
590 AllowCrossThreadAccess(bridge), 590 AllowCrossThreadAccess(bridge),
591 AllowCrossThreadAccess(doneEvent.get()))); 591 AllowCrossThreadAccess(doneEvent.get())));
592 doneEvent->wait(); 592 doneEvent->wait();
593 } 593 }
594 594
595 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU 595 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU
596 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating) 596 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating)
597 #else 597 #else
598 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernating) 598 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernating)
599 #endif 599 #endif
600 { 600 {
601 FakeGLES2Interface gl; 601 FakeGLES2Interface gl;
602 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 602 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
603 603
604 // The Canvas2DLayerBridge has to be created on the thread that will use it 604 // The Canvas2DLayerBridge has to be created on the thread that will use it
605 // to avoid WeakPtr thread check issues. 605 // to avoid WeakPtr thread check issues.
606 Canvas2DLayerBridgePtr bridge; 606 Canvas2DLayerBridgePtr bridge;
607 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 607 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
608 608
609 // Register an alternate Logger for tracking hibernation events 609 // Register an alternate Logger for tracking hibernation events
610 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 610 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
611 MockLogger* mockLoggerPtr = mockLogger.get(); 611 MockLogger* mockLoggerPtr = mockLogger.get();
612 bridge->setLoggerForTesting(std::move(mockLogger)); 612 bridge->setLoggerForTesting(std::move(mockLogger));
613 613
614 // Test entering hibernation 614 // Test entering hibernation
615 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 615 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
616 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 616 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
617 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 617 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
618 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 618 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
619 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 619 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
620 hibernationStartedEvent->wait(); 620 hibernationStartedEvent->wait();
621 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 621 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
622 EXPECT_FALSE(bridge->isAccelerated()); 622 EXPECT_FALSE(bridge->isAccelerated());
623 EXPECT_TRUE(bridge->isHibernating()); 623 EXPECT_TRUE(bridge->isHibernating());
624 EXPECT_TRUE(bridge->checkSurfaceValid()); 624 EXPECT_TRUE(bridge->checkSurfaceValid());
625 625
(...skipping 17 matching lines...) Expand all
643 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 643 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
644 } 644 }
645 645
646 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU 646 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU
647 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernatingWithDeferredR enderingDisabled) 647 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernatingWithDeferredR enderingDisabled)
648 #else 648 #else
649 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernatingWith DeferredRenderingDisabled) 649 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernatingWith DeferredRenderingDisabled)
650 #endif 650 #endif
651 { 651 {
652 FakeGLES2Interface gl; 652 FakeGLES2Interface gl;
653 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 653 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
654 654
655 // The Canvas2DLayerBridge has to be created on the thread that will use it 655 // The Canvas2DLayerBridge has to be created on the thread that will use it
656 // to avoid WeakPtr thread check issues. 656 // to avoid WeakPtr thread check issues.
657 Canvas2DLayerBridgePtr bridge; 657 Canvas2DLayerBridgePtr bridge;
658 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 658 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
659 MockImageBuffer mockImageBuffer; 659 MockImageBuffer mockImageBuffer;
660 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); 660 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber());
661 bridge->setImageBuffer(&mockImageBuffer); 661 bridge->setImageBuffer(&mockImageBuffer);
662 bridge->disableDeferral(DisableDeferralReasonUnknown); 662 bridge->disableDeferral(DisableDeferralReasonUnknown);
663 663
664 // Register an alternate Logger for tracking hibernation events 664 // Register an alternate Logger for tracking hibernation events
665 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 665 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
666 MockLogger* mockLoggerPtr = mockLogger.get(); 666 MockLogger* mockLoggerPtr = mockLogger.get();
667 bridge->setLoggerForTesting(std::move(mockLogger)); 667 bridge->setLoggerForTesting(std::move(mockLogger));
668 668
669 // Test entering hibernation 669 // Test entering hibernation
670 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 670 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
671 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 671 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
672 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 672 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
673 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 673 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
674 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 674 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
675 hibernationStartedEvent->wait(); 675 hibernationStartedEvent->wait();
676 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 676 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
677 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); 677 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
678 EXPECT_FALSE(bridge->isAccelerated()); 678 EXPECT_FALSE(bridge->isAccelerated());
679 EXPECT_TRUE(bridge->isHibernating()); 679 EXPECT_TRUE(bridge->isHibernating());
680 EXPECT_TRUE(bridge->checkSurfaceValid()); 680 EXPECT_TRUE(bridge->checkSurfaceValid());
(...skipping 23 matching lines...) Expand all
704 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 704 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
705 } 705 }
706 706
707 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU 707 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU
708 TEST_F(Canvas2DLayerBridgeTest, DisableDeferredRenderingWhileHibernating) 708 TEST_F(Canvas2DLayerBridgeTest, DisableDeferredRenderingWhileHibernating)
709 #else 709 #else
710 TEST_F(Canvas2DLayerBridgeTest, DISABLED_DisableDeferredRenderingWhileHibernatin g) 710 TEST_F(Canvas2DLayerBridgeTest, DISABLED_DisableDeferredRenderingWhileHibernatin g)
711 #endif 711 #endif
712 { 712 {
713 FakeGLES2Interface gl; 713 FakeGLES2Interface gl;
714 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 714 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
715 715
716 // The Canvas2DLayerBridge has to be created on the thread that will use it 716 // The Canvas2DLayerBridge has to be created on the thread that will use it
717 // to avoid WeakPtr thread check issues. 717 // to avoid WeakPtr thread check issues.
718 Canvas2DLayerBridgePtr bridge; 718 Canvas2DLayerBridgePtr bridge;
719 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 719 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
720 MockImageBuffer mockImageBuffer; 720 MockImageBuffer mockImageBuffer;
721 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber()); 721 EXPECT_CALL(mockImageBuffer, resetCanvas(_)).Times(AnyNumber());
722 bridge->setImageBuffer(&mockImageBuffer); 722 bridge->setImageBuffer(&mockImageBuffer);
723 723
724 // Register an alternate Logger for tracking hibernation events 724 // Register an alternate Logger for tracking hibernation events
725 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 725 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
726 MockLogger* mockLoggerPtr = mockLogger.get(); 726 MockLogger* mockLoggerPtr = mockLogger.get();
727 bridge->setLoggerForTesting(std::move(mockLogger)); 727 bridge->setLoggerForTesting(std::move(mockLogger));
728 728
729 // Test entering hibernation 729 // Test entering hibernation
730 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 730 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
731 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 731 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
732 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 732 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
733 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 733 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
734 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 734 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
735 hibernationStartedEvent->wait(); 735 hibernationStartedEvent->wait();
736 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 736 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
737 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); 737 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer);
738 EXPECT_FALSE(bridge->isAccelerated()); 738 EXPECT_FALSE(bridge->isAccelerated());
739 EXPECT_TRUE(bridge->isHibernating()); 739 EXPECT_TRUE(bridge->isHibernating());
740 EXPECT_TRUE(bridge->checkSurfaceValid()); 740 EXPECT_TRUE(bridge->checkSurfaceValid());
(...skipping 23 matching lines...) Expand all
764 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 764 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
765 } 765 }
766 766
767 #if CANVAS2D_HIBERNATION_ENABLED 767 #if CANVAS2D_HIBERNATION_ENABLED
768 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating) 768 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernating)
769 #else 769 #else
770 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernating) 770 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernating)
771 #endif 771 #endif
772 { 772 {
773 FakeGLES2Interface gl; 773 FakeGLES2Interface gl;
774 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 774 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
775 775
776 // The Canvas2DLayerBridge has to be created on the thread that will use it 776 // The Canvas2DLayerBridge has to be created on the thread that will use it
777 // to avoid WeakPtr thread check issues. 777 // to avoid WeakPtr thread check issues.
778 Canvas2DLayerBridgePtr bridge; 778 Canvas2DLayerBridgePtr bridge;
779 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 779 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
780 780
781 // Register an alternate Logger for tracking hibernation events 781 // Register an alternate Logger for tracking hibernation events
782 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 782 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
783 MockLogger* mockLoggerPtr = mockLogger.get(); 783 MockLogger* mockLoggerPtr = mockLogger.get();
784 bridge->setLoggerForTesting(std::move(mockLogger)); 784 bridge->setLoggerForTesting(std::move(mockLogger));
785 785
786 // Test entering hibernation 786 // Test entering hibernation
787 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 787 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
788 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 788 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
789 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 789 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
790 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 790 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
791 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 791 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
792 hibernationStartedEvent->wait(); 792 hibernationStartedEvent->wait();
793 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 793 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
794 EXPECT_FALSE(bridge->isAccelerated()); 794 EXPECT_FALSE(bridge->isAccelerated());
795 EXPECT_TRUE(bridge->isHibernating()); 795 EXPECT_TRUE(bridge->isHibernating());
796 EXPECT_TRUE(bridge->checkSurfaceValid()); 796 EXPECT_TRUE(bridge->checkSurfaceValid());
797 797
798 // Tear down the bridge while hibernating 798 // Tear down the bridge while hibernating
799 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationEndedWithTeardown)); 799 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationEndedWithTeardown));
800 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 800 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
801 } 801 }
802 802
803 #if CANVAS2D_HIBERNATION_ENABLED 803 #if CANVAS2D_HIBERNATION_ENABLED
804 TEST_F(Canvas2DLayerBridgeTest, SnapshotWhileHibernating) 804 TEST_F(Canvas2DLayerBridgeTest, SnapshotWhileHibernating)
805 #else 805 #else
806 TEST_F(Canvas2DLayerBridgeTest, DISABLED_SnapshotWhileHibernating) 806 TEST_F(Canvas2DLayerBridgeTest, DISABLED_SnapshotWhileHibernating)
807 #endif 807 #endif
808 { 808 {
809 FakeGLES2Interface gl; 809 FakeGLES2Interface gl;
810 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 810 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
811 811
812 // The Canvas2DLayerBridge has to be created on the thread that will use it 812 // The Canvas2DLayerBridge has to be created on the thread that will use it
813 // to avoid WeakPtr thread check issues. 813 // to avoid WeakPtr thread check issues.
814 Canvas2DLayerBridgePtr bridge; 814 Canvas2DLayerBridgePtr bridge;
815 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 815 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
816 816
817 // Register an alternate Logger for tracking hibernation events 817 // Register an alternate Logger for tracking hibernation events
818 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 818 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
819 MockLogger* mockLoggerPtr = mockLogger.get(); 819 MockLogger* mockLoggerPtr = mockLogger.get();
820 bridge->setLoggerForTesting(std::move(mockLogger)); 820 bridge->setLoggerForTesting(std::move(mockLogger));
821 821
822 // Test entering hibernation 822 // Test entering hibernation
823 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 823 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
824 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 824 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
825 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 825 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
826 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 826 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
827 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 827 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
828 hibernationStartedEvent->wait(); 828 hibernationStartedEvent->wait();
829 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 829 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
830 EXPECT_FALSE(bridge->isAccelerated()); 830 EXPECT_FALSE(bridge->isAccelerated());
831 EXPECT_TRUE(bridge->isHibernating()); 831 EXPECT_TRUE(bridge->isHibernating());
832 EXPECT_TRUE(bridge->checkSurfaceValid()); 832 EXPECT_TRUE(bridge->checkSurfaceValid());
833 833
834 // Take a snapshot and verify that it is not accelerated due to hibernation 834 // Take a snapshot and verify that it is not accelerated due to hibernation
835 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration, Snapsho tReasonUnknown); 835 RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration, Snapsho tReasonUnknown);
836 EXPECT_FALSE(image->isTextureBacked()); 836 EXPECT_FALSE(image->isTextureBacked());
837 image.clear(); 837 image.clear();
838 838
839 // Verify that taking a snapshot did not affect the state of bridge 839 // Verify that taking a snapshot did not affect the state of bridge
840 EXPECT_FALSE(bridge->isAccelerated()); 840 EXPECT_FALSE(bridge->isAccelerated());
841 EXPECT_TRUE(bridge->isHibernating()); 841 EXPECT_TRUE(bridge->isHibernating());
842 EXPECT_TRUE(bridge->checkSurfaceValid()); 842 EXPECT_TRUE(bridge->checkSurfaceValid());
843 843
844 // End hibernation normally 844 // End hibernation normally
845 std::unique_ptr<WaitableEvent> hibernationEndedEvent = wrapUnique(new Waitab leEvent()); 845 OwnPtr<WaitableEvent> hibernationEndedEvent = adoptPtr(new WaitableEvent());
846 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationEndedNormally)) 846 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationEndedNormally))
847 .WillOnce(testing::InvokeWithoutArgs(hibernationEndedEvent.get(), &Waita bleEvent::signal)); 847 .WillOnce(testing::InvokeWithoutArgs(hibernationEndedEvent.get(), &Waita bleEvent::signal));
848 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); 848 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
849 hibernationEndedEvent->wait(); 849 hibernationEndedEvent->wait();
850 850
851 // Tear down the bridge while hibernating 851 // Tear down the bridge while hibernating
852 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 852 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
853 } 853 }
854 854
855 class IdleFenceTask : public WebThread::IdleTask { 855 class IdleFenceTask : public WebThread::IdleTask {
(...skipping 13 matching lines...) Expand all
869 WaitableEvent* m_doneEvent; 869 WaitableEvent* m_doneEvent;
870 }; 870 };
871 871
872 #if CANVAS2D_HIBERNATION_ENABLED 872 #if CANVAS2D_HIBERNATION_ENABLED
873 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernationIsPending) 873 TEST_F(Canvas2DLayerBridgeTest, TeardownWhileHibernationIsPending)
874 #else 874 #else
875 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernationIsPending) 875 TEST_F(Canvas2DLayerBridgeTest, DISABLED_TeardownWhileHibernationIsPending)
876 #endif 876 #endif
877 { 877 {
878 FakeGLES2Interface gl; 878 FakeGLES2Interface gl;
879 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 879 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
880 880
881 // The Canvas2DLayerBridge has to be created on the thread that will use it 881 // The Canvas2DLayerBridge has to be created on the thread that will use it
882 // to avoid WeakPtr thread check issues. 882 // to avoid WeakPtr thread check issues.
883 Canvas2DLayerBridgePtr bridge; 883 Canvas2DLayerBridgePtr bridge;
884 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 884 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
885 885
886 // Register an alternate Logger for tracking hibernation events 886 // Register an alternate Logger for tracking hibernation events
887 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 887 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
888 MockLogger* mockLoggerPtr = mockLogger.get(); 888 MockLogger* mockLoggerPtr = mockLogger.get();
889 bridge->setLoggerForTesting(std::move(mockLogger)); 889 bridge->setLoggerForTesting(std::move(mockLogger));
890 890
891 // Test entering hibernation 891 // Test entering hibernation
892 std::unique_ptr<WaitableEvent> hibernationScheduledEvent = wrapUnique(new Wa itableEvent()); 892 OwnPtr<WaitableEvent> hibernationScheduledEvent = adoptPtr(new WaitableEvent ());
893 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 893 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
894 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, h ibernationScheduledEvent.get()); 894 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, h ibernationScheduledEvent.get());
895 postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 895 postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
896 // In production, we would expect a 896 // In production, we would expect a
897 // HibernationAbortedDueToDestructionWhileHibernatePending event to be 897 // HibernationAbortedDueToDestructionWhileHibernatePending event to be
898 // fired, but that signal is lost in the unit test due to no longer having 898 // fired, but that signal is lost in the unit test due to no longer having
899 // a bridge to hold the mockLogger. 899 // a bridge to hold the mockLogger.
900 hibernationScheduledEvent->wait(); 900 hibernationScheduledEvent->wait();
901 // Once we know the hibernation task is scheduled, we can schedule a fence. 901 // Once we know the hibernation task is scheduled, we can schedule a fence.
902 // Assuming Idle tasks are guaranteed to run in the order they were 902 // Assuming Idle tasks are guaranteed to run in the order they were
903 // submitted, this fence will guarantee the attempt to hibernate runs to 903 // submitted, this fence will guarantee the attempt to hibernate runs to
904 // completion before the thread is destroyed. 904 // completion before the thread is destroyed.
905 // This test passes by not crashing, which proves that the WeakPtr logic 905 // This test passes by not crashing, which proves that the WeakPtr logic
906 // is sound. 906 // is sound.
907 std::unique_ptr<WaitableEvent> fenceEvent = wrapUnique(new WaitableEvent()); 907 OwnPtr<WaitableEvent> fenceEvent = adoptPtr(new WaitableEvent());
908 testThread->scheduler()->postIdleTask(BLINK_FROM_HERE, new IdleFenceTask(fen ceEvent.get())); 908 testThread->scheduler()->postIdleTask(BLINK_FROM_HERE, new IdleFenceTask(fen ceEvent.get()));
909 fenceEvent->wait(); 909 fenceEvent->wait();
910 } 910 }
911 911
912 #if CANVAS2D_HIBERNATION_ENABLED 912 #if CANVAS2D_HIBERNATION_ENABLED
913 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToPendingTeardown) 913 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToPendingTeardown)
914 #else 914 #else
915 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToPendingTeardown) 915 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToPendingTeardown)
916 #endif 916 #endif
917 { 917 {
918 FakeGLES2Interface gl; 918 FakeGLES2Interface gl;
919 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 919 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
920 920
921 // The Canvas2DLayerBridge has to be created on the thread that will use it 921 // The Canvas2DLayerBridge has to be created on the thread that will use it
922 // to avoid WeakPtr thread check issues. 922 // to avoid WeakPtr thread check issues.
923 Canvas2DLayerBridgePtr bridge; 923 Canvas2DLayerBridgePtr bridge;
924 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 924 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
925 925
926 // Register an alternate Logger for tracking hibernation events 926 // Register an alternate Logger for tracking hibernation events
927 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 927 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
928 MockLogger* mockLoggerPtr = mockLogger.get(); 928 MockLogger* mockLoggerPtr = mockLogger.get();
929 bridge->setLoggerForTesting(std::move(mockLogger)); 929 bridge->setLoggerForTesting(std::move(mockLogger));
930 930
931 // Test entering hibernation 931 // Test entering hibernation
932 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = wrapUnique(new Wait ableEvent()); 932 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent() );
933 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 933 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
934 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationAbortedDueToPendingDestruction)) 934 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationAbortedDueToPendingDestruction))
935 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai tableEvent::signal)); 935 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai tableEvent::signal));
936 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 936 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
937 testThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&Ca nvas2DLayerBridge::beginDestruction, AllowCrossThreadAccess(bridge.get()))); 937 testThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&Ca nvas2DLayerBridge::beginDestruction, AllowCrossThreadAccess(bridge.get())));
938 hibernationAbortedEvent->wait(); 938 hibernationAbortedEvent->wait();
939 939
940 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 940 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
941 941
942 // Tear down bridge on thread 942 // Tear down bridge on thread
943 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 943 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
944 } 944 }
945 945
946 #if CANVAS2D_HIBERNATION_ENABLED 946 #if CANVAS2D_HIBERNATION_ENABLED
947 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) 947 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange)
948 #else 948 #else
949 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToVisibilityChange ) 949 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToVisibilityChange )
950 #endif 950 #endif
951 { 951 {
952 FakeGLES2Interface gl; 952 FakeGLES2Interface gl;
953 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 953 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
954 954
955 // The Canvas2DLayerBridge has to be created on the thread that will use it 955 // The Canvas2DLayerBridge has to be created on the thread that will use it
956 // to avoid WeakPtr thread check issues. 956 // to avoid WeakPtr thread check issues.
957 Canvas2DLayerBridgePtr bridge; 957 Canvas2DLayerBridgePtr bridge;
958 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 958 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
959 959
960 // Register an alternate Logger for tracking hibernation events 960 // Register an alternate Logger for tracking hibernation events
961 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 961 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
962 MockLogger* mockLoggerPtr = mockLogger.get(); 962 MockLogger* mockLoggerPtr = mockLogger.get();
963 bridge->setLoggerForTesting(std::move(mockLogger)); 963 bridge->setLoggerForTesting(std::move(mockLogger));
964 964
965 // Test entering hibernation 965 // Test entering hibernation
966 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = wrapUnique(new Wait ableEvent()); 966 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent() );
967 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 967 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
968 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationAbortedDueToVisibilityChange)) 968 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationAbortedDueToVisibilityChange))
969 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai tableEvent::signal)); 969 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai tableEvent::signal));
970 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 970 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
971 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); 971 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
972 hibernationAbortedEvent->wait(); 972 hibernationAbortedEvent->wait();
973 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 973 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
974 EXPECT_TRUE(bridge->isAccelerated()); 974 EXPECT_TRUE(bridge->isAccelerated());
975 EXPECT_FALSE(bridge->isHibernating()); 975 EXPECT_FALSE(bridge->isHibernating());
976 EXPECT_TRUE(bridge->checkSurfaceValid()); 976 EXPECT_TRUE(bridge->checkSurfaceValid());
977 977
978 // Tear down the bridge on the thread so that 'bridge' can go out of scope 978 // Tear down the bridge on the thread so that 'bridge' can go out of scope
979 // without crashing due to thread checks 979 // without crashing due to thread checks
980 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 980 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
981 } 981 }
982 982
983 #if CANVAS2D_HIBERNATION_ENABLED 983 #if CANVAS2D_HIBERNATION_ENABLED
984 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToLostContext) 984 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToLostContext)
985 #else 985 #else
986 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToLostContext) 986 TEST_F(Canvas2DLayerBridgeTest, DISABLED_HibernationAbortedDueToLostContext)
987 #endif 987 #endif
988 { 988 {
989 FakeGLES2Interface gl; 989 FakeGLES2Interface gl;
990 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 990 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
991 991
992 // The Canvas2DLayerBridge has to be created on the thread that will use it 992 // The Canvas2DLayerBridge has to be created on the thread that will use it
993 // to avoid WeakPtr thread check issues. 993 // to avoid WeakPtr thread check issues.
994 Canvas2DLayerBridgePtr bridge; 994 Canvas2DLayerBridgePtr bridge;
995 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 995 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
996 996
997 // Register an alternate Logger for tracking hibernation events 997 // Register an alternate Logger for tracking hibernation events
998 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 998 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
999 MockLogger* mockLoggerPtr = mockLogger.get(); 999 MockLogger* mockLoggerPtr = mockLogger.get();
1000 bridge->setLoggerForTesting(std::move(mockLogger)); 1000 bridge->setLoggerForTesting(std::move(mockLogger));
1001 1001
1002 gl.setIsContextLost(true); 1002 gl.setIsContextLost(true);
1003 // Test entering hibernation 1003 // Test entering hibernation
1004 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = wrapUnique(new Wait ableEvent()); 1004 OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent() );
1005 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 1005 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
1006 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationAbortedDueGpuContextLoss)) 1006 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationAbortedDueGpuContextLoss))
1007 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai tableEvent::signal)); 1007 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai tableEvent::signal));
1008 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 1008 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
1009 hibernationAbortedEvent->wait(); 1009 hibernationAbortedEvent->wait();
1010 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 1010 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
1011 EXPECT_FALSE(bridge->isHibernating()); 1011 EXPECT_FALSE(bridge->isHibernating());
1012 1012
1013 // Tear down the bridge on the thread so that 'bridge' can go out of scope 1013 // Tear down the bridge on the thread so that 'bridge' can go out of scope
1014 // without crashing due to thread checks 1014 // without crashing due to thread checks
1015 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 1015 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
1016 } 1016 }
1017 1017
1018 #if CANVAS2D_HIBERNATION_ENABLED 1018 #if CANVAS2D_HIBERNATION_ENABLED
1019 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileHibernating) 1019 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileHibernating)
1020 #else 1020 #else
1021 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileHibernating) 1021 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileHibernating)
1022 #endif 1022 #endif
1023 { 1023 {
1024 FakeGLES2Interface gl; 1024 FakeGLES2Interface gl;
1025 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 1025 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
1026 1026
1027 // The Canvas2DLayerBridge has to be created on the thread that will use it 1027 // The Canvas2DLayerBridge has to be created on the thread that will use it
1028 // to avoid WeakPtr thread check issues. 1028 // to avoid WeakPtr thread check issues.
1029 Canvas2DLayerBridgePtr bridge; 1029 Canvas2DLayerBridgePtr bridge;
1030 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 1030 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
1031 1031
1032 // Register an alternate Logger for tracking hibernation events 1032 // Register an alternate Logger for tracking hibernation events
1033 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 1033 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
1034 MockLogger* mockLoggerPtr = mockLogger.get(); 1034 MockLogger* mockLoggerPtr = mockLogger.get();
1035 bridge->setLoggerForTesting(std::move(mockLogger)); 1035 bridge->setLoggerForTesting(std::move(mockLogger));
1036 1036
1037 // Test entering hibernation 1037 // Test entering hibernation
1038 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 1038 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
1039 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 1039 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
1040 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 1040 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
1041 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 1041 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
1042 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 1042 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
1043 hibernationStartedEvent->wait(); 1043 hibernationStartedEvent->wait();
1044 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 1044 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
1045 1045
1046 // Test prepareMailbox while hibernating 1046 // Test prepareMailbox while hibernating
1047 WebExternalTextureMailbox mailbox; 1047 WebExternalTextureMailbox mailbox;
1048 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0)); 1048 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0));
1049 EXPECT_TRUE(bridge->checkSurfaceValid()); 1049 EXPECT_TRUE(bridge->checkSurfaceValid());
1050 1050
1051 // Tear down the bridge on the thread so that 'bridge' can go out of scope 1051 // Tear down the bridge on the thread so that 'bridge' can go out of scope
1052 // without crashing due to thread checks 1052 // without crashing due to thread checks
1053 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationEndedWithTeardown)); 1053 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationEndedWithTeardown));
1054 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 1054 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
1055 } 1055 }
1056 1056
1057 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU 1057 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU
1058 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileBackgroundRendering) 1058 TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWhileBackgroundRendering)
1059 #else 1059 #else
1060 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileBackgroundRendering) 1060 TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileBackgroundRendering)
1061 #endif 1061 #endif
1062 { 1062 {
1063 FakeGLES2Interface gl; 1063 FakeGLES2Interface gl;
1064 std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->crea teThread("TestThread")); 1064 OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("T estThread"));
1065 1065
1066 // The Canvas2DLayerBridge has to be created on the thread that will use it 1066 // The Canvas2DLayerBridge has to be created on the thread that will use it
1067 // to avoid WeakPtr thread check issues. 1067 // to avoid WeakPtr thread check issues.
1068 Canvas2DLayerBridgePtr bridge; 1068 Canvas2DLayerBridgePtr bridge;
1069 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this); 1069 postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
1070 1070
1071 // Register an alternate Logger for tracking hibernation events 1071 // Register an alternate Logger for tracking hibernation events
1072 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); 1072 OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
1073 MockLogger* mockLoggerPtr = mockLogger.get(); 1073 MockLogger* mockLoggerPtr = mockLogger.get();
1074 bridge->setLoggerForTesting(std::move(mockLogger)); 1074 bridge->setLoggerForTesting(std::move(mockLogger));
1075 1075
1076 // Test entering hibernation 1076 // Test entering hibernation
1077 std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new Wait ableEvent()); 1077 OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent() );
1078 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled)); 1078 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationScheduled));
1079 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) 1079 EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
1080 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal)); 1080 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent: :signal));
1081 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); 1081 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true);
1082 hibernationStartedEvent->wait(); 1082 hibernationStartedEvent->wait();
1083 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 1083 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
1084 1084
1085 // Rendering in the background -> temp switch to SW 1085 // Rendering in the background -> temp switch to SW
1086 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationEndedWithSwitchToBackgroundRendering)); 1086 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe rnationEndedWithSwitchToBackgroundRendering));
1087 postAndWaitRenderingTask(BLINK_FROM_HERE, testThread.get(), bridge.get()); 1087 postAndWaitRenderingTask(BLINK_FROM_HERE, testThread.get(), bridge.get());
1088 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); 1088 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
1089 EXPECT_FALSE(bridge->isAccelerated()); 1089 EXPECT_FALSE(bridge->isAccelerated());
1090 EXPECT_FALSE(bridge->isHibernating()); 1090 EXPECT_FALSE(bridge->isHibernating());
1091 EXPECT_TRUE(bridge->checkSurfaceValid()); 1091 EXPECT_TRUE(bridge->checkSurfaceValid());
1092 1092
1093 // Test prepareMailbox while background rendering 1093 // Test prepareMailbox while background rendering
1094 WebExternalTextureMailbox mailbox; 1094 WebExternalTextureMailbox mailbox;
1095 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0)); 1095 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0));
1096 EXPECT_TRUE(bridge->checkSurfaceValid()); 1096 EXPECT_TRUE(bridge->checkSurfaceValid());
1097 1097
1098 // Tear down the bridge on the thread so that 'bridge' can go out of scope 1098 // Tear down the bridge on the thread so that 'bridge' can go out of scope
1099 // without crashing due to thread checks 1099 // without crashing due to thread checks
1100 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 1100 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
1101 } 1101 }
1102 1102
1103 1103
1104 } // namespace blink 1104 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698