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

Unified Diff: third_party/WebKit/Source/core/frame/ImageBitmap.cpp

Issue 1423513005: Reland of: Make Imagebitmap Transferable (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix vector pre-allocation issue Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/frame/ImageBitmap.cpp
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
index 7e5b822909b7c109cac91a7f54b752d721097ace..3940320704bbe49e4033500388fb1650fb7b03c6 100644
--- a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
+++ b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
@@ -30,6 +30,7 @@ static inline IntRect normalizeRect(const IntRect& rect)
ImageBitmap::ImageBitmap(HTMLImageElement* image, const IntRect& cropRect)
{
m_image = cropImage(image->cachedImage()->image()->imageForCurrentFrame(), cropRect);
+ m_isNeutered = false;
}
ImageBitmap::ImageBitmap(HTMLVideoElement* video, const IntRect& cropRect)
@@ -47,12 +48,14 @@ ImageBitmap::ImageBitmap(HTMLVideoElement* video, const IntRect& cropRect)
IntPoint dstPoint = IntPoint(std::max(0, -cropRect.x()), std::max(0, -cropRect.y()));
video->paintCurrentFrame(buffer->canvas(), IntRect(dstPoint, srcRect.size()), nullptr);
m_image = buffer->newSkImageSnapshot(PreferNoAcceleration);
+ m_isNeutered = false;
}
ImageBitmap::ImageBitmap(HTMLCanvasElement* canvas, const IntRect& cropRect)
{
ASSERT(canvas->isPaintable());
m_image = cropImage(canvas->copiedImage(BackBuffer, PreferAcceleration)->imageForCurrentFrame(), cropRect);
+ m_isNeutered = false;
}
ImageBitmap::ImageBitmap(ImageData* data, const IntRect& cropRect)
@@ -75,16 +78,32 @@ ImageBitmap::ImageBitmap(ImageData* data, const IntRect& cropRect)
dstPoint.setY(-cropRect.y());
buffer->putByteArray(Unmultiplied, data->data()->data(), data->size(), srcRect, dstPoint);
m_image = buffer->newSkImageSnapshot(PreferNoAcceleration);
+ m_isNeutered = false;
}
ImageBitmap::ImageBitmap(ImageBitmap* bitmap, const IntRect& cropRect)
{
m_image = cropImage(bitmap->skImage(), cropRect);
+ m_isNeutered = false;
}
ImageBitmap::ImageBitmap(Image* image, const IntRect& cropRect)
{
m_image = cropImage(image->imageForCurrentFrame(), cropRect);
+ m_isNeutered = false;
+}
+
+ImageBitmap::ImageBitmap(PassRefPtr<SkImage> image)
+{
+ m_image = image;
+ m_isNeutered = false;
+}
+
+PassRefPtr<SkImage> ImageBitmap::transfer()
+{
+ ASSERT(!isNeutered());
+ m_isNeutered = true;
+ return m_image.release();
}
ImageBitmap::~ImageBitmap()
@@ -127,6 +146,11 @@ PassRefPtrWillBeRawPtr<ImageBitmap> ImageBitmap::create(Image* image, const IntR
return adoptRefWillBeNoop(new ImageBitmap(image, normalizedCropRect));
}
+PassRefPtrWillBeRawPtr<ImageBitmap> ImageBitmap::create(PassRefPtr<SkImage> image)
+{
+ return adoptRefWillBeNoop(new ImageBitmap(image));
+}
+
PassRefPtr<SkImage> ImageBitmap::cropImage(PassRefPtr<SkImage> image, const IntRect& cropRect)
{
ASSERT(image);

Powered by Google App Engine
This is Rietveld 408576698