| Index: Source/core/svg/graphics/SVGImage.cpp
|
| diff --git a/Source/core/svg/graphics/SVGImage.cpp b/Source/core/svg/graphics/SVGImage.cpp
|
| index 479856650550cc63ce863e0e9d7955ba30f7fce8..98c8fd62e2b869b091bf6b2c40bcc8096606479b 100644
|
| --- a/Source/core/svg/graphics/SVGImage.cpp
|
| +++ b/Source/core/svg/graphics/SVGImage.cpp
|
| @@ -48,6 +48,7 @@
|
| #include "platform/LengthFunctions.h"
|
| #include "platform/geometry/IntRect.h"
|
| #include "platform/graphics/ImageObserver.h"
|
| +#include "platform/graphics/UnacceleratedImageBufferSurface.h"
|
| #include "wtf/PassRefPtr.h"
|
|
|
| namespace WebCore {
|
| @@ -192,14 +193,15 @@ PassRefPtr<NativeImageSkia> SVGImage::nativeImageForCurrentFrame()
|
| if (!m_page)
|
| return 0;
|
|
|
| - OwnPtr<ImageBuffer> buffer = ImageBuffer::create(size(), 1);
|
| - if (!buffer) // failed to allocate image
|
| + OwnPtr<ImageBufferSurface> surface = adoptPtr(new UnacceleratedImageBufferSurface(size()));
|
| + if (!surface->isValid())
|
| return 0;
|
| + ImageBuffer buffer(surface.release());
|
|
|
| - drawForContainer(buffer->context(), size(), 1, rect(), rect(), CompositeSourceOver, blink::WebBlendModeNormal);
|
| + drawForContainer(buffer.context(), size(), 1, rect(), rect(), CompositeSourceOver, blink::WebBlendModeNormal);
|
|
|
| // FIXME: WK(Bug 113657): We should use DontCopyBackingStore here.
|
| - return buffer->copyImage(CopyBackingStore)->nativeImageForCurrentFrame();
|
| + return buffer.copyImage(CopyBackingStore)->nativeImageForCurrentFrame();
|
| }
|
|
|
| void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize containerSize, float zoom, const FloatRect& srcRect,
|
| @@ -220,11 +222,12 @@ void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
|
| FloatRect imageBufferSize = zoomedContainerRect;
|
| imageBufferSize.scale(imageBufferScale.width(), imageBufferScale.height());
|
|
|
| - OwnPtr<ImageBuffer> buffer = ImageBuffer::create(expandedIntSize(imageBufferSize.size()), 1);
|
| - if (!buffer) // Failed to allocate buffer.
|
| + OwnPtr<ImageBufferSurface> surface = adoptPtr(new UnacceleratedImageBufferSurface(expandedIntSize(imageBufferSize.size())));
|
| + if (!surface->isValid())
|
| return;
|
| - drawForContainer(buffer->context(), containerSize, zoom, imageBufferSize, zoomedContainerRect, CompositeSourceOver, blink::WebBlendModeNormal);
|
| - RefPtr<Image> image = buffer->copyImage(DontCopyBackingStore, Unscaled);
|
| + ImageBuffer buffer(surface.release());
|
| + drawForContainer(buffer.context(), containerSize, zoom, imageBufferSize, zoomedContainerRect, CompositeSourceOver, blink::WebBlendModeNormal);
|
| + RefPtr<Image> image = buffer.copyImage(DontCopyBackingStore, Unscaled);
|
|
|
| // Adjust the source rect and transform due to the image buffer's scaling.
|
| FloatRect scaledSrcRect = srcRect;
|
|
|