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

Side by Side Diff: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp

Issue 2050123002: Remove OwnPtr from Blink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments from Kent; merge. 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/canvas2d/CanvasRenderingContext2D.h" 5 #include "modules/canvas2d/CanvasRenderingContext2D.h"
6 6
7 #include "core/fetch/MemoryCache.h" 7 #include "core/fetch/MemoryCache.h"
8 #include "core/frame/FrameView.h" 8 #include "core/frame/FrameView.h"
9 #include "core/frame/ImageBitmap.h" 9 #include "core/frame/ImageBitmap.h"
10 #include "core/html/HTMLCanvasElement.h" 10 #include "core/html/HTMLCanvasElement.h"
11 #include "core/html/HTMLDocument.h" 11 #include "core/html/HTMLDocument.h"
12 #include "core/html/ImageData.h" 12 #include "core/html/ImageData.h"
13 #include "core/imagebitmap/ImageBitmapOptions.h" 13 #include "core/imagebitmap/ImageBitmapOptions.h"
14 #include "core/loader/EmptyClients.h" 14 #include "core/loader/EmptyClients.h"
15 #include "core/testing/DummyPageHolder.h" 15 #include "core/testing/DummyPageHolder.h"
16 #include "modules/canvas2d/CanvasGradient.h" 16 #include "modules/canvas2d/CanvasGradient.h"
17 #include "modules/canvas2d/CanvasPattern.h" 17 #include "modules/canvas2d/CanvasPattern.h"
18 #include "modules/webgl/WebGLRenderingContext.h" 18 #include "modules/webgl/WebGLRenderingContext.h"
19 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h" 19 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
20 #include "platform/graphics/RecordingImageBufferSurface.h" 20 #include "platform/graphics/RecordingImageBufferSurface.h"
21 #include "platform/graphics/StaticBitmapImage.h" 21 #include "platform/graphics/StaticBitmapImage.h"
22 #include "platform/graphics/UnacceleratedImageBufferSurface.h" 22 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
23 #include "testing/gmock/include/gmock/gmock.h" 23 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
25 #include "third_party/skia/include/core/SkSurface.h" 25 #include "third_party/skia/include/core/SkSurface.h"
26 #include "wtf/PtrUtil.h"
27 #include <memory>
26 28
27 using ::testing::Mock; 29 using ::testing::Mock;
28 30
29 namespace blink { 31 namespace blink {
30 32
31 enum BitmapOpacity { 33 enum BitmapOpacity {
32 OpaqueBitmap, 34 OpaqueBitmap,
33 TransparentBitmap 35 TransparentBitmap
34 }; 36 };
35 37
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 HTMLCanvasElement& canvasElement() const { return *m_canvasElement; } 82 HTMLCanvasElement& canvasElement() const { return *m_canvasElement; }
81 CanvasRenderingContext2D* context2d() const { return static_cast<CanvasRende ringContext2D*>(canvasElement().renderingContext()); } 83 CanvasRenderingContext2D* context2d() const { return static_cast<CanvasRende ringContext2D*>(canvasElement().renderingContext()); }
82 intptr_t getGlobalGPUMemoryUsage() const { return ImageBuffer::getGlobalGPUM emoryUsage(); } 84 intptr_t getGlobalGPUMemoryUsage() const { return ImageBuffer::getGlobalGPUM emoryUsage(); }
83 intptr_t getCurrentGPUMemoryUsage() const { return canvasElement().buffer()- >getGPUMemoryUsage(); } 85 intptr_t getCurrentGPUMemoryUsage() const { return canvasElement().buffer()- >getGPUMemoryUsage(); }
84 86
85 void createContext(OpacityMode); 87 void createContext(OpacityMode);
86 void TearDown(); 88 void TearDown();
87 void unrefCanvas(); 89 void unrefCanvas();
88 90
89 private: 91 private:
90 OwnPtr<DummyPageHolder> m_dummyPageHolder; 92 std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
91 Persistent<HTMLDocument> m_document; 93 Persistent<HTMLDocument> m_document;
92 Persistent<HTMLCanvasElement> m_canvasElement; 94 Persistent<HTMLCanvasElement> m_canvasElement;
93 Persistent<MemoryCache> m_globalMemoryCache; 95 Persistent<MemoryCache> m_globalMemoryCache;
94 96
95 class WrapGradients final : public GarbageCollectedFinalized<WrapGradients> { 97 class WrapGradients final : public GarbageCollectedFinalized<WrapGradients> {
96 public: 98 public:
97 static WrapGradients* create() 99 static WrapGradients* create()
98 { 100 {
99 return new WrapGradients; 101 return new WrapGradients;
100 } 102 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 MockImageBufferSurfaceForOverwriteTesting(const IntSize& size, OpacityMode m ode) : UnacceleratedImageBufferSurface(size, mode) { } 203 MockImageBufferSurfaceForOverwriteTesting(const IntSize& size, OpacityMode m ode) : UnacceleratedImageBufferSurface(size, mode) { }
202 ~MockImageBufferSurfaceForOverwriteTesting() override { } 204 ~MockImageBufferSurfaceForOverwriteTesting() override { }
203 bool isRecording() const override { return true; } // otherwise overwrites a re not tracked 205 bool isRecording() const override { return true; } // otherwise overwrites a re not tracked
204 206
205 MOCK_METHOD0(willOverwriteCanvas, void()); 207 MOCK_METHOD0(willOverwriteCanvas, void());
206 }; 208 };
207 209
208 //============================================================================ 210 //============================================================================
209 211
210 #define TEST_OVERDRAW_SETUP(EXPECTED_OVERDRAWS) \ 212 #define TEST_OVERDRAW_SETUP(EXPECTED_OVERDRAWS) \
211 OwnPtr<MockImageBufferSurfaceForOverwriteTesting> mockSurface = adoptPtr (new MockImageBufferSurfaceForOverwriteTesting(IntSize(10, 10), NonOpaque)); \ 213 std::unique_ptr<MockImageBufferSurfaceForOverwriteTesting> mockSurface = wrapUnique(new MockImageBufferSurfaceForOverwriteTesting(IntSize(10, 10), NonOp aque)); \
212 MockImageBufferSurfaceForOverwriteTesting* surfacePtr = mockSurface.get( ); \ 214 MockImageBufferSurfaceForOverwriteTesting* surfacePtr = mockSurface.get( ); \
213 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(mockSu rface)); \ 215 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(mockSu rface)); \
214 EXPECT_CALL(*surfacePtr, willOverwriteCanvas()).Times(EXPECTED_OVERDRAWS ); \ 216 EXPECT_CALL(*surfacePtr, willOverwriteCanvas()).Times(EXPECTED_OVERDRAWS ); \
215 context2d()->save(); 217 context2d()->save();
216 218
217 #define TEST_OVERDRAW_FINALIZE \ 219 #define TEST_OVERDRAW_FINALIZE \
218 context2d()->restore(); \ 220 context2d()->restore(); \
219 Mock::VerifyAndClearExpectations(surfacePtr); 221 Mock::VerifyAndClearExpectations(surfacePtr);
220 222
221 #define TEST_OVERDRAW_1(EXPECTED_OVERDRAWS, CALL1) \ 223 #define TEST_OVERDRAW_1(EXPECTED_OVERDRAWS, CALL1) \
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 } while (0) 255 } while (0)
254 256
255 //============================================================================ 257 //============================================================================
256 258
257 class MockSurfaceFactory : public RecordingImageBufferFallbackSurfaceFactory { 259 class MockSurfaceFactory : public RecordingImageBufferFallbackSurfaceFactory {
258 public: 260 public:
259 enum FallbackExpectation { 261 enum FallbackExpectation {
260 ExpectFallback, 262 ExpectFallback,
261 ExpectNoFallback 263 ExpectNoFallback
262 }; 264 };
263 static PassOwnPtr<MockSurfaceFactory> create(FallbackExpectation expectation ) { return adoptPtr(new MockSurfaceFactory(expectation)); } 265 static std::unique_ptr<MockSurfaceFactory> create(FallbackExpectation expect ation) { return wrapUnique(new MockSurfaceFactory(expectation)); }
264 266
265 PassOwnPtr<ImageBufferSurface> createSurface(const IntSize& size, OpacityMod e mode) override 267 std::unique_ptr<ImageBufferSurface> createSurface(const IntSize& size, Opaci tyMode mode) override
266 { 268 {
267 EXPECT_EQ(ExpectFallback, m_expectation); 269 EXPECT_EQ(ExpectFallback, m_expectation);
268 m_didFallback = true; 270 m_didFallback = true;
269 return adoptPtr(new UnacceleratedImageBufferSurface(size, mode)); 271 return wrapUnique(new UnacceleratedImageBufferSurface(size, mode));
270 } 272 }
271 273
272 ~MockSurfaceFactory() override 274 ~MockSurfaceFactory() override
273 { 275 {
274 if (m_expectation == ExpectFallback) { 276 if (m_expectation == ExpectFallback) {
275 EXPECT_TRUE(m_didFallback); 277 EXPECT_TRUE(m_didFallback);
276 } 278 }
277 } 279 }
278 280
279 private: 281 private:
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 // Test composite operators with an opaque rect that does not cover the enti re canvas 401 // Test composite operators with an opaque rect that does not cover the enti re canvas
400 TEST_OVERDRAW_2(0, setGlobalCompositeOperation(String("clear")), fillRect(0, 0, 5, 5)); 402 TEST_OVERDRAW_2(0, setGlobalCompositeOperation(String("clear")), fillRect(0, 0, 5, 5));
401 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("copy")), fillRect(0, 0, 5, 5)); 403 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("copy")), fillRect(0, 0, 5, 5));
402 TEST_OVERDRAW_2(0, setGlobalCompositeOperation(String("source-over")), fillR ect(0, 0, 5, 5)); 404 TEST_OVERDRAW_2(0, setGlobalCompositeOperation(String("source-over")), fillR ect(0, 0, 5, 5));
403 TEST_OVERDRAW_2(0, setGlobalCompositeOperation(String("source-in")), fillRec t(0, 0, 5, 5)); 405 TEST_OVERDRAW_2(0, setGlobalCompositeOperation(String("source-in")), fillRec t(0, 0, 5, 5));
404 } 406 }
405 407
406 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionByDefault) 408 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionByDefault)
407 { 409 {
408 createContext(NonOpaque); 410 createContext(NonOpaque);
409 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 411 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
410 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 412 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
411 413
412 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 414 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
413 } 415 }
414 416
415 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderOverdrawLimit) 417 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderOverdrawLimit)
416 { 418 {
417 createContext(NonOpaque); 419 createContext(NonOpaque);
418 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 420 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
419 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 421 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
420 422
421 context2d()->setGlobalAlpha(0.5f); // To prevent overdraw optimization 423 context2d()->setGlobalAlpha(0.5f); // To prevent overdraw optimization
422 for (int i = 0; i < ExpensiveCanvasHeuristicParameters::ExpensiveOverdrawThr eshold - 1; i++) { 424 for (int i = 0; i < ExpensiveCanvasHeuristicParameters::ExpensiveOverdrawThr eshold - 1; i++) {
423 context2d()->fillRect(0, 0, 10, 10); 425 context2d()->fillRect(0, 0, 10, 10);
424 } 426 }
425 427
426 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 428 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
427 } 429 }
428 430
429 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverOverdrawLimit) 431 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverOverdrawLimit)
430 { 432 {
431 createContext(NonOpaque); 433 createContext(NonOpaque);
432 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 434 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
433 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 435 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
434 436
435 context2d()->setGlobalAlpha(0.5f); // To prevent overdraw optimization 437 context2d()->setGlobalAlpha(0.5f); // To prevent overdraw optimization
436 for (int i = 0; i < ExpensiveCanvasHeuristicParameters::ExpensiveOverdrawThr eshold; i++) { 438 for (int i = 0; i < ExpensiveCanvasHeuristicParameters::ExpensiveOverdrawThr eshold; i++) {
437 context2d()->fillRect(0, 0, 10, 10); 439 context2d()->fillRect(0, 0, 10, 10);
438 } 440 }
439 441
440 EXPECT_TRUE(canvasElement().shouldBeDirectComposited()); 442 EXPECT_TRUE(canvasElement().shouldBeDirectComposited());
441 } 443 }
442 444
443 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderImageSizeRatioLimit) 445 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderImageSizeRatioLimit)
444 { 446 {
445 createContext(NonOpaque); 447 createContext(NonOpaque);
446 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 448 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
447 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 449 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
448 450
449 NonThrowableExceptionState exceptionState; 451 NonThrowableExceptionState exceptionState;
450 Element* sourceCanvasElement = document().createElement("canvas", exceptionS tate); 452 Element* sourceCanvasElement = document().createElement("canvas", exceptionS tate);
451 EXPECT_FALSE(exceptionState.hadException()); 453 EXPECT_FALSE(exceptionState.hadException());
452 HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanv asElement); 454 HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanv asElement);
453 IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveIma geSizeRatio); 455 IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveIma geSizeRatio);
454 OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new Unaccel eratedImageBufferSurface(sourceSize, NonOpaque)); 456 std::unique_ptr<UnacceleratedImageBufferSurface> sourceSurface = wrapUnique( new UnacceleratedImageBufferSurface(sourceSize, NonOpaque));
455 sourceCanvas->createImageBufferUsingSurfaceForTesting(std::move(sourceSurfac e)); 457 sourceCanvas->createImageBufferUsingSurfaceForTesting(std::move(sourceSurfac e));
456 458
457 const ImageBitmapOptions defaultOptions; 459 const ImageBitmapOptions defaultOptions;
458 // Go through an ImageBitmap to avoid triggering a display list fallback 460 // Go through an ImageBitmap to avoid triggering a display list fallback
459 ImageBitmap* sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(I ntPoint(0, 0), sourceSize), defaultOptions); 461 ImageBitmap* sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(I ntPoint(0, 0), sourceSize), defaultOptions);
460 462
461 context2d()->drawImage(canvasElement().getExecutionContext(), sourceImageBit map, 0, 0, 1, 1, 0, 0, 1, 1, exceptionState); 463 context2d()->drawImage(canvasElement().getExecutionContext(), sourceImageBit map, 0, 0, 1, 1, 0, 0, 1, 1, exceptionState);
462 EXPECT_FALSE(exceptionState.hadException()); 464 EXPECT_FALSE(exceptionState.hadException());
463 465
464 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 466 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
465 } 467 }
466 468
467 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverImageSizeRatioLimit) 469 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverImageSizeRatioLimit)
468 { 470 {
469 createContext(NonOpaque); 471 createContext(NonOpaque);
470 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 472 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
471 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 473 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
472 474
473 NonThrowableExceptionState exceptionState; 475 NonThrowableExceptionState exceptionState;
474 Element* sourceCanvasElement = document().createElement("canvas", exceptionS tate); 476 Element* sourceCanvasElement = document().createElement("canvas", exceptionS tate);
475 EXPECT_FALSE(exceptionState.hadException()); 477 EXPECT_FALSE(exceptionState.hadException());
476 HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanv asElement); 478 HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanv asElement);
477 IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveIma geSizeRatio + 1); 479 IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveIma geSizeRatio + 1);
478 OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new Unaccel eratedImageBufferSurface(sourceSize, NonOpaque)); 480 std::unique_ptr<UnacceleratedImageBufferSurface> sourceSurface = wrapUnique( new UnacceleratedImageBufferSurface(sourceSize, NonOpaque));
479 sourceCanvas->createImageBufferUsingSurfaceForTesting(std::move(sourceSurfac e)); 481 sourceCanvas->createImageBufferUsingSurfaceForTesting(std::move(sourceSurfac e));
480 482
481 const ImageBitmapOptions defaultOptions; 483 const ImageBitmapOptions defaultOptions;
482 // Go through an ImageBitmap to avoid triggering a display list fallback 484 // Go through an ImageBitmap to avoid triggering a display list fallback
483 ImageBitmap* sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(I ntPoint(0, 0), sourceSize), defaultOptions); 485 ImageBitmap* sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(I ntPoint(0, 0), sourceSize), defaultOptions);
484 486
485 context2d()->drawImage(canvasElement().getExecutionContext(), sourceImageBit map, 0, 0, 1, 1, 0, 0, 1, 1, exceptionState); 487 context2d()->drawImage(canvasElement().getExecutionContext(), sourceImageBit map, 0, 0, 1, 1, 0, 0, 1, 1, exceptionState);
486 EXPECT_FALSE(exceptionState.hadException()); 488 EXPECT_FALSE(exceptionState.hadException());
487 489
488 EXPECT_TRUE(canvasElement().shouldBeDirectComposited()); 490 EXPECT_TRUE(canvasElement().shouldBeDirectComposited());
489 } 491 }
490 492
491 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderExpensivePathPointCoun t) 493 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderExpensivePathPointCoun t)
492 { 494 {
493 createContext(NonOpaque); 495 createContext(NonOpaque);
494 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 496 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
495 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 497 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
496 498
497 context2d()->beginPath(); 499 context2d()->beginPath();
498 context2d()->moveTo(7, 5); 500 context2d()->moveTo(7, 5);
499 for (int i = 1; i < ExpensiveCanvasHeuristicParameters::ExpensivePathPointCo unt-1; i++) { 501 for (int i = 1; i < ExpensiveCanvasHeuristicParameters::ExpensivePathPointCo unt-1; i++) {
500 float angleRad = twoPiFloat * i / (ExpensiveCanvasHeuristicParameters::E xpensivePathPointCount - 1); 502 float angleRad = twoPiFloat * i / (ExpensiveCanvasHeuristicParameters::E xpensivePathPointCount - 1);
501 context2d()->lineTo(5 + 2 * cos(angleRad), 5 + 2 * sin(angleRad)); 503 context2d()->lineTo(5 + 2 * cos(angleRad), 5 + 2 * sin(angleRad));
502 } 504 }
503 context2d()->fill(); 505 context2d()->fill();
504 506
505 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 507 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
506 } 508 }
507 509
508 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverExpensivePathPointCount) 510 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverExpensivePathPointCount)
509 { 511 {
510 createContext(NonOpaque); 512 createContext(NonOpaque);
511 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 513 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
512 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 514 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
513 515
514 context2d()->beginPath(); 516 context2d()->beginPath();
515 context2d()->moveTo(7, 5); 517 context2d()->moveTo(7, 5);
516 for (int i = 1; i < ExpensiveCanvasHeuristicParameters::ExpensivePathPointCo unt + 1; i++) { 518 for (int i = 1; i < ExpensiveCanvasHeuristicParameters::ExpensivePathPointCo unt + 1; i++) {
517 float angleRad = twoPiFloat * i / (ExpensiveCanvasHeuristicParameters::E xpensivePathPointCount + 1); 519 float angleRad = twoPiFloat * i / (ExpensiveCanvasHeuristicParameters::E xpensivePathPointCount + 1);
518 context2d()->lineTo(5 + 2 * cos(angleRad), 5 + 2 * sin(angleRad)); 520 context2d()->lineTo(5 + 2 * cos(angleRad), 5 + 2 * sin(angleRad));
519 } 521 }
520 context2d()->fill(); 522 context2d()->fill();
521 523
522 EXPECT_TRUE(canvasElement().shouldBeDirectComposited()); 524 EXPECT_TRUE(canvasElement().shouldBeDirectComposited());
523 } 525 }
524 526
525 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWhenPathIsConcave) 527 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWhenPathIsConcave)
526 { 528 {
527 createContext(NonOpaque); 529 createContext(NonOpaque);
528 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 530 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
529 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 531 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
530 532
531 context2d()->beginPath(); 533 context2d()->beginPath();
532 context2d()->moveTo(1, 1); 534 context2d()->moveTo(1, 1);
533 context2d()->lineTo(5, 5); 535 context2d()->lineTo(5, 5);
534 context2d()->lineTo(9, 1); 536 context2d()->lineTo(9, 1);
535 context2d()->lineTo(5, 9); 537 context2d()->lineTo(5, 9);
536 context2d()->fill(); 538 context2d()->fill();
537 539
538 if (ExpensiveCanvasHeuristicParameters::ConcavePathsAreExpensive) { 540 if (ExpensiveCanvasHeuristicParameters::ConcavePathsAreExpensive) {
539 EXPECT_TRUE(canvasElement().shouldBeDirectComposited()); 541 EXPECT_TRUE(canvasElement().shouldBeDirectComposited());
540 } else { 542 } else {
541 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 543 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
542 } 544 }
543 } 545 }
544 546
545 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionWithRectangleClip) 547 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionWithRectangleClip)
546 { 548 {
547 createContext(NonOpaque); 549 createContext(NonOpaque);
548 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 550 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
549 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 551 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
550 552
551 context2d()->beginPath(); 553 context2d()->beginPath();
552 context2d()->rect(1, 1, 2, 2); 554 context2d()->rect(1, 1, 2, 2);
553 context2d()->clip(); 555 context2d()->clip();
554 context2d()->fillRect(0, 0, 4, 4); 556 context2d()->fillRect(0, 0, 4, 4);
555 557
556 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 558 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
557 } 559 }
558 560
559 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWithComplexClip) 561 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWithComplexClip)
560 { 562 {
561 createContext(NonOpaque); 563 createContext(NonOpaque);
562 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 564 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
563 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 565 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
564 566
565 context2d()->beginPath(); 567 context2d()->beginPath();
566 context2d()->moveTo(1, 1); 568 context2d()->moveTo(1, 1);
567 context2d()->lineTo(5, 5); 569 context2d()->lineTo(5, 5);
568 context2d()->lineTo(9, 1); 570 context2d()->lineTo(9, 1);
569 context2d()->lineTo(5, 9); 571 context2d()->lineTo(5, 9);
570 context2d()->clip(); 572 context2d()->clip();
571 context2d()->fillRect(0, 0, 4, 4); 573 context2d()->fillRect(0, 0, 4, 4);
572 574
573 if (ExpensiveCanvasHeuristicParameters::ComplexClipsAreExpensive) { 575 if (ExpensiveCanvasHeuristicParameters::ComplexClipsAreExpensive) {
574 EXPECT_TRUE(canvasElement().shouldBeDirectComposited()); 576 EXPECT_TRUE(canvasElement().shouldBeDirectComposited());
575 } else { 577 } else {
576 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 578 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
577 } 579 }
578 } 580 }
579 581
580 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWithBlurredShadow) 582 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWithBlurredShadow)
581 { 583 {
582 createContext(NonOpaque); 584 createContext(NonOpaque);
583 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 585 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
584 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 586 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
585 587
586 context2d()->setShadowColor(String("red")); 588 context2d()->setShadowColor(String("red"));
587 context2d()->setShadowBlur(1.0f); 589 context2d()->setShadowBlur(1.0f);
588 context2d()->fillRect(1, 1, 1, 1); 590 context2d()->fillRect(1, 1, 1, 1);
589 591
590 if (ExpensiveCanvasHeuristicParameters::BlurredShadowsAreExpensive) { 592 if (ExpensiveCanvasHeuristicParameters::BlurredShadowsAreExpensive) {
591 EXPECT_TRUE(canvasElement().shouldBeDirectComposited()); 593 EXPECT_TRUE(canvasElement().shouldBeDirectComposited());
592 } else { 594 } else {
593 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 595 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
594 } 596 }
595 } 597 }
596 598
597 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionWithSharpShadow) 599 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionWithSharpShadow)
598 { 600 {
599 createContext(NonOpaque); 601 createContext(NonOpaque);
600 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 602 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
601 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 603 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
602 604
603 context2d()->setShadowColor(String("red")); 605 context2d()->setShadowColor(String("red"));
604 context2d()->setShadowOffsetX(1.0f); 606 context2d()->setShadowOffsetX(1.0f);
605 context2d()->fillRect(1, 1, 1, 1); 607 context2d()->fillRect(1, 1, 1, 1);
606 608
607 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); 609 EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
608 } 610 }
609 611
610 TEST_F(CanvasRenderingContext2DTest, NoFallbackWithSmallState) 612 TEST_F(CanvasRenderingContext2DTest, NoFallbackWithSmallState)
611 { 613 {
612 createContext(NonOpaque); 614 createContext(NonOpaque);
613 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 615 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
614 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 616 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
615 617
616 context2d()->fillRect(0, 0, 1, 1); // To have a non-empty dirty rect 618 context2d()->fillRect(0, 0, 1, 1); // To have a non-empty dirty rect
617 for (int i = 0; i < ExpensiveCanvasHeuristicParameters::ExpensiveRecordingSt ackDepth - 1; ++i) { 619 for (int i = 0; i < ExpensiveCanvasHeuristicParameters::ExpensiveRecordingSt ackDepth - 1; ++i) {
618 context2d()->save(); 620 context2d()->save();
619 context2d()->translate(1.0f, 0.0f); 621 context2d()->translate(1.0f, 0.0f);
620 } 622 }
621 canvasElement().doDeferredPaintInvalidation(); // To close the current frame 623 canvasElement().doDeferredPaintInvalidation(); // To close the current frame
622 } 624 }
623 625
624 TEST_F(CanvasRenderingContext2DTest, FallbackWithLargeState) 626 TEST_F(CanvasRenderingContext2DTest, FallbackWithLargeState)
625 { 627 {
626 createContext(NonOpaque); 628 createContext(NonOpaque);
627 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tFallback), NonOpaque)); 629 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectFallback), NonOpaque));
628 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 630 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
629 631
630 context2d()->fillRect(0, 0, 1, 1); // To have a non-empty dirty rect 632 context2d()->fillRect(0, 0, 1, 1); // To have a non-empty dirty rect
631 for (int i = 0; i < ExpensiveCanvasHeuristicParameters::ExpensiveRecordingSt ackDepth; ++i) { 633 for (int i = 0; i < ExpensiveCanvasHeuristicParameters::ExpensiveRecordingSt ackDepth; ++i) {
632 context2d()->save(); 634 context2d()->save();
633 context2d()->translate(1.0f, 0.0f); 635 context2d()->translate(1.0f, 0.0f);
634 } 636 }
635 canvasElement().doDeferredPaintInvalidation(); // To close the current frame 637 canvasElement().doDeferredPaintInvalidation(); // To close the current frame
636 } 638 }
637 639
638 TEST_F(CanvasRenderingContext2DTest, OpaqueDisplayListFallsBackForText) 640 TEST_F(CanvasRenderingContext2DTest, OpaqueDisplayListFallsBackForText)
639 { 641 {
640 // Verify that drawing text to an opaque canvas, which is expected to 642 // Verify that drawing text to an opaque canvas, which is expected to
641 // render with subpixel text anti-aliasing, results in falling out 643 // render with subpixel text anti-aliasing, results in falling out
642 // of display list mode because the current diplay list implementation 644 // of display list mode because the current diplay list implementation
643 // does not support pixel geometry settings. 645 // does not support pixel geometry settings.
644 // See: crbug.com/583809 646 // See: crbug.com/583809
645 createContext(Opaque); 647 createContext(Opaque);
646 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tFallback), Opaque)); 648 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectFallback), Opaque));
647 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 649 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
648 650
649 context2d()->fillText("Text", 0, 5); 651 context2d()->fillText("Text", 0, 5);
650 } 652 }
651 653
652 TEST_F(CanvasRenderingContext2DTest, NonOpaqueDisplayListDoesNotFallBackForText) 654 TEST_F(CanvasRenderingContext2DTest, NonOpaqueDisplayListDoesNotFallBackForText)
653 { 655 {
654 createContext(NonOpaque); 656 createContext(NonOpaque);
655 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec tNoFallback), NonOpaque)); 657 std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new Record ingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFac tory::ExpectNoFallback), NonOpaque));
656 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface)); 658 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
657 659
658 context2d()->fillText("Text", 0, 5); 660 context2d()->fillText("Text", 0, 5);
659 } 661 }
660 662
661 TEST_F(CanvasRenderingContext2DTest, ImageResourceLifetime) 663 TEST_F(CanvasRenderingContext2DTest, ImageResourceLifetime)
662 { 664 {
663 NonThrowableExceptionState nonThrowableExceptionState; 665 NonThrowableExceptionState nonThrowableExceptionState;
664 Element* canvasElement = document().createElement("canvas", nonThrowableExce ptionState); 666 Element* canvasElement = document().createElement("canvas", nonThrowableExce ptionState);
665 EXPECT_FALSE(nonThrowableExceptionState.hadException()); 667 EXPECT_FALSE(nonThrowableExceptionState.hadException());
(...skipping 11 matching lines...) Expand all
677 TrackExceptionState exceptionState; 679 TrackExceptionState exceptionState;
678 CanvasImageSourceUnion imageSource; 680 CanvasImageSourceUnion imageSource;
679 imageSource.setImageBitmap(imageBitmapDerived); 681 imageSource.setImageBitmap(imageBitmapDerived);
680 context->drawImage(canvas->getExecutionContext(), imageSource, 0, 0, excepti onState); 682 context->drawImage(canvas->getExecutionContext(), imageSource, 0, 0, excepti onState);
681 } 683 }
682 684
683 TEST_F(CanvasRenderingContext2DTest, GPUMemoryUpdateForAcceleratedCanvas) 685 TEST_F(CanvasRenderingContext2DTest, GPUMemoryUpdateForAcceleratedCanvas)
684 { 686 {
685 createContext(NonOpaque); 687 createContext(NonOpaque);
686 688
687 OwnPtr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface = adoptPtr(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpa que)); 689 std::unique_ptr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateS urface = wrapUnique(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpaque));
688 FakeAcceleratedImageBufferSurfaceForTesting* fakeAccelerateSurfacePtr = fake AccelerateSurface.get(); 690 FakeAcceleratedImageBufferSurfaceForTesting* fakeAccelerateSurfacePtr = fake AccelerateSurface.get();
689 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(fakeAccele rateSurface)); 691 canvasElement().createImageBufferUsingSurfaceForTesting(std::move(fakeAccele rateSurface));
690 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per p ixel per buffer, 692 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per p ixel per buffer,
691 // and 2 is an estimate of num of gpu buffers required 693 // and 2 is an estimate of num of gpu buffers required
692 EXPECT_EQ(800, getCurrentGPUMemoryUsage()); 694 EXPECT_EQ(800, getCurrentGPUMemoryUsage());
693 EXPECT_EQ(800, getGlobalGPUMemoryUsage()); 695 EXPECT_EQ(800, getGlobalGPUMemoryUsage());
694 696
695 // Switching accelerated mode to non-accelerated mode 697 // Switching accelerated mode to non-accelerated mode
696 fakeAccelerateSurfacePtr->setIsAccelerated(false); 698 fakeAccelerateSurfacePtr->setIsAccelerated(false);
697 canvasElement().buffer()->updateGPUMemoryUsage(); 699 canvasElement().buffer()->updateGPUMemoryUsage();
698 EXPECT_EQ(0, getCurrentGPUMemoryUsage()); 700 EXPECT_EQ(0, getCurrentGPUMemoryUsage());
699 EXPECT_EQ(0, getGlobalGPUMemoryUsage()); 701 EXPECT_EQ(0, getGlobalGPUMemoryUsage());
700 702
701 // Switching non-accelerated mode to accelerated mode 703 // Switching non-accelerated mode to accelerated mode
702 fakeAccelerateSurfacePtr->setIsAccelerated(true); 704 fakeAccelerateSurfacePtr->setIsAccelerated(true);
703 canvasElement().buffer()->updateGPUMemoryUsage(); 705 canvasElement().buffer()->updateGPUMemoryUsage();
704 EXPECT_EQ(800, getCurrentGPUMemoryUsage()); 706 EXPECT_EQ(800, getCurrentGPUMemoryUsage());
705 EXPECT_EQ(800, getGlobalGPUMemoryUsage()); 707 EXPECT_EQ(800, getGlobalGPUMemoryUsage());
706 708
707 // Creating a different accelerated image buffer 709 // Creating a different accelerated image buffer
708 OwnPtr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface2 = adoptPtr(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 5), NonOpa que)); 710 std::unique_ptr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateS urface2 = wrapUnique(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 5), NonOpaque));
709 OwnPtr<ImageBuffer> imageBuffer2 = ImageBuffer::create(std::move(fakeAcceler ateSurface2)); 711 std::unique_ptr<ImageBuffer> imageBuffer2 = ImageBuffer::create(std::move(fa keAccelerateSurface2));
710 EXPECT_EQ(800, getCurrentGPUMemoryUsage()); 712 EXPECT_EQ(800, getCurrentGPUMemoryUsage());
711 EXPECT_EQ(1200, getGlobalGPUMemoryUsage()); 713 EXPECT_EQ(1200, getGlobalGPUMemoryUsage());
712 714
713 // Tear down the first image buffer that resides in current canvas element 715 // Tear down the first image buffer that resides in current canvas element
714 canvasElement().setSize(IntSize(20, 20)); 716 canvasElement().setSize(IntSize(20, 20));
715 Mock::VerifyAndClearExpectations(fakeAccelerateSurfacePtr); 717 Mock::VerifyAndClearExpectations(fakeAccelerateSurfacePtr);
716 EXPECT_EQ(400, getGlobalGPUMemoryUsage()); 718 EXPECT_EQ(400, getGlobalGPUMemoryUsage());
717 719
718 // Tear down the second image buffer 720 // Tear down the second image buffer
719 imageBuffer2.reset(); 721 imageBuffer2.reset();
(...skipping 16 matching lines...) Expand all
736 738
737 TEST_F(CanvasRenderingContext2DTest, ContextDisposedBeforeCanvas) 739 TEST_F(CanvasRenderingContext2DTest, ContextDisposedBeforeCanvas)
738 { 740 {
739 createContext(NonOpaque); 741 createContext(NonOpaque);
740 742
741 canvasElement().detachContext(); 743 canvasElement().detachContext();
742 // Passes by not crashing later during teardown 744 // Passes by not crashing later during teardown
743 } 745 }
744 746
745 } // namespace blink 747 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698