OLD | NEW |
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" |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 TEST_OVERDRAW_2(1, translate(1, 1), clearRect(-1, -1, 10, 10)); | 318 TEST_OVERDRAW_2(1, translate(1, 1), clearRect(-1, -1, 10, 10)); |
319 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("destination-in")), cl
earRect(0, 0, 10, 10)); // composite op ignored | 319 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("destination-in")), cl
earRect(0, 0, 10, 10)); // composite op ignored |
320 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), clearRect(0, 0, 10, 10)); | 320 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), clearRect(0, 0, 10, 10)); |
321 } | 321 } |
322 | 322 |
323 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithDrawImage) | 323 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithDrawImage) |
324 { | 324 { |
325 createContext(NonOpaque); | 325 createContext(NonOpaque); |
326 NonThrowableExceptionState exceptionState; | 326 NonThrowableExceptionState exceptionState; |
327 | 327 |
328 TEST_OVERDRAW_1(1, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 10, 10, ex
ceptionState)); | 328 TEST_OVERDRAW_1(1, drawImage(canvasElement().getExecutionContext(), &m_opaqu
eBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); |
329 EXPECT_FALSE(exceptionState.hadException()); | 329 EXPECT_FALSE(exceptionState.hadException()); |
330 TEST_OVERDRAW_1(1, drawImage(&m_opaqueBitmap, 0, 0, 1, 1, 0, 0, 10, 10, exce
ptionState)); | 330 TEST_OVERDRAW_1(1, drawImage(canvasElement().getExecutionContext(), &m_opaqu
eBitmap, 0, 0, 1, 1, 0, 0, 10, 10, exceptionState)); |
331 EXPECT_FALSE(exceptionState.hadException()); | 331 EXPECT_FALSE(exceptionState.hadException()); |
332 TEST_OVERDRAW_2(0, setGlobalAlpha(0.5f), drawImage(&m_opaqueBitmap, 0, 0, 10
, 10, 0, 0, 10, 10, exceptionState)); | 332 TEST_OVERDRAW_2(0, setGlobalAlpha(0.5f), drawImage(canvasElement().getExecut
ionContext(), &m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); |
333 EXPECT_FALSE(exceptionState.hadException()); | 333 EXPECT_FALSE(exceptionState.hadException()); |
334 TEST_OVERDRAW_1(0, drawImage(&m_alphaBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exc
eptionState)); | 334 TEST_OVERDRAW_1(0, drawImage(canvasElement().getExecutionContext(), &m_alpha
Bitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); |
335 EXPECT_FALSE(exceptionState.hadException()); | 335 EXPECT_FALSE(exceptionState.hadException()); |
336 TEST_OVERDRAW_2(0, setGlobalAlpha(0.5f), drawImage(&m_alphaBitmap, 0, 0, 10,
10, 0, 0, 10, 10, exceptionState)); | 336 TEST_OVERDRAW_2(0, setGlobalAlpha(0.5f), drawImage(canvasElement().getExecut
ionContext(), &m_alphaBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); |
337 EXPECT_FALSE(exceptionState.hadException()); | 337 EXPECT_FALSE(exceptionState.hadException()); |
338 TEST_OVERDRAW_1(0, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 1, 0, 10, 10, ex
ceptionState)); | 338 TEST_OVERDRAW_1(0, drawImage(canvasElement().getExecutionContext(), &m_opaqu
eBitmap, 0, 0, 10, 10, 1, 0, 10, 10, exceptionState)); |
339 EXPECT_FALSE(exceptionState.hadException()); | 339 EXPECT_FALSE(exceptionState.hadException()); |
340 TEST_OVERDRAW_1(0, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 9, 9, exce
ptionState)); | 340 TEST_OVERDRAW_1(0, drawImage(canvasElement().getExecutionContext(), &m_opaqu
eBitmap, 0, 0, 10, 10, 0, 0, 9, 9, exceptionState)); |
341 EXPECT_FALSE(exceptionState.hadException()); | 341 EXPECT_FALSE(exceptionState.hadException()); |
342 TEST_OVERDRAW_1(1, drawImage(&m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 11, 11, ex
ceptionState)); | 342 TEST_OVERDRAW_1(1, drawImage(canvasElement().getExecutionContext(), &m_opaqu
eBitmap, 0, 0, 10, 10, 0, 0, 11, 11, exceptionState)); |
343 EXPECT_FALSE(exceptionState.hadException()); | 343 EXPECT_FALSE(exceptionState.hadException()); |
344 TEST_OVERDRAW_2(1, translate(-1, 0), drawImage(&m_opaqueBitmap, 0, 0, 10, 10
, 1, 0, 10, 10, exceptionState)); | 344 TEST_OVERDRAW_2(1, translate(-1, 0), drawImage(canvasElement().getExecutionC
ontext(), &m_opaqueBitmap, 0, 0, 10, 10, 1, 0, 10, 10, exceptionState)); |
345 EXPECT_FALSE(exceptionState.hadException()); | 345 EXPECT_FALSE(exceptionState.hadException()); |
346 TEST_OVERDRAW_2(0, translate(-1, 0), drawImage(&m_opaqueBitmap, 0, 0, 10, 10
, 0, 0, 10, 10, exceptionState)); | 346 TEST_OVERDRAW_2(0, translate(-1, 0), drawImage(canvasElement().getExecutionC
ontext(), &m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); |
347 EXPECT_FALSE(exceptionState.hadException()); | 347 EXPECT_FALSE(exceptionState.hadException()); |
348 TEST_OVERDRAW_2(0, setFillStyle(opaqueGradient()), drawImage(&m_alphaBitmap,
0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); // fillStyle ignored by drawImage | 348 TEST_OVERDRAW_2(0, setFillStyle(opaqueGradient()), drawImage(canvasElement()
.getExecutionContext(), &m_alphaBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionSta
te)); // fillStyle ignored by drawImage |
349 EXPECT_FALSE(exceptionState.hadException()); | 349 EXPECT_FALSE(exceptionState.hadException()); |
350 TEST_OVERDRAW_2(1, setFillStyle(alphaGradient()), drawImage(&m_opaqueBitmap,
0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); // fillStyle ignored by drawImage | 350 TEST_OVERDRAW_2(1, setFillStyle(alphaGradient()), drawImage(canvasElement().
getExecutionContext(), &m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionSta
te)); // fillStyle ignored by drawImage |
351 EXPECT_FALSE(exceptionState.hadException()); | 351 EXPECT_FALSE(exceptionState.hadException()); |
352 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("copy")), drawImage(&m
_opaqueBitmap, 0, 0, 10, 10, 1, 0, 10, 10, exceptionState)); | 352 TEST_OVERDRAW_2(1, setGlobalCompositeOperation(String("copy")), drawImage(ca
nvasElement().getExecutionContext(), &m_opaqueBitmap, 0, 0, 10, 10, 1, 0, 10, 10
, exceptionState)); |
353 EXPECT_FALSE(exceptionState.hadException()); | 353 EXPECT_FALSE(exceptionState.hadException()); |
354 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), drawImage(&m_opaqueBitmap, 0, 0
, 10, 10, 0, 0, 10, 10, exceptionState)); | 354 TEST_OVERDRAW_3(0, rect(0, 0, 5, 5), clip(), drawImage(canvasElement().getEx
ecutionContext(), &m_opaqueBitmap, 0, 0, 10, 10, 0, 0, 10, 10, exceptionState)); |
355 EXPECT_FALSE(exceptionState.hadException()); | 355 EXPECT_FALSE(exceptionState.hadException()); |
356 } | 356 } |
357 | 357 |
358 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithPutImageData) | 358 TEST_F(CanvasRenderingContext2DTest, detectOverdrawWithPutImageData) |
359 { | 359 { |
360 createContext(NonOpaque); | 360 createContext(NonOpaque); |
361 NonThrowableExceptionState exceptionState; | 361 NonThrowableExceptionState exceptionState; |
362 | 362 |
363 // Test putImageData | 363 // Test putImageData |
364 TEST_OVERDRAW_1(1, putImageData(m_fullImageData.get(), 0, 0, exceptionState)
); | 364 TEST_OVERDRAW_1(1, putImageData(m_fullImageData.get(), 0, 0, exceptionState)
); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 EXPECT_FALSE(exceptionState.hadException()); | 450 EXPECT_FALSE(exceptionState.hadException()); |
451 HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanv
asElement); | 451 HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanv
asElement); |
452 IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveIma
geSizeRatio); | 452 IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveIma
geSizeRatio); |
453 OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new Unaccel
eratedImageBufferSurface(sourceSize, NonOpaque)); | 453 OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new Unaccel
eratedImageBufferSurface(sourceSize, NonOpaque)); |
454 sourceCanvas->createImageBufferUsingSurfaceForTesting(sourceSurface.release(
)); | 454 sourceCanvas->createImageBufferUsingSurfaceForTesting(sourceSurface.release(
)); |
455 | 455 |
456 const ImageBitmapOptions defaultOptions; | 456 const ImageBitmapOptions defaultOptions; |
457 // Go through an ImageBitmap to avoid triggering a display list fallback | 457 // Go through an ImageBitmap to avoid triggering a display list fallback |
458 ImageBitmap* sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(I
ntPoint(0, 0), sourceSize), defaultOptions); | 458 ImageBitmap* sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(I
ntPoint(0, 0), sourceSize), defaultOptions); |
459 | 459 |
460 context2d()->drawImage(sourceImageBitmap, 0, 0, 1, 1, 0, 0, 1, 1, exceptionS
tate); | 460 context2d()->drawImage(canvasElement().getExecutionContext(), sourceImageBit
map, 0, 0, 1, 1, 0, 0, 1, 1, exceptionState); |
461 EXPECT_FALSE(exceptionState.hadException()); | 461 EXPECT_FALSE(exceptionState.hadException()); |
462 | 462 |
463 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); | 463 EXPECT_FALSE(canvasElement().shouldBeDirectComposited()); |
464 } | 464 } |
465 | 465 |
466 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverImageSizeRatioLimit) | 466 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverImageSizeRatioLimit) |
467 { | 467 { |
468 createContext(NonOpaque); | 468 createContext(NonOpaque); |
469 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf
ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec
tNoFallback), NonOpaque)); | 469 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf
ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec
tNoFallback), NonOpaque)); |
470 canvasElement().createImageBufferUsingSurfaceForTesting(surface.release()); | 470 canvasElement().createImageBufferUsingSurfaceForTesting(surface.release()); |
471 | 471 |
472 NonThrowableExceptionState exceptionState; | 472 NonThrowableExceptionState exceptionState; |
473 Element* sourceCanvasElement = document().createElement("canvas", exceptionS
tate); | 473 Element* sourceCanvasElement = document().createElement("canvas", exceptionS
tate); |
474 EXPECT_FALSE(exceptionState.hadException()); | 474 EXPECT_FALSE(exceptionState.hadException()); |
475 HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanv
asElement); | 475 HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanv
asElement); |
476 IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveIma
geSizeRatio + 1); | 476 IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveIma
geSizeRatio + 1); |
477 OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new Unaccel
eratedImageBufferSurface(sourceSize, NonOpaque)); | 477 OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new Unaccel
eratedImageBufferSurface(sourceSize, NonOpaque)); |
478 sourceCanvas->createImageBufferUsingSurfaceForTesting(sourceSurface.release(
)); | 478 sourceCanvas->createImageBufferUsingSurfaceForTesting(sourceSurface.release(
)); |
479 | 479 |
480 const ImageBitmapOptions defaultOptions; | 480 const ImageBitmapOptions defaultOptions; |
481 // Go through an ImageBitmap to avoid triggering a display list fallback | 481 // Go through an ImageBitmap to avoid triggering a display list fallback |
482 ImageBitmap* sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(I
ntPoint(0, 0), sourceSize), defaultOptions); | 482 ImageBitmap* sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(I
ntPoint(0, 0), sourceSize), defaultOptions); |
483 | 483 |
484 context2d()->drawImage(sourceImageBitmap, 0, 0, 1, 1, 0, 0, 1, 1, exceptionS
tate); | 484 context2d()->drawImage(canvasElement().getExecutionContext(), sourceImageBit
map, 0, 0, 1, 1, 0, 0, 1, 1, exceptionState); |
485 EXPECT_FALSE(exceptionState.hadException()); | 485 EXPECT_FALSE(exceptionState.hadException()); |
486 | 486 |
487 EXPECT_TRUE(canvasElement().shouldBeDirectComposited()); | 487 EXPECT_TRUE(canvasElement().shouldBeDirectComposited()); |
488 } | 488 } |
489 | 489 |
490 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderExpensivePathPointCoun
t) | 490 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderExpensivePathPointCoun
t) |
491 { | 491 { |
492 createContext(NonOpaque); | 492 createContext(NonOpaque); |
493 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf
ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec
tNoFallback), NonOpaque)); | 493 OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBuf
ferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::Expec
tNoFallback), NonOpaque)); |
494 canvasElement().createImageBufferUsingSurfaceForTesting(surface.release()); | 494 canvasElement().createImageBufferUsingSurfaceForTesting(surface.release()); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 { | 669 { |
670 const ImageBitmapOptions defaultOptions; | 670 const ImageBitmapOptions defaultOptions; |
671 ImageBitmap* imageBitmapFromCanvas = ImageBitmap::create(canvas, IntRect
(0, 0, canvas->width(), canvas->height()), defaultOptions); | 671 ImageBitmap* imageBitmapFromCanvas = ImageBitmap::create(canvas, IntRect
(0, 0, canvas->width(), canvas->height()), defaultOptions); |
672 imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas, IntRect(
0, 0, 20, 20), defaultOptions); | 672 imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas, IntRect(
0, 0, 20, 20), defaultOptions); |
673 } | 673 } |
674 CanvasContextCreationAttributes attributes; | 674 CanvasContextCreationAttributes attributes; |
675 CanvasRenderingContext2D* context = static_cast<CanvasRenderingContext2D*>(c
anvas->getCanvasRenderingContext("2d", attributes)); | 675 CanvasRenderingContext2D* context = static_cast<CanvasRenderingContext2D*>(c
anvas->getCanvasRenderingContext("2d", attributes)); |
676 TrackExceptionState exceptionState; | 676 TrackExceptionState exceptionState; |
677 CanvasImageSourceUnion imageSource; | 677 CanvasImageSourceUnion imageSource; |
678 imageSource.setImageBitmap(imageBitmapDerived); | 678 imageSource.setImageBitmap(imageBitmapDerived); |
679 context->drawImage(imageSource, 0, 0, exceptionState); | 679 context->drawImage(canvas->getExecutionContext(), imageSource, 0, 0, excepti
onState); |
680 } | 680 } |
681 | 681 |
682 TEST_F(CanvasRenderingContext2DTest, GPUMemoryUpdateForAcceleratedCanvas) | 682 TEST_F(CanvasRenderingContext2DTest, GPUMemoryUpdateForAcceleratedCanvas) |
683 { | 683 { |
684 createContext(NonOpaque); | 684 createContext(NonOpaque); |
685 | 685 |
686 OwnPtr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface =
adoptPtr(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpa
que)); | 686 OwnPtr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface =
adoptPtr(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpa
que)); |
687 FakeAcceleratedImageBufferSurfaceForTesting* fakeAccelerateSurfacePtr = fake
AccelerateSurface.get(); | 687 FakeAcceleratedImageBufferSurfaceForTesting* fakeAccelerateSurfacePtr = fake
AccelerateSurface.get(); |
688 canvasElement().createImageBufferUsingSurfaceForTesting(fakeAccelerateSurfac
e.release()); | 688 canvasElement().createImageBufferUsingSurfaceForTesting(fakeAccelerateSurfac
e.release()); |
689 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per p
ixel per buffer, | 689 // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per p
ixel per buffer, |
(...skipping 23 matching lines...) Expand all Loading... |
713 canvasElement().setSize(IntSize(20, 20)); | 713 canvasElement().setSize(IntSize(20, 20)); |
714 Mock::VerifyAndClearExpectations(fakeAccelerateSurfacePtr); | 714 Mock::VerifyAndClearExpectations(fakeAccelerateSurfacePtr); |
715 EXPECT_EQ(400, getGlobalGPUMemoryUsage()); | 715 EXPECT_EQ(400, getGlobalGPUMemoryUsage()); |
716 | 716 |
717 // Tear down the second image buffer | 717 // Tear down the second image buffer |
718 imageBuffer2.clear(); | 718 imageBuffer2.clear(); |
719 EXPECT_EQ(0, getGlobalGPUMemoryUsage()); | 719 EXPECT_EQ(0, getGlobalGPUMemoryUsage()); |
720 } | 720 } |
721 | 721 |
722 } // namespace blink | 722 } // namespace blink |
OLD | NEW |