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

Side by Side Diff: Source/core/frame/ImageBitmapTest.cpp

Issue 1001703003: Take NativeImageSkia out behind the woodshed. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Switch to skia-style API (return bool instead of SkBitmap) Created 5 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/frame/ImageBitmap.cpp ('k') | Source/core/html/HTMLCanvasElement.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 26 matching lines...) Expand all
37 #include "core/fetch/ImageResource.h" 37 #include "core/fetch/ImageResource.h"
38 #include "core/fetch/MemoryCache.h" 38 #include "core/fetch/MemoryCache.h"
39 #include "core/fetch/MockImageResourceClient.h" 39 #include "core/fetch/MockImageResourceClient.h"
40 #include "core/fetch/ResourcePtr.h" 40 #include "core/fetch/ResourcePtr.h"
41 #include "core/html/HTMLCanvasElement.h" 41 #include "core/html/HTMLCanvasElement.h"
42 #include "core/html/HTMLImageElement.h" 42 #include "core/html/HTMLImageElement.h"
43 #include "core/html/HTMLVideoElement.h" 43 #include "core/html/HTMLVideoElement.h"
44 #include "core/html/canvas/CanvasRenderingContext2D.h" 44 #include "core/html/canvas/CanvasRenderingContext2D.h"
45 #include "core/html/canvas/WebGLRenderingContext.h" 45 #include "core/html/canvas/WebGLRenderingContext.h"
46 #include "platform/graphics/BitmapImage.h" 46 #include "platform/graphics/BitmapImage.h"
47 #include "platform/graphics/skia/NativeImageSkia.h"
48 #include "platform/heap/Handle.h" 47 #include "platform/heap/Handle.h"
49 #include "platform/network/ResourceRequest.h" 48 #include "platform/network/ResourceRequest.h"
50 #include "wtf/OwnPtr.h" 49 #include "wtf/OwnPtr.h"
51 50
52 #include <gtest/gtest.h> 51 #include <gtest/gtest.h>
53 52
54 namespace blink { 53 namespace blink {
55 54
56 class ImageBitmapTest : public ::testing::Test { 55 class ImageBitmapTest : public ::testing::Test {
57 protected: 56 protected:
(...skipping 20 matching lines...) Expand all
78 77
79 SkBitmap m_bitmap, m_bitmap2; 78 SkBitmap m_bitmap, m_bitmap2;
80 OwnPtrWillBePersistent<MemoryCache> m_globalMemoryCache; 79 OwnPtrWillBePersistent<MemoryCache> m_globalMemoryCache;
81 }; 80 };
82 81
83 // Verifies that the image resource held by an ImageBitmap is the same as the 82 // Verifies that the image resource held by an ImageBitmap is the same as the
84 // one held by the HTMLImageElement. 83 // one held by the HTMLImageElement.
85 TEST_F(ImageBitmapTest, ImageResourceConsistency) 84 TEST_F(ImageBitmapTest, ImageResourceConsistency)
86 { 85 {
87 RefPtrWillBeRawPtr<HTMLImageElement> imageElement = HTMLImageElement::create (*Document::create().get()); 86 RefPtrWillBeRawPtr<HTMLImageElement> imageElement = HTMLImageElement::create (*Document::create().get());
88 imageElement->setImageResource(new ImageResource(BitmapImage::create(NativeI mageSkia::create(m_bitmap)).get())); 87 imageElement->setImageResource(new ImageResource(BitmapImage::create(m_bitma p).get()));
89 88
90 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imag eElement.get(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height())); 89 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imag eElement.get(), IntRect(0, 0, m_bitmap.width(), m_bitmap.height()));
91 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::creat e(imageElement.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bit map.width() / 2, m_bitmap.height() / 2)); 90 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::creat e(imageElement.get(), IntRect(m_bitmap.width() / 2, m_bitmap.height() / 2, m_bit map.width() / 2, m_bitmap.height() / 2));
92 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::creat e(imageElement.get(), IntRect(-m_bitmap.width() / 2, -m_bitmap.height() / 2, m_b itmap.width(), m_bitmap.height())); 91 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::creat e(imageElement.get(), IntRect(-m_bitmap.width() / 2, -m_bitmap.height() / 2, m_b itmap.width(), m_bitmap.height()));
93 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create (imageElement.get(), IntRect(-m_bitmap.width(), -m_bitmap.height(), m_bitmap.wid th(), m_bitmap.height())); 92 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create (imageElement.get(), IntRect(-m_bitmap.width(), -m_bitmap.height(), m_bitmap.wid th(), m_bitmap.height()));
94 93
95 ASSERT_EQ(imageBitmapNoCrop->bitmapImage().get(), imageElement->cachedImage( )->image()); 94 ASSERT_EQ(imageBitmapNoCrop->bitmapImage().get(), imageElement->cachedImage( )->image());
96 ASSERT_EQ(imageBitmapInteriorCrop->bitmapImage().get(), imageElement->cached Image()->image()); 95 ASSERT_EQ(imageBitmapInteriorCrop->bitmapImage().get(), imageElement->cached Image()->image());
97 ASSERT_EQ(imageBitmapExteriorCrop->bitmapImage().get(), imageElement->cached Image()->image()); 96 ASSERT_EQ(imageBitmapExteriorCrop->bitmapImage().get(), imageElement->cached Image()->image());
98 97
99 RefPtr<Image> emptyImage = imageBitmapOutsideCrop->bitmapImage(); 98 RefPtr<Image> emptyImage = imageBitmapOutsideCrop->bitmapImage();
100 ASSERT_NE(emptyImage.get(), imageElement->cachedImage()->image()); 99 ASSERT_NE(emptyImage.get(), imageElement->cachedImage()->image());
101 } 100 }
102 101
103 // Verifies that HTMLImageElements are given an elevated CacheLiveResourcePriori ty when used to construct an ImageBitmap. 102 // Verifies that HTMLImageElements are given an elevated CacheLiveResourcePriori ty when used to construct an ImageBitmap.
104 // ImageBitmaps that have crop rects outside of the bounds of the HTMLImageEleme nt do not have elevated CacheLiveResourcePriority. 103 // ImageBitmaps that have crop rects outside of the bounds of the HTMLImageEleme nt do not have elevated CacheLiveResourcePriority.
105 TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority) 104 TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority)
106 { 105 {
107 RefPtrWillBePersistent<HTMLImageElement> imageNoCrop = HTMLImageElement::cre ate(*Document::create().get()); 106 RefPtrWillBePersistent<HTMLImageElement> imageNoCrop = HTMLImageElement::cre ate(*Document::create().get());
108 ResourcePtr<ImageResource> cachedImageNoCrop = new ImageResource(ResourceReq uest("http://foo.com/1"), BitmapImage::create(NativeImageSkia::create(m_bitmap)) .get()); 107 ResourcePtr<ImageResource> cachedImageNoCrop = new ImageResource(ResourceReq uest("http://foo.com/1"), BitmapImage::create(m_bitmap).get());
109 imageNoCrop->setImageResource(cachedImageNoCrop.get()); 108 imageNoCrop->setImageResource(cachedImageNoCrop.get());
110 109
111 RefPtrWillBePersistent<HTMLImageElement> imageInteriorCrop = HTMLImageElemen t::create(*Document::create().get()); 110 RefPtrWillBePersistent<HTMLImageElement> imageInteriorCrop = HTMLImageElemen t::create(*Document::create().get());
112 ResourcePtr<ImageResource> cachedImageInteriorCrop = new ImageResource(Resou rceRequest("http://foo.com/2"), BitmapImage::create(NativeImageSkia::create(m_bi tmap)).get()); 111 ResourcePtr<ImageResource> cachedImageInteriorCrop = new ImageResource(Resou rceRequest("http://foo.com/2"), BitmapImage::create(m_bitmap).get());
113 imageInteriorCrop->setImageResource(cachedImageInteriorCrop.get()); 112 imageInteriorCrop->setImageResource(cachedImageInteriorCrop.get());
114 113
115 RefPtrWillBePersistent<HTMLImageElement> imageExteriorCrop = HTMLImageElemen t::create(*Document::create().get()); 114 RefPtrWillBePersistent<HTMLImageElement> imageExteriorCrop = HTMLImageElemen t::create(*Document::create().get());
116 ResourcePtr<ImageResource> cachedImageExteriorCrop = new ImageResource(Resou rceRequest("http://foo.com/3"), BitmapImage::create(NativeImageSkia::create(m_bi tmap)).get()); 115 ResourcePtr<ImageResource> cachedImageExteriorCrop = new ImageResource(Resou rceRequest("http://foo.com/3"), BitmapImage::create(m_bitmap).get());
117 imageExteriorCrop->setImageResource(cachedImageExteriorCrop.get()); 116 imageExteriorCrop->setImageResource(cachedImageExteriorCrop.get());
118 117
119 RefPtrWillBePersistent<HTMLImageElement> imageOutsideCrop = HTMLImageElement ::create(*Document::create().get()); 118 RefPtrWillBePersistent<HTMLImageElement> imageOutsideCrop = HTMLImageElement ::create(*Document::create().get());
120 ResourcePtr<ImageResource> cachedImageOutsideCrop = new ImageResource(Resour ceRequest("http://foo.com/4"), BitmapImage::create(NativeImageSkia::create(m_bit map)).get()); 119 ResourcePtr<ImageResource> cachedImageOutsideCrop = new ImageResource(Resour ceRequest("http://foo.com/4"), BitmapImage::create(m_bitmap).get());
121 imageOutsideCrop->setImageResource(cachedImageOutsideCrop.get()); 120 imageOutsideCrop->setImageResource(cachedImageOutsideCrop.get());
122 121
123 MockImageResourceClient mockClient1, mockClient2, mockClient3, mockClient4; 122 MockImageResourceClient mockClient1, mockClient2, mockClient3, mockClient4;
124 cachedImageNoCrop->addClient(&mockClient1); 123 cachedImageNoCrop->addClient(&mockClient1);
125 cachedImageInteriorCrop->addClient(&mockClient2); 124 cachedImageInteriorCrop->addClient(&mockClient2);
126 cachedImageExteriorCrop->addClient(&mockClient3); 125 cachedImageExteriorCrop->addClient(&mockClient3);
127 cachedImageOutsideCrop->addClient(&mockClient4); 126 cachedImageOutsideCrop->addClient(&mockClient4);
128 127
129 memoryCache()->add(cachedImageNoCrop.get()); 128 memoryCache()->add(cachedImageNoCrop.get());
130 memoryCache()->add(cachedImageInteriorCrop.get()); 129 memoryCache()->add(cachedImageInteriorCrop.get());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 cachedImageNoCrop->removeClient(&mockClient1); 170 cachedImageNoCrop->removeClient(&mockClient1);
172 cachedImageInteriorCrop->removeClient(&mockClient2); 171 cachedImageInteriorCrop->removeClient(&mockClient2);
173 cachedImageExteriorCrop->removeClient(&mockClient3); 172 cachedImageExteriorCrop->removeClient(&mockClient3);
174 cachedImageOutsideCrop->removeClient(&mockClient4); 173 cachedImageOutsideCrop->removeClient(&mockClient4);
175 } 174 }
176 175
177 // Verifies that ImageBitmaps constructed from HTMLImageElements hold a referenc e to the original Image if the HTMLImageElement src is changed. 176 // Verifies that ImageBitmaps constructed from HTMLImageElements hold a referenc e to the original Image if the HTMLImageElement src is changed.
178 TEST_F(ImageBitmapTest, ImageBitmapSourceChanged) 177 TEST_F(ImageBitmapTest, ImageBitmapSourceChanged)
179 { 178 {
180 RefPtrWillBeRawPtr<HTMLImageElement> image = HTMLImageElement::create(*Docum ent::create().get()); 179 RefPtrWillBeRawPtr<HTMLImageElement> image = HTMLImageElement::create(*Docum ent::create().get());
181 ResourcePtr<ImageResource> originalImageResource = new ImageResource(BitmapI mage::create(NativeImageSkia::create(m_bitmap)).get()); 180 ResourcePtr<ImageResource> originalImageResource = new ImageResource(BitmapI mage::create(m_bitmap).get());
182 image->setImageResource(originalImageResource.get()); 181 image->setImageResource(originalImageResource.get());
183 182
184 RefPtrWillBeRawPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get( ), IntRect(0, 0, m_bitmap.width(), m_bitmap.height())); 183 RefPtrWillBeRawPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get( ), IntRect(0, 0, m_bitmap.width(), m_bitmap.height()));
185 ASSERT_EQ(imageBitmap->bitmapImage().get(), originalImageResource->image()); 184 ASSERT_EQ(imageBitmap->bitmapImage().get(), originalImageResource->image());
186 185
187 ResourcePtr<ImageResource> newImageResource = new ImageResource(BitmapImage: :create(NativeImageSkia::create(m_bitmap2)).get()); 186 ResourcePtr<ImageResource> newImageResource = new ImageResource(BitmapImage: :create(m_bitmap2).get());
188 image->setImageResource(newImageResource.get()); 187 image->setImageResource(newImageResource.get());
189 188
190 // The ImageBitmap should contain the same data as the original cached image but should no longer hold a reference. 189 // The ImageBitmap should contain the same data as the original cached image but should no longer hold a reference.
191 ASSERT_NE(imageBitmap->bitmapImage().get(), originalImageResource->image()); 190 ASSERT_NE(imageBitmap->bitmapImage().get(), originalImageResource->image());
192 ASSERT_EQ(imageBitmap->bitmapImage()->nativeImageForCurrentFrame()->bitmap() .pixelRef()->pixels(), 191 SkBitmap bitmap1, bitmap2;
193 originalImageResource->image()->nativeImageForCurrentFrame()->bitmap().p ixelRef()->pixels()); 192 ASSERT_TRUE(imageBitmap->bitmapImage()->bitmapForCurrentFrame(&bitmap1));
193 ASSERT_TRUE(originalImageResource->image()->bitmapForCurrentFrame(&bitmap2)) ;
194 ASSERT_EQ(bitmap1.pixelRef()->pixels(), bitmap2.pixelRef()->pixels());
194 195
195 ASSERT_NE(imageBitmap->bitmapImage().get(), newImageResource->image()); 196 ASSERT_NE(imageBitmap->bitmapImage().get(), newImageResource->image());
196 ASSERT_NE(imageBitmap->bitmapImage()->nativeImageForCurrentFrame()->bitmap() .pixelRef()->pixels(), 197 ASSERT_TRUE(imageBitmap->bitmapImage()->bitmapForCurrentFrame(&bitmap1));
197 newImageResource->image()->nativeImageForCurrentFrame()->bitmap().pixelR ef()->pixels()); 198 ASSERT_TRUE(newImageResource->image()->bitmapForCurrentFrame(&bitmap2));
199 ASSERT_NE(bitmap1.pixelRef()->pixels(), bitmap2.pixelRef()->pixels());
198 } 200 }
199 201
200 // Verifies that ImageBitmaps constructed from ImageBitmaps hold onto their own Image. 202 // Verifies that ImageBitmaps constructed from ImageBitmaps hold onto their own Image.
201 TEST_F(ImageBitmapTest, ImageResourceLifetime) 203 TEST_F(ImageBitmapTest, ImageResourceLifetime)
202 { 204 {
203 RefPtrWillBeRawPtr<HTMLCanvasElement> canvasElement = HTMLCanvasElement::cre ate(*Document::create().get()); 205 RefPtrWillBeRawPtr<HTMLCanvasElement> canvasElement = HTMLCanvasElement::cre ate(*Document::create().get());
204 canvasElement->setHeight(40); 206 canvasElement->setHeight(40);
205 canvasElement->setWidth(40); 207 canvasElement->setWidth(40);
206 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapDerived = nullptr; 208 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapDerived = nullptr;
207 { 209 {
208 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapFromCanvas = ImageBitmap::cre ate(canvasElement.get(), IntRect(0, 0, canvasElement->width(), canvasElement->he ight())); 210 RefPtrWillBeRawPtr<ImageBitmap> imageBitmapFromCanvas = ImageBitmap::cre ate(canvasElement.get(), IntRect(0, 0, canvasElement->width(), canvasElement->he ight()));
209 imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), In tRect(0, 0, 20, 20)); 211 imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), In tRect(0, 0, 20, 20));
210 } 212 }
211 CanvasContextCreationAttributes attributes; 213 CanvasContextCreationAttributes attributes;
212 CanvasRenderingContext2DOrWebGLRenderingContext context; 214 CanvasRenderingContext2DOrWebGLRenderingContext context;
213 canvasElement->getContext("2d", attributes, context); 215 canvasElement->getContext("2d", attributes, context);
214 TrackExceptionState exceptionState; 216 TrackExceptionState exceptionState;
215 CanvasImageSourceUnion imageSource; 217 CanvasImageSourceUnion imageSource;
216 imageSource.setImageBitmap(imageBitmapDerived); 218 imageSource.setImageBitmap(imageBitmapDerived);
217 context.getAsCanvasRenderingContext2D()->drawImage(imageSource, 0, 0, except ionState); 219 context.getAsCanvasRenderingContext2D()->drawImage(imageSource, 0, 0, except ionState);
218 } 220 }
219 221
220 } // namespace 222 } // namespace
OLDNEW
« no previous file with comments | « Source/core/frame/ImageBitmap.cpp ('k') | Source/core/html/HTMLCanvasElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698