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

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

Issue 1928043002: Add drawImage() originClean() getSecurityOrigin() to OffscreenCanvas (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: drawImage API added to interface listing Created 4 years, 7 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"
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698