| 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 86600c029a2e977cc5a5404e250adb764c7fb184..f27e390cba8237ec7a507ead66481662a8d7c75f 100644
|
| --- a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
|
| +++ b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
|
| @@ -139,13 +139,13 @@ static PassRefPtr<Uint8Array> copySkImageData(SkImage* input, const SkImageInfo&
|
| return dstPixels;
|
| }
|
|
|
| -static PassRefPtr<SkImage> newSkImageFromRaster(const SkImageInfo& info, PassRefPtr<Uint8Array> imagePixels, size_t imageRowBytes)
|
| +static sk_sp<SkImage> newSkImageFromRaster(const SkImageInfo& info, PassRefPtr<Uint8Array> imagePixels, size_t imageRowBytes)
|
| {
|
| SkPixmap pixmap(info, imagePixels->data(), imageRowBytes);
|
| - return fromSkSp(SkImage::MakeFromRaster(pixmap, [](const void*, void* pixels)
|
| + return SkImage::MakeFromRaster(pixmap, [](const void*, void* pixels)
|
| {
|
| static_cast<Uint8Array*>(pixels)->deref();
|
| - }, imagePixels.leakRef()));
|
| + }, imagePixels.leakRef());
|
| }
|
|
|
| static void swizzleImageData(unsigned char* srcAddr, size_t height, size_t bytesPerRow, bool flipY)
|
| @@ -172,7 +172,7 @@ static void swizzleImageData(unsigned char* srcAddr, size_t height, size_t bytes
|
| }
|
| }
|
|
|
| -static PassRefPtr<SkImage> flipSkImageVertically(SkImage* input, AlphaDisposition alphaOp)
|
| +static sk_sp<SkImage> flipSkImageVertically(SkImage* input, AlphaDisposition alphaOp)
|
| {
|
| size_t width = static_cast<size_t>(input->width());
|
| size_t height = static_cast<size_t>(input->height());
|
| @@ -190,7 +190,7 @@ static PassRefPtr<SkImage> flipSkImageVertically(SkImage* input, AlphaDispositio
|
| return newSkImageFromRaster(info, std::move(imagePixels), imageRowBytes);
|
| }
|
|
|
| -static PassRefPtr<SkImage> premulSkImageToUnPremul(SkImage* input)
|
| +static sk_sp<SkImage> premulSkImageToUnPremul(SkImage* input)
|
| {
|
| SkImageInfo info = SkImageInfo::Make(input->width(), input->height(), kN32_SkColorType, kUnpremul_SkAlphaType);
|
| RefPtr<Uint8Array> dstPixels = copySkImageData(input, info);
|
| @@ -199,7 +199,7 @@ static PassRefPtr<SkImage> premulSkImageToUnPremul(SkImage* input)
|
| return newSkImageFromRaster(info, std::move(dstPixels), static_cast<size_t>(input->width()) * info.bytesPerPixel());
|
| }
|
|
|
| -static PassRefPtr<SkImage> unPremulSkImageToPremul(SkImage* input)
|
| +static sk_sp<SkImage> unPremulSkImageToPremul(SkImage* input)
|
| {
|
| SkImageInfo info = SkImageInfo::Make(input->width(), input->height(), kN32_SkColorType, kPremul_SkAlphaType);
|
| RefPtr<Uint8Array> dstPixels = copySkImageData(input, info);
|
| @@ -208,7 +208,7 @@ static PassRefPtr<SkImage> unPremulSkImageToPremul(SkImage* input)
|
| return newSkImageFromRaster(info, std::move(dstPixels), static_cast<size_t>(input->width()) * info.bytesPerPixel());
|
| }
|
|
|
| -PassRefPtr<SkImage> ImageBitmap::getSkImageFromDecoder(std::unique_ptr<ImageDecoder> decoder)
|
| +sk_sp<SkImage> ImageBitmap::getSkImageFromDecoder(std::unique_ptr<ImageDecoder> decoder)
|
| {
|
| if (!decoder->frameCount())
|
| return nullptr;
|
| @@ -218,7 +218,7 @@ PassRefPtr<SkImage> ImageBitmap::getSkImageFromDecoder(std::unique_ptr<ImageDeco
|
| SkBitmap bitmap = frame->bitmap();
|
| if (!frameIsValid(bitmap))
|
| return nullptr;
|
| - return fromSkSp(SkImage::MakeFromBitmap(bitmap));
|
| + return SkImage::MakeFromBitmap(bitmap);
|
| }
|
|
|
| bool ImageBitmap::isResizeOptionValid(const ImageBitmapOptions& options, ExceptionState& exceptionState)
|
| @@ -260,7 +260,7 @@ static PassRefPtr<StaticBitmapImage> cropImage(Image* image, const ParsedOptions
|
| return StaticBitmapImage::create(newSkImageFromRaster(info, std::move(dstPixels), static_cast<size_t>(info.width()) * info.bytesPerPixel()));
|
| }
|
|
|
| - RefPtr<SkImage> skiaImage = image->imageForCurrentFrame();
|
| + sk_sp<SkImage> skiaImage = image->imageForCurrentFrame();
|
| // Attempt to get raw unpremultiplied image data, executed only when skiaImage is premultiplied.
|
| if ((((!parsedOptions.premultiplyAlpha && !skiaImage->isOpaque()) || !skiaImage) && image->data() && imageFormat == PremultiplyAlpha) || colorSpaceOp == ImageDecoder::GammaAndColorProfileIgnored) {
|
| std::unique_ptr<ImageDecoder> decoder(ImageDecoder::create(
|
| @@ -275,7 +275,7 @@ static PassRefPtr<StaticBitmapImage> cropImage(Image* image, const ParsedOptions
|
| }
|
|
|
| if (parsedOptions.cropRect == srcRect && !parsedOptions.shouldScaleInput) {
|
| - RefPtr<SkImage> croppedSkImage = fromSkSp(skiaImage->makeSubset(srcRect));
|
| + sk_sp<SkImage> croppedSkImage = skiaImage->makeSubset(srcRect);
|
| if (parsedOptions.flipY)
|
| return StaticBitmapImage::create(flipSkImageVertically(croppedSkImage.get(), parsedOptions.premultiplyAlpha ? PremultiplyAlpha : DontPremultiplyAlpha));
|
| // Special case: The first parameter image is unpremul but we need to turn it into premul.
|
| @@ -283,14 +283,14 @@ static PassRefPtr<StaticBitmapImage> cropImage(Image* image, const ParsedOptions
|
| return StaticBitmapImage::create(unPremulSkImageToPremul(croppedSkImage.get()));
|
| // Call preroll to trigger image decoding.
|
| croppedSkImage->preroll();
|
| - return StaticBitmapImage::create(croppedSkImage.release());
|
| + return StaticBitmapImage::create(std::move(croppedSkImage));
|
| }
|
|
|
| sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(parsedOptions.resizeWidth, parsedOptions.resizeHeight);
|
| if (!surface)
|
| return nullptr;
|
| if (srcRect.isEmpty())
|
| - return StaticBitmapImage::create(fromSkSp(surface->makeImageSnapshot()));
|
| + return StaticBitmapImage::create(surface->makeImageSnapshot());
|
|
|
| SkScalar dstLeft = std::min(0, -parsedOptions.cropRect.x());
|
| SkScalar dstTop = std::min(0, -parsedOptions.cropRect.y());
|
| @@ -307,16 +307,16 @@ static PassRefPtr<StaticBitmapImage> cropImage(Image* image, const ParsedOptions
|
| SkRect drawDstRect = SkRect::MakeXYWH(0, 0, parsedOptions.resizeWidth, parsedOptions.resizeHeight);
|
| SkPaint paint;
|
| paint.setFilterQuality(parsedOptions.resizeQuality);
|
| - surface->getCanvas()->drawImageRect(skiaImage.get(), drawSrcRect, drawDstRect, &paint);
|
| + surface->getCanvas()->drawImageRect(skiaImage, drawSrcRect, drawDstRect, &paint);
|
| } else {
|
| - surface->getCanvas()->drawImage(skiaImage.get(), dstLeft, dstTop);
|
| + surface->getCanvas()->drawImage(skiaImage, dstLeft, dstTop);
|
| }
|
| - skiaImage = fromSkSp(surface->makeImageSnapshot());
|
| + skiaImage = surface->makeImageSnapshot();
|
|
|
| if (parsedOptions.premultiplyAlpha) {
|
| if (imageFormat == DontPremultiplyAlpha)
|
| return StaticBitmapImage::create(unPremulSkImageToPremul(skiaImage.get()));
|
| - return StaticBitmapImage::create(skiaImage.release());
|
| + return StaticBitmapImage::create(std::move(skiaImage));
|
| }
|
| return StaticBitmapImage::create(premulSkImageToUnPremul(skiaImage.get()));
|
| }
|
| @@ -336,12 +336,12 @@ ImageBitmap::ImageBitmap(HTMLImageElement* image, Optional<IntRect> cropRect, Do
|
| return;
|
| // In the case where the source image is lazy-decoded, m_image may not be in
|
| // a decoded state, we trigger it here.
|
| - RefPtr<SkImage> skImage = m_image->imageForCurrentFrame();
|
| + sk_sp<SkImage> skImage = m_image->imageForCurrentFrame();
|
| SkPixmap pixmap;
|
| if (!skImage->isTextureBacked() && !skImage->peekPixels(&pixmap)) {
|
| sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(skImage->width(), skImage->height());
|
| - surface->getCanvas()->drawImage(skImage.get(), 0, 0);
|
| - m_image = StaticBitmapImage::create(fromSkSp(surface->makeImageSnapshot()));
|
| + surface->getCanvas()->drawImage(skImage, 0, 0);
|
| + m_image = StaticBitmapImage::create(surface->makeImageSnapshot());
|
| }
|
| if (!m_image)
|
| return;
|
| @@ -380,12 +380,12 @@ ImageBitmap::ImageBitmap(HTMLVideoElement* video, Optional<IntRect> cropRect, Do
|
| }
|
| video->paintCurrentFrame(buffer->canvas(), IntRect(dstPoint, dstSize), parsedOptions.shouldScaleInput ? &paint : nullptr);
|
|
|
| - RefPtr<SkImage> skiaImage = buffer->newSkImageSnapshot(PreferNoAcceleration, SnapshotReasonUnknown);
|
| + sk_sp<SkImage> skiaImage = buffer->newSkImageSnapshot(PreferNoAcceleration, SnapshotReasonUnknown);
|
| if (!parsedOptions.premultiplyAlpha)
|
| skiaImage = premulSkImageToUnPremul(skiaImage.get());
|
| if (!skiaImage)
|
| return;
|
| - m_image = StaticBitmapImage::create(skiaImage.release());
|
| + m_image = StaticBitmapImage::create(std::move(skiaImage));
|
| m_image->setOriginClean(!video->wouldTaintOrigin(document->getSecurityOrigin()));
|
| m_image->setPremultiplied(parsedOptions.premultiplyAlpha);
|
| }
|
| @@ -419,14 +419,14 @@ ImageBitmap::ImageBitmap(HTMLCanvasElement* canvas, Optional<IntRect> cropRect,
|
| ImageBitmap::ImageBitmap(std::unique_ptr<uint8_t[]> data, uint32_t width, uint32_t height, bool isImageBitmapPremultiplied, bool isImageBitmapOriginClean)
|
| {
|
| SkImageInfo info = SkImageInfo::MakeN32(width, height, isImageBitmapPremultiplied ? kPremul_SkAlphaType : kUnpremul_SkAlphaType);
|
| - m_image = StaticBitmapImage::create(fromSkSp(SkImage::MakeRasterCopy(SkPixmap(info, data.get(), info.bytesPerPixel() * width))));
|
| + m_image = StaticBitmapImage::create(SkImage::MakeRasterCopy(SkPixmap(info, data.get(), info.bytesPerPixel() * width)));
|
| if (!m_image)
|
| return;
|
| m_image->setPremultiplied(isImageBitmapPremultiplied);
|
| m_image->setOriginClean(isImageBitmapOriginClean);
|
| }
|
|
|
| -static PassRefPtr<SkImage> scaleSkImage(PassRefPtr<SkImage> skImage, unsigned resizeWidth, unsigned resizeHeight, SkFilterQuality resizeQuality)
|
| +static sk_sp<SkImage> scaleSkImage(sk_sp<SkImage> skImage, unsigned resizeWidth, unsigned resizeHeight, SkFilterQuality resizeQuality)
|
| {
|
| SkImageInfo resizedInfo = SkImageInfo::Make(resizeWidth, resizeHeight, kN32_SkColorType, kUnpremul_SkAlphaType);
|
| RefPtr<ArrayBuffer> dstBuffer = ArrayBuffer::createOrNull(resizeWidth * resizeHeight, resizedInfo.bytesPerPixel());
|
| @@ -435,10 +435,10 @@ static PassRefPtr<SkImage> scaleSkImage(PassRefPtr<SkImage> skImage, unsigned re
|
| RefPtr<Uint8Array> resizedPixels = Uint8Array::create(dstBuffer, 0, dstBuffer->byteLength());
|
| SkPixmap pixmap(resizedInfo, resizedPixels->data(), static_cast<size_t>(resizeWidth) * resizedInfo.bytesPerPixel());
|
| skImage->scalePixels(pixmap, resizeQuality);
|
| - return fromSkSp(SkImage::MakeFromRaster(pixmap, [](const void*, void* pixels)
|
| + return SkImage::MakeFromRaster(pixmap, [](const void*, void* pixels)
|
| {
|
| static_cast<Uint8Array*>(pixels)->deref();
|
| - }, resizedPixels.release().leakRef()));
|
| + }, resizedPixels.release().leakRef());
|
| }
|
|
|
| ImageBitmap::ImageBitmap(ImageData* data, Optional<IntRect> cropRect, const ImageBitmapOptions& options)
|
| @@ -459,10 +459,10 @@ ImageBitmap::ImageBitmap(ImageData* data, Optional<IntRect> cropRect, const Imag
|
| size_t bytesPerPixel = static_cast<size_t>(info.bytesPerPixel());
|
| size_t srcPixelBytesPerRow = bytesPerPixel * data->size().width();
|
| size_t dstPixelBytesPerRow = bytesPerPixel * parsedOptions.cropRect.width();
|
| - RefPtr<SkImage> skImage;
|
| + sk_sp<SkImage> skImage;
|
| if (parsedOptions.cropRect == IntRect(IntPoint(), data->size())) {
|
| swizzleImageData(srcAddr, data->size().height(), srcPixelBytesPerRow, parsedOptions.flipY);
|
| - skImage = fromSkSp(SkImage::MakeRasterCopy(SkPixmap(info, srcAddr, dstPixelBytesPerRow)));
|
| + skImage = SkImage::MakeRasterCopy(SkPixmap(info, srcAddr, dstPixelBytesPerRow));
|
| // restore the original ImageData
|
| swizzleImageData(srcAddr, data->size().height(), srcPixelBytesPerRow, parsedOptions.flipY);
|
| } else {
|
| @@ -531,7 +531,7 @@ ImageBitmap::ImageBitmap(ImageData* data, Optional<IntRect> cropRect, const Imag
|
| if (parsedOptions.cropRect.y() < 0)
|
| dstPoint.setY(-parsedOptions.cropRect.y());
|
| buffer->putByteArray(Unmultiplied, data->data()->data(), data->size(), srcRect, dstPoint);
|
| - RefPtr<SkImage> skImage = buffer->newSkImageSnapshot(PreferNoAcceleration, SnapshotReasonUnknown);
|
| + sk_sp<SkImage> skImage = buffer->newSkImageSnapshot(PreferNoAcceleration, SnapshotReasonUnknown);
|
| if (parsedOptions.flipY)
|
| skImage = flipSkImageVertically(skImage.get(), PremultiplyAlpha);
|
| if (!skImage)
|
| @@ -543,10 +543,10 @@ ImageBitmap::ImageBitmap(ImageData* data, Optional<IntRect> cropRect, const Imag
|
| SkPaint paint;
|
| paint.setFilterQuality(parsedOptions.resizeQuality);
|
| SkRect dstDrawRect = SkRect::MakeWH(parsedOptions.resizeWidth, parsedOptions.resizeHeight);
|
| - surface->getCanvas()->drawImageRect(skImage.get(), dstDrawRect, &paint);
|
| - skImage = fromSkSp(surface->makeImageSnapshot());
|
| + surface->getCanvas()->drawImageRect(skImage, dstDrawRect, &paint);
|
| + skImage = surface->makeImageSnapshot();
|
| }
|
| - m_image = StaticBitmapImage::create(skImage);
|
| + m_image = StaticBitmapImage::create(std::move(skImage));
|
| }
|
|
|
| ImageBitmap::ImageBitmap(ImageBitmap* bitmap, Optional<IntRect> cropRect, const ImageBitmapOptions& options)
|
| @@ -648,7 +648,7 @@ void ImageBitmap::close()
|
| // static
|
| ImageBitmap* ImageBitmap::take(ScriptPromiseResolver*, sk_sp<SkImage> image)
|
| {
|
| - return ImageBitmap::create(StaticBitmapImage::create(fromSkSp(image)));
|
| + return ImageBitmap::create(StaticBitmapImage::create(std::move(image)));
|
| }
|
|
|
| PassRefPtr<Uint8Array> ImageBitmap::copyBitmapData(AlphaDisposition alphaOp, DataColorFormat format)
|
|
|