| Index: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
|
| index c4f61a920737688205b7a09ae86f9296d2369585..4a58361e92026a4cfbb76b1c8e0bf8d4768a2a0b 100644
|
| --- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
|
| +++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
|
| @@ -128,13 +128,6 @@ bool canCreateImageBuffer(const IntSize& size)
|
| return true;
|
| }
|
|
|
| -PassRefPtr<Image> createTransparentImage(const IntSize& size)
|
| -{
|
| - DCHECK(canCreateImageBuffer(size));
|
| - sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(size.width(), size.height());
|
| - return StaticBitmapImage::create(fromSkSp(surface->makeImageSnapshot()));
|
| -}
|
| -
|
| } // namespace
|
|
|
| inline HTMLCanvasElement::HTMLCanvasElement(Document& document)
|
| @@ -986,12 +979,12 @@ void HTMLCanvasElement::ensureUnacceleratedImageBuffer()
|
| m_didFailToCreateImageBuffer = !m_imageBuffer;
|
| }
|
|
|
| -PassRefPtr<Image> HTMLCanvasElement::copiedImage(SourceDrawingBuffer sourceBuffer, AccelerationHint hint) const
|
| +Image* HTMLCanvasElement::copiedImage(SourceDrawingBuffer sourceBuffer, AccelerationHint hint) const
|
| {
|
| if (!isPaintable())
|
| return nullptr;
|
| if (!m_context)
|
| - return createTransparentImage(size());
|
| + return ensureTransparentImage();
|
|
|
| bool needToUpdate = !m_copiedImage;
|
| // The concept of SourceDrawingBuffer is valid on only WebGL.
|
| @@ -1001,7 +994,7 @@ PassRefPtr<Image> HTMLCanvasElement::copiedImage(SourceDrawingBuffer sourceBuffe
|
| m_copiedImage = buffer()->newImageSnapshot(hint, SnapshotReasonGetCopiedImage);
|
| updateExternallyAllocatedMemory();
|
| }
|
| - return m_copiedImage;
|
| + return m_copiedImage.get();
|
| }
|
|
|
| void HTMLCanvasElement::discardImageBuffer()
|
| @@ -1073,7 +1066,7 @@ PassRefPtr<Image> HTMLCanvasElement::getSourceImageForCanvas(SourceImageStatus*
|
|
|
| if (!m_context) {
|
| *status = NormalSourceImageStatus;
|
| - return createTransparentImage(size());
|
| + return ensureTransparentImage();
|
| }
|
|
|
| if (m_context->is3d()) {
|
| @@ -1200,4 +1193,14 @@ bool HTMLCanvasElement::createSurfaceLayer()
|
| return m_surfaceLayerBridge->createSurfaceLayer(this->width(), this->height());
|
| }
|
|
|
| +Image* HTMLCanvasElement::ensureTransparentImage() const
|
| +{
|
| + if (m_transparentImage && m_transparentImage->size() == size())
|
| + return m_transparentImage.get();
|
| + DCHECK(canCreateImageBuffer(size()));
|
| + sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(size().width(), size().height());
|
| + m_transparentImage = StaticBitmapImage::create(fromSkSp(surface->makeImageSnapshot()));
|
| + return m_transparentImage.get();
|
| +}
|
| +
|
| } // namespace blink
|
|
|