OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 | 90 |
91 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imag
eElement.get(), | 91 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imag
eElement.get(), |
92 IntRect(0, 0, m_image->width(), m_image->height())); | 92 IntRect(0, 0, m_image->width(), m_image->height())); |
93 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::creat
e(imageElement.get(), | 93 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::creat
e(imageElement.get(), |
94 IntRect(m_image->width() / 2, m_image->height() / 2, m_image->width() /
2, m_image->height() / 2)); | 94 IntRect(m_image->width() / 2, m_image->height() / 2, m_image->width() /
2, m_image->height() / 2)); |
95 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::creat
e(imageElement.get(), | 95 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::creat
e(imageElement.get(), |
96 IntRect(-m_image->width() / 2, -m_image->height() / 2, m_image->width(),
m_image->height())); | 96 IntRect(-m_image->width() / 2, -m_image->height() / 2, m_image->width(),
m_image->height())); |
97 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create
(imageElement.get(), | 97 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create
(imageElement.get(), |
98 IntRect(-m_image->width(), -m_image->height(), m_image->width(), m_image
->height())); | 98 IntRect(-m_image->width(), -m_image->height(), m_image->width(), m_image
->height())); |
99 | 99 |
100 ASSERT_EQ(imageBitmapNoCrop->bitmapImage().get(), imageElement->cachedImage(
)->image()); | 100 ASSERT_EQ(imageBitmapNoCrop->bitmapData().get(), imageElement->cachedImage()
->image()->imageForCurrentFrame().get()); |
101 ASSERT_EQ(imageBitmapInteriorCrop->bitmapImage().get(), imageElement->cached
Image()->image()); | 101 ASSERT_EQ(imageBitmapInteriorCrop->bitmapData().get(), imageElement->cachedI
mage()->image()->imageForCurrentFrame().get()); |
102 ASSERT_EQ(imageBitmapExteriorCrop->bitmapImage().get(), imageElement->cached
Image()->image()); | 102 ASSERT_EQ(imageBitmapExteriorCrop->bitmapData().get(), imageElement->cachedI
mage()->image()->imageForCurrentFrame().get()); |
103 | 103 |
104 RefPtr<Image> emptyImage = imageBitmapOutsideCrop->bitmapImage(); | 104 RefPtr<SkImage> emptyImage = imageBitmapOutsideCrop->bitmapData(); |
105 ASSERT_NE(emptyImage.get(), imageElement->cachedImage()->image()); | 105 ASSERT_NE(emptyImage.get(), imageElement->cachedImage()->image()->imageForCu
rrentFrame().get()); |
106 } | 106 } |
107 | 107 |
108 // Verifies that HTMLImageElements are given an elevated CacheLiveResourcePriori
ty when used to construct an ImageBitmap. | 108 // Verifies that HTMLImageElements are given an elevated CacheLiveResourcePriori
ty when used to construct an ImageBitmap. |
109 // ImageBitmaps that have crop rects outside of the bounds of the HTMLImageEleme
nt do not have elevated CacheLiveResourcePriority. | 109 // ImageBitmaps that have crop rects outside of the bounds of the HTMLImageEleme
nt do not have elevated CacheLiveResourcePriority. |
110 TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority) | 110 TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority) |
111 { | 111 { |
112 RefPtrWillBePersistent<HTMLImageElement> imageNoCrop = HTMLImageElement::cre
ate(*Document::create().get()); | 112 RefPtrWillBePersistent<HTMLImageElement> imageNoCrop = HTMLImageElement::cre
ate(*Document::create().get()); |
113 ResourcePtr<ImageResource> cachedImageNoCrop = new ImageResource(ResourceReq
uest("http://foo.com/1"), | 113 ResourcePtr<ImageResource> cachedImageNoCrop = new ImageResource(ResourceReq
uest("http://foo.com/1"), |
114 StaticBitmapImage::create(m_image).get()); | 114 StaticBitmapImage::create(m_image).get()); |
115 imageNoCrop->setImageResource(cachedImageNoCrop.get()); | 115 imageNoCrop->setImageResource(cachedImageNoCrop.get()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 { | 154 { |
155 RefPtrWillBePersistent<ImageBitmap> imageBitmapNoCrop = ImageBitmap::cre
ate(imageNoCrop.get(), | 155 RefPtrWillBePersistent<ImageBitmap> imageBitmapNoCrop = ImageBitmap::cre
ate(imageNoCrop.get(), |
156 IntRect(0, 0, m_image->width(), m_image->height())); | 156 IntRect(0, 0, m_image->width(), m_image->height())); |
157 RefPtrWillBePersistent<ImageBitmap> imageBitmapInteriorCrop2 = ImageBitm
ap::create(imageInteriorCrop.get(), | 157 RefPtrWillBePersistent<ImageBitmap> imageBitmapInteriorCrop2 = ImageBitm
ap::create(imageInteriorCrop.get(), |
158 IntRect(m_image->width() / 2, m_image->height() / 2, m_image->width(
), m_image->height())); | 158 IntRect(m_image->width() / 2, m_image->height() / 2, m_image->width(
), m_image->height())); |
159 RefPtrWillBePersistent<ImageBitmap> imageBitmapExteriorCrop = ImageBitma
p::create(imageExteriorCrop.get(), | 159 RefPtrWillBePersistent<ImageBitmap> imageBitmapExteriorCrop = ImageBitma
p::create(imageExteriorCrop.get(), |
160 IntRect(-m_image->width() / 2, -m_image->height() / 2, m_image->widt
h(), m_image->height())); | 160 IntRect(-m_image->width() / 2, -m_image->height() / 2, m_image->widt
h(), m_image->height())); |
161 RefPtrWillBePersistent<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap
::create(imageOutsideCrop.get(), | 161 RefPtrWillBePersistent<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap
::create(imageOutsideCrop.get(), |
162 IntRect(-m_image->width(), -m_image->height(), m_image->width(), m_i
mage->height())); | 162 IntRect(-m_image->width(), -m_image->height(), m_image->width(), m_i
mage->height())); |
163 | 163 |
164 // Images that are referenced by ImageBitmaps have CacheLiveResourcePrio
rityHigh. | 164 // Images are not referenced by ImageBitmap anymore, so always CacheLive
ResourcePriorityLow |
165 ASSERT_EQ(memoryCache()->priority(imageNoCrop->cachedImage()), MemoryCac
heLiveResourcePriorityHigh); | 165 ASSERT_EQ(memoryCache()->priority(imageNoCrop->cachedImage()), MemoryCac
heLiveResourcePriorityLow); |
166 ASSERT_EQ(memoryCache()->priority(imageInteriorCrop->cachedImage()), Mem
oryCacheLiveResourcePriorityHigh); | 166 ASSERT_EQ(memoryCache()->priority(imageInteriorCrop->cachedImage()), Mem
oryCacheLiveResourcePriorityLow); |
167 ASSERT_EQ(memoryCache()->priority(imageExteriorCrop->cachedImage()), Mem
oryCacheLiveResourcePriorityHigh); | 167 ASSERT_EQ(memoryCache()->priority(imageExteriorCrop->cachedImage()), Mem
oryCacheLiveResourcePriorityLow); |
168 | 168 |
169 // ImageBitmaps that do not contain any of the source image do not eleva
te CacheLiveResourcePriority. | 169 // ImageBitmaps that do not contain any of the source image do not eleva
te CacheLiveResourcePriority. |
170 ASSERT_EQ(memoryCache()->priority(imageOutsideCrop->cachedImage()), Memo
ryCacheLiveResourcePriorityLow); | 170 ASSERT_EQ(memoryCache()->priority(imageOutsideCrop->cachedImage()), Memo
ryCacheLiveResourcePriorityLow); |
171 } | 171 } |
172 // Force a garbage collection to sweep out the local ImageBitmaps. | 172 // Force a garbage collection to sweep out the local ImageBitmaps. |
173 Heap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, B
linkGC::ForcedGC); | 173 Heap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, B
linkGC::ForcedGC); |
174 | 174 |
175 // CacheLiveResourcePriroity should return to CacheLiveResourcePriorityLow w
hen no ImageBitmaps reference the image. | 175 // CacheLiveResourcePriroity should return to CacheLiveResourcePriorityLow w
hen no ImageBitmaps reference the image. |
176 ASSERT_EQ(memoryCache()->priority(imageNoCrop->cachedImage()), MemoryCacheLi
veResourcePriorityLow); | 176 ASSERT_EQ(memoryCache()->priority(imageNoCrop->cachedImage()), MemoryCacheLi
veResourcePriorityLow); |
177 ASSERT_EQ(memoryCache()->priority(imageExteriorCrop->cachedImage()), MemoryC
acheLiveResourcePriorityLow); | 177 ASSERT_EQ(memoryCache()->priority(imageExteriorCrop->cachedImage()), MemoryC
acheLiveResourcePriorityLow); |
178 ASSERT_EQ(memoryCache()->priority(imageOutsideCrop->cachedImage()), MemoryCa
cheLiveResourcePriorityLow); | 178 ASSERT_EQ(memoryCache()->priority(imageOutsideCrop->cachedImage()), MemoryCa
cheLiveResourcePriorityLow); |
179 | 179 |
180 // There is still an ImageBitmap that references this image. | 180 // There is still an ImageBitmap that references this image. |
181 ASSERT_EQ(memoryCache()->priority(imageInteriorCrop->cachedImage()), MemoryC
acheLiveResourcePriorityHigh); | 181 ASSERT_EQ(memoryCache()->priority(imageInteriorCrop->cachedImage()), MemoryC
acheLiveResourcePriorityLow); |
182 imageBitmapInteriorCrop = nullptr; | 182 imageBitmapInteriorCrop = nullptr; |
183 } | 183 } |
184 | 184 |
185 // Verifies that ImageBitmaps constructed from HTMLImageElements hold a referenc
e to the original Image if the HTMLImageElement src is changed. | 185 // Verifies that ImageBitmaps constructed from HTMLImageElements hold a referenc
e to the original Image if the HTMLImageElement src is changed. |
186 TEST_F(ImageBitmapTest, ImageBitmapSourceChanged) | 186 TEST_F(ImageBitmapTest, ImageBitmapSourceChanged) |
187 { | 187 { |
188 RefPtrWillBeRawPtr<HTMLImageElement> image = HTMLImageElement::create(*Docum
ent::create().get()); | 188 RefPtrWillBeRawPtr<HTMLImageElement> image = HTMLImageElement::create(*Docum
ent::create().get()); |
189 ResourcePtr<ImageResource> originalImageResource = new ImageResource( | 189 ResourcePtr<ImageResource> originalImageResource = new ImageResource( |
190 StaticBitmapImage::create(m_image).get()); | 190 StaticBitmapImage::create(m_image).get()); |
191 image->setImageResource(originalImageResource.get()); | 191 image->setImageResource(originalImageResource.get()); |
192 | 192 |
193 RefPtrWillBeRawPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get(
), | 193 RefPtrWillBeRawPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get(
), |
194 IntRect(0, 0, m_image->width(), m_image->height())); | 194 IntRect(0, 0, m_image->width(), m_image->height())); |
195 ASSERT_EQ(imageBitmap->bitmapImage().get(), originalImageResource->image()); | 195 ASSERT_EQ(imageBitmap->bitmapData().get(), originalImageResource->image()->i
mageForCurrentFrame().get()); |
196 | 196 |
197 ResourcePtr<ImageResource> newImageResource = new ImageResource( | 197 ResourcePtr<ImageResource> newImageResource = new ImageResource( |
198 StaticBitmapImage::create(m_image2).get()); | 198 StaticBitmapImage::create(m_image2).get()); |
199 image->setImageResource(newImageResource.get()); | 199 image->setImageResource(newImageResource.get()); |
200 | 200 |
201 // The ImageBitmap should contain the same data as the original cached image
but should no longer hold a reference. | 201 // The ImageBitmap should contain the same data as the original cached image |
202 { | 202 { |
203 ASSERT_NE(imageBitmap->bitmapImage().get(), originalImageResource->image
()); | 203 ASSERT_EQ(imageBitmap->bitmapData().get(), originalImageResource->image(
)->imageForCurrentFrame().get()); |
204 RefPtr<SkImage> image1 = imageBitmap->bitmapImage()->imageForCurrentFram
e(); | 204 RefPtr<SkImage> image1 = imageBitmap->bitmapData(); |
205 ASSERT_NE(image1, nullptr); | 205 ASSERT_NE(image1, nullptr); |
206 RefPtr<SkImage> image2 = originalImageResource->image()->imageForCurrent
Frame(); | 206 RefPtr<SkImage> image2 = originalImageResource->image()->imageForCurrent
Frame(); |
207 ASSERT_NE(image2, nullptr); | 207 ASSERT_NE(image2, nullptr); |
208 ASSERT_EQ(image1, image2); | 208 ASSERT_EQ(image1, image2); |
209 } | 209 } |
210 | 210 |
211 { | 211 { |
212 ASSERT_NE(imageBitmap->bitmapImage().get(), newImageResource->image()); | 212 ASSERT_NE(imageBitmap->bitmapData().get(), newImageResource->image()->im
ageForCurrentFrame().get()); |
213 RefPtr<SkImage> image1 = imageBitmap->bitmapImage()->imageForCurrentFram
e(); | 213 RefPtr<SkImage> image1 = imageBitmap->bitmapData(); |
214 ASSERT_NE(image1, nullptr); | 214 ASSERT_NE(image1, nullptr); |
215 RefPtr<SkImage> image2 = newImageResource->image()->imageForCurrentFrame
(); | 215 RefPtr<SkImage> image2 = newImageResource->image()->imageForCurrentFrame
(); |
216 ASSERT_NE(image2, nullptr); | 216 ASSERT_NE(image2, nullptr); |
217 ASSERT_NE(image1, image2); | 217 ASSERT_NE(image1, image2); |
218 } | 218 } |
219 } | 219 } |
220 | 220 |
221 } // namespace | 221 } // namespace |
OLD | NEW |