| Index: Source/core/frame/ImageBitmapTest.cpp
|
| diff --git a/Source/core/frame/ImageBitmapTest.cpp b/Source/core/frame/ImageBitmapTest.cpp
|
| index 6e481567f1997f94aeb021f4e619dbb0bfbbf487..d6981bcbfdbaf4463461790257747b108896022a 100644
|
| --- a/Source/core/frame/ImageBitmapTest.cpp
|
| +++ b/Source/core/frame/ImageBitmapTest.cpp
|
| @@ -40,6 +40,7 @@
|
| #include "core/html/HTMLCanvasElement.h"
|
| #include "core/html/HTMLImageElement.h"
|
| #include "core/html/canvas/CanvasRenderingContext2D.h"
|
| +#include "heap/Handle.h"
|
| #include "platform/graphics/BitmapImage.h"
|
| #include "platform/graphics/skia/NativeImageSkia.h"
|
| #include "platform/network/ResourceRequest.h"
|
| @@ -69,6 +70,11 @@ protected:
|
| }
|
| virtual void TearDown()
|
| {
|
| + // Garbage collection is required prior to switching out the
|
| + // test's memory cache; image resources are released, evicting
|
| + // them from the cache.
|
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, Heap::ForcedForTesting);
|
| +
|
| // Regain the ownership of testing memory cache, so that it will be
|
| // destroyed.
|
| m_testingMemoryCache = adoptPtr(memoryCache());
|
| @@ -88,10 +94,10 @@ TEST_F(ImageBitmapTest, ImageResourceConsistency)
|
| RefPtr<HTMLImageElement> imageElement = HTMLImageElement::create(*Document::create().get());
|
| imageElement->setImageResource(new ImageResource(BitmapImage::create(NativeImageSkia::create(m_bitmap)).get()));
|
|
|
| - RefPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imageElement.get(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height()));
|
| - RefPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::create(imageElement.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bitmap.width() / 2, m_bitmap.height() / 2));
|
| - RefPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::create(imageElement.get(), IntRect(-m_bitmap.width() / 2, -m_bitmap.height() / 2, m_bitmap.width(), m_bitmap.height()));
|
| - RefPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create(imageElement.get(), IntRect(-m_bitmap.width(), -m_bitmap.height(), m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imageElement.get(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::create(imageElement.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bitmap.width() / 2, m_bitmap.height() / 2));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::create(imageElement.get(), IntRect(-m_bitmap.width() / 2, -m_bitmap.height() / 2, m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create(imageElement.get(), IntRect(-m_bitmap.width(), -m_bitmap.height(), m_bitmap.width(), m_bitmap.height()));
|
|
|
| ASSERT_EQ(imageBitmapNoCrop->bitmapImage().get(), imageElement->cachedImage()->image());
|
| ASSERT_EQ(imageBitmapInteriorCrop->bitmapImage().get(), imageElement->cachedImage()->image());
|
| @@ -142,12 +148,12 @@ TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority)
|
| ASSERT_EQ(imageExteriorCrop->cachedImage()->cacheLiveResourcePriority(), Resource::CacheLiveResourcePriorityLow);
|
| ASSERT_EQ(imageOutsideCrop->cachedImage()->cacheLiveResourcePriority(), Resource::CacheLiveResourcePriorityLow);
|
|
|
| - RefPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::create(imageInteriorCrop.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::create(imageInteriorCrop.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bitmap.width(), m_bitmap.height()));
|
| {
|
| - RefPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imageNoCrop.get(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height()));
|
| - RefPtr<ImageBitmap> imageBitmapInteriorCrop2 = ImageBitmap::create(imageInteriorCrop.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bitmap.width(), m_bitmap.height()));
|
| - RefPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::create(imageExteriorCrop.get(), IntRect(-m_bitmap.width() / 2, -m_bitmap.height() / 2, m_bitmap.width(), m_bitmap.height()));
|
| - RefPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create(imageOutsideCrop.get(), IntRect(-m_bitmap.width(), -m_bitmap.height(), m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imageNoCrop.get(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapInteriorCrop2 = ImageBitmap::create(imageInteriorCrop.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::create(imageExteriorCrop.get(), IntRect(-m_bitmap.width() / 2, -m_bitmap.height() / 2, m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create(imageOutsideCrop.get(), IntRect(-m_bitmap.width(), -m_bitmap.height(), m_bitmap.width(), m_bitmap.height()));
|
|
|
| // Images that are referenced by ImageBitmaps have CacheLiveResourcePriorityHigh.
|
| ASSERT_EQ(imageNoCrop->cachedImage()->cacheLiveResourcePriority(), Resource::CacheLiveResourcePriorityHigh);
|
| @@ -156,6 +162,15 @@ TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority)
|
|
|
| // ImageBitmaps that do not contain any of the source image do not elevate CacheLiveResourcePriority.
|
| ASSERT_EQ(imageOutsideCrop->cachedImage()->cacheLiveResourcePriority(), Resource::CacheLiveResourcePriorityLow);
|
| +
|
| + // Stub out references to the ImageBitmaps created and force a
|
| + // garbage collection to have the ImageBitmaps be collected and
|
| + // destructed.
|
| + imageBitmapNoCrop = nullptr;
|
| + imageBitmapInteriorCrop2 = nullptr;
|
| + imageBitmapExteriorCrop = nullptr;
|
| + imageBitmapOutsideCrop = nullptr;
|
| + Heap::collectGarbage(ThreadState::HeapPointersOnStack, Heap::ForcedForTesting);
|
| }
|
|
|
| // CacheLiveResourcePriroity should return to CacheLiveResourcePriorityLow when no ImageBitmaps reference the image.
|
| @@ -165,6 +180,7 @@ TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority)
|
|
|
| // There is still an ImageBitmap that references this image.
|
| ASSERT_EQ(imageInteriorCrop->cachedImage()->cacheLiveResourcePriority(), Resource::CacheLiveResourcePriorityHigh);
|
| + imageBitmapInteriorCrop = nullptr;
|
| }
|
|
|
| // Verifies that ImageBitmaps constructed from HTMLImageElements hold a reference to the original Image if the HTMLImageElement src is changed.
|
| @@ -174,7 +190,7 @@ TEST_F(ImageBitmapTest, ImageBitmapSourceChanged)
|
| ResourcePtr<ImageResource> originalImageResource = new ImageResource(BitmapImage::create(NativeImageSkia::create(m_bitmap)).get());
|
| image->setImageResource(originalImageResource.get());
|
|
|
| - RefPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height()));
|
| ASSERT_EQ(imageBitmap->bitmapImage().get(), originalImageResource->image());
|
|
|
| ResourcePtr<ImageResource> newImageResource = new ImageResource(BitmapImage::create(NativeImageSkia::create(m_bitmap2)).get());
|
| @@ -196,9 +212,9 @@ TEST_F(ImageBitmapTest, ImageResourceLifetime)
|
| RefPtr<HTMLCanvasElement> canvasElement = HTMLCanvasElement::create(*Document::create().get());
|
| canvasElement->setHeight(40);
|
| canvasElement->setWidth(40);
|
| - RefPtr<ImageBitmap> imageBitmapDerived;
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapDerived;
|
| {
|
| - RefPtr<ImageBitmap> imageBitmapFromCanvas = ImageBitmap::create(canvasElement.get(), IntRect(0, 0, canvasElement->width(), canvasElement->height()));
|
| + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapFromCanvas = ImageBitmap::create(canvasElement.get(), IntRect(0, 0, canvasElement->width(), canvasElement->height()));
|
| imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), IntRect(0, 0, 20, 20));
|
| }
|
| CanvasRenderingContext* context = canvasElement->getContext("2d");
|
|
|