Chromium Code Reviews| Index: third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp |
| diff --git a/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp b/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp |
| index a915e391eab6ed432aa8c0bfe65fd0a4a7fee394..07abbb02b1f8e18cd386a093edae4ba227de0e4e 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp |
| +++ b/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp |
| @@ -40,7 +40,7 @@ |
| #include "platform/image-decoders/ImageDecoder.h" |
| #include "platform/image-decoders/ImageFrame.h" |
| #include "platform/image-decoders/SegmentReader.h" |
| -#include "platform/image-encoders/PNGImageEncoder.h" |
| +#include "platform/image-encoders/ImageEncoder.h" |
| #include "platform/wtf/CurrentTime.h" |
| #include "platform/wtf/HexNumber.h" |
| #include "platform/wtf/PtrUtil.h" |
| @@ -145,18 +145,19 @@ std::unique_ptr<Vector<char>> PictureSnapshot::Replay(unsigned from_step, |
| std::unique_ptr<Vector<char>> base64_data = WTF::MakeUnique<Vector<char>>(); |
| Vector<char> encoded_image; |
| - sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap); |
| - if (!image) |
| - return nullptr; |
| - |
| - ImagePixelLocker pixel_locker(image, kUnpremul_SkAlphaType, |
| - kRGBA_8888_SkColorType); |
| - ImageDataBuffer image_data( |
| - IntSize(image->width(), image->height()), |
| - static_cast<const unsigned char*>(pixel_locker.Pixels())); |
| - if (!PNGImageEncoder::Encode( |
| - image_data, reinterpret_cast<Vector<unsigned char>*>(&encoded_image))) |
| + SkPixmap src; |
| + bool peekResult = bitmap.peekPixels(&src); |
| + DCHECK(peekResult); |
| + |
| + SkPngEncoder::Options options; |
|
scroggo_chromium
2017/05/22 13:35:04
Both LoggingCanvas.cpp and this one use the same v
msarett1
2017/05/22 15:33:56
Arguably kIgnore should be the default - but I'm t
|
| + options.fFilterFlags = SkPngEncoder::FilterFlag::kSub; |
| + options.fZLibLevel = 3; |
| + options.fUnpremulBehavior = SkTransferFunctionBehavior::kIgnore; |
| + if (!ImageEncoder::Encode( |
| + reinterpret_cast<Vector<unsigned char>*>(&encoded_image), src, |
| + options)) { |
| return nullptr; |
| + } |
| Base64Encode(encoded_image, *base64_data); |
| return base64_data; |