Title: [190938] releases/WebKitGTK/webkit-2.10/Source
Revision
190938
Author
[email protected]
Date
2015-10-13 02:35:51 -0700 (Tue, 13 Oct 2015)

Log Message

Merge r190124 - Make it more obvious when using an unaccelerated image buffer, and fix a few callers who do
https://bugs.webkit.org/show_bug.cgi?id=149428

Reviewed by Simon Fraser and Darin Adler.

* platform/graphics/ImageBuffer.cpp:
(WebCore::ImageBuffer::createCompatibleBuffer):
* platform/graphics/ImageBuffer.h:
(WebCore::ImageBuffer::create):
Make the RenderingMode parameter to ImageBuffer::create non-optional.

* platform/graphics/GraphicsContext.h:
(WebCore::GraphicsContext::renderingMode):
* platform/graphics/GraphicsTypes.h:
Add renderingMode() getter so that every caller doesn't need to do the conversion to RenderingMode.

* css/CSSFilterImageValue.cpp:
(WebCore::CSSFilterImageValue::image):
* html/canvas/WebGLRenderingContextBase.cpp:
(WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
* rendering/shapes/Shape.cpp:
(WebCore::Shape::createRasterShape):
* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
* platform/graphics/cg/ImageBufferCG.cpp:
(WebCore::ImageBuffer::putByteArray):
These five callers create unconditionally unaccelerated ImageBuffers which
should probably instead respect the acceleration bit from the context
that the ImageBuffer will eventually be painted into. Bugs have been filed.

* html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::createImageBuffer):
* html/canvas/CanvasRenderingContext2D.cpp:
(WebCore::CanvasRenderingContext2D::createCompositingBuffer):
* platform/graphics/CrossfadeGeneratedImage.cpp:
(WebCore::CrossfadeGeneratedImage::drawPattern):
Adjust the argument order and remove defaults which are passed explicitly.

* page/FrameSnapshotting.cpp:
(WebCore::snapshotFrameRect):
Snapshots are (currently) meant to be taken without accelerated drawing.
Make this explicit.

* platform/graphics/BitmapImage.cpp:
(WebCore::BitmapImage::drawPattern):
Make use of createCompatibleBuffer. This caller was previously creating
an unconditionally unaccelerated context!

* platform/graphics/NamedImageGeneratedImage.cpp:
(WebCore::NamedImageGeneratedImage::drawPattern):
Remove a comment.

* platform/graphics/ShadowBlur.cpp:
(WebCore::ScratchBuffer::getScratchBuffer):
ShadowBlur is only used with unaccelerated contexts, so it's OK to hardcode Unaccelerated here.

* platform/graphics/filters/FilterEffect.cpp:
(WebCore::FilterEffect::asImageBuffer):
(WebCore::FilterEffect::createImageBufferResult):
Flip the order of the arguments.

(WebCore::FilterEffect::openCLImageToImageBuffer):
This caller was previously creating an unaccelerated buffer; instead, match the destination buffer.

* rendering/FilterEffectRenderer.cpp:
(WebCore::FilterEffectRenderer::allocateBackingStoreIfNeeded):
Adjust the argument order and remove defaults which are passed explicitly.

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::calculateClipRects):
Get rid of the unneeded renderingMode local, and factor out retrieval of Frame.

* rendering/svg/RenderSVGResourceClipper.cpp:
(WebCore::RenderSVGResourceClipper::applyClippingToContext):
* rendering/svg/RenderSVGResourceMasker.cpp:
(WebCore::RenderSVGResourceMasker::applyResource):
These two callers are unconditionally creating unaccelerated buffers,
and changing this to match the destination context seems to actually
break things. This needs further investigation.

* rendering/svg/RenderSVGResourceGradient.cpp:
(WebCore::createMaskAndSwapContextForTextGradient):
This caller was previously creating an unaccelerated buffer; instead, match the destination buffer.

* rendering/svg/RenderSVGResourcePattern.cpp:
(WebCore::RenderSVGResourcePattern::buildPattern):
Make use of renderingMode().

* rendering/svg/SVGRenderingContext.cpp:
(WebCore::SVGRenderingContext::createImageBuffer):
Adjust the argument order.

* svg/graphics/SVGImage.cpp:
(WebCore::SVGImage::nativeImageForCurrentFrame):

* WebCoreSupport/WebContextMenuClient.mm:
(WebContextMenuClient::imageForCurrentSharingServicePickerItem):

* Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
(WebKit::ThreadSafeCoordinatedSurface::create):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/ChangeLog	2015-10-13 09:35:51 UTC (rev 190938)
@@ -1,3 +1,100 @@
+2015-09-22  Tim Horton  <[email protected]>
+
+        Make it more obvious when using an unaccelerated image buffer, and fix a few callers who do
+        https://bugs.webkit.org/show_bug.cgi?id=149428
+
+        Reviewed by Simon Fraser and Darin Adler.
+
+        * platform/graphics/ImageBuffer.cpp:
+        (WebCore::ImageBuffer::createCompatibleBuffer):
+        * platform/graphics/ImageBuffer.h:
+        (WebCore::ImageBuffer::create):
+        Make the RenderingMode parameter to ImageBuffer::create non-optional.
+
+        * platform/graphics/GraphicsContext.h:
+        (WebCore::GraphicsContext::renderingMode):
+        * platform/graphics/GraphicsTypes.h:
+        Add renderingMode() getter so that every caller doesn't need to do the conversion to RenderingMode.
+
+        * css/CSSFilterImageValue.cpp:
+        (WebCore::CSSFilterImageValue::image):
+        * html/canvas/WebGLRenderingContextBase.cpp:
+        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
+        * rendering/shapes/Shape.cpp:
+        (WebCore::Shape::createRasterShape):
+        * html/shadow/MediaControlElements.cpp:
+        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
+        * platform/graphics/cg/ImageBufferCG.cpp:
+        (WebCore::ImageBuffer::putByteArray):
+        These five callers create unconditionally unaccelerated ImageBuffers which
+        should probably instead respect the acceleration bit from the context
+        that the ImageBuffer will eventually be painted into. Bugs have been filed.
+
+        * html/HTMLCanvasElement.cpp:
+        (WebCore::HTMLCanvasElement::createImageBuffer):
+        * html/canvas/CanvasRenderingContext2D.cpp:
+        (WebCore::CanvasRenderingContext2D::createCompositingBuffer):
+        * platform/graphics/CrossfadeGeneratedImage.cpp:
+        (WebCore::CrossfadeGeneratedImage::drawPattern):
+        Adjust the argument order and remove defaults which are passed explicitly.
+
+        * page/FrameSnapshotting.cpp:
+        (WebCore::snapshotFrameRect):
+        Snapshots are (currently) meant to be taken without accelerated drawing.
+        Make this explicit.
+
+        * platform/graphics/BitmapImage.cpp:
+        (WebCore::BitmapImage::drawPattern):
+        Make use of createCompatibleBuffer. This caller was previously creating
+        an unconditionally unaccelerated context!
+
+        * platform/graphics/NamedImageGeneratedImage.cpp:
+        (WebCore::NamedImageGeneratedImage::drawPattern):
+        Remove a comment.
+
+        * platform/graphics/ShadowBlur.cpp:
+        (WebCore::ScratchBuffer::getScratchBuffer):
+        ShadowBlur is only used with unaccelerated contexts, so it's OK to hardcode Unaccelerated here.
+
+        * platform/graphics/filters/FilterEffect.cpp:
+        (WebCore::FilterEffect::asImageBuffer):
+        (WebCore::FilterEffect::createImageBufferResult):
+        Flip the order of the arguments.
+
+        (WebCore::FilterEffect::openCLImageToImageBuffer):
+        This caller was previously creating an unaccelerated buffer; instead, match the destination buffer.
+
+        * rendering/FilterEffectRenderer.cpp:
+        (WebCore::FilterEffectRenderer::allocateBackingStoreIfNeeded):
+        Adjust the argument order and remove defaults which are passed explicitly.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::calculateClipRects):
+        Get rid of the unneeded renderingMode local, and factor out retrieval of Frame.
+
+        * rendering/svg/RenderSVGResourceClipper.cpp:
+        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
+        * rendering/svg/RenderSVGResourceMasker.cpp:
+        (WebCore::RenderSVGResourceMasker::applyResource):
+        These two callers are unconditionally creating unaccelerated buffers,
+        and changing this to match the destination context seems to actually
+        break things. This needs further investigation.
+
+        * rendering/svg/RenderSVGResourceGradient.cpp:
+        (WebCore::createMaskAndSwapContextForTextGradient):
+        This caller was previously creating an unaccelerated buffer; instead, match the destination buffer.
+
+        * rendering/svg/RenderSVGResourcePattern.cpp:
+        (WebCore::RenderSVGResourcePattern::buildPattern):
+        Make use of renderingMode().
+
+        * rendering/svg/SVGRenderingContext.cpp:
+        (WebCore::SVGRenderingContext::createImageBuffer):
+        Adjust the argument order.
+
+        * svg/graphics/SVGImage.cpp:
+        (WebCore::SVGImage::nativeImageForCurrentFrame):
+
 2015-09-22  sangdeug.kim  <[email protected]>
 
         CurrentTime on mediaController is set as 0 when playback is completed.

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/css/CSSFilterImageValue.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/css/CSSFilterImageValue.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/css/CSSFilterImageValue.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -120,7 +120,8 @@
         return Image::nullImage();
 
     // Transform Image into ImageBuffer.
-    std::unique_ptr<ImageBuffer> texture = ImageBuffer::create(size);
+    // FIXME (149424): This buffer should not be unconditionally unaccelerated.
+    std::unique_ptr<ImageBuffer> texture = ImageBuffer::create(size, Unaccelerated);
     if (!texture)
         return Image::nullImage();
     texture->context()->drawImage(image, ColorSpaceDeviceRGB, IntPoint());

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/html/HTMLCanvasElement.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/html/HTMLCanvasElement.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/html/HTMLCanvasElement.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -577,7 +577,7 @@
         return;
 
     RenderingMode renderingMode = shouldAccelerate(bufferSize) ? Accelerated : Unaccelerated;
-    m_imageBuffer = ImageBuffer::create(size(), 1, ColorSpaceDeviceRGB, renderingMode);
+    m_imageBuffer = ImageBuffer::create(size(), renderingMode);
     if (!m_imageBuffer)
         return;
     m_imageBuffer->context()->setShadowsIgnoreTransforms(true);

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -1684,8 +1684,7 @@
 
 std::unique_ptr<ImageBuffer> CanvasRenderingContext2D::createCompositingBuffer(const IntRect& bufferRect)
 {
-    RenderingMode renderMode = isAccelerated() ? Accelerated : Unaccelerated;
-    return ImageBuffer::create(bufferRect.size(), 1, ColorSpaceDeviceRGB, renderMode);
+    return ImageBuffer::create(bufferRect.size(), isAccelerated() ? Accelerated : Unaccelerated);
 }
 
 void CanvasRenderingContext2D::compositeBuffer(ImageBuffer* buffer, const IntRect& bufferRect, CompositeOperator op)

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -4880,7 +4880,8 @@
         return buf;
     }
 
-    std::unique_ptr<ImageBuffer> temp = ImageBuffer::create(size, 1);
+    // FIXME (149423): Should this ImageBuffer be unconditionally unaccelerated?
+    std::unique_ptr<ImageBuffer> temp = ImageBuffer::create(size, Unaccelerated);
     if (!temp)
         return nullptr;
     i = std::min(m_capacity - 1, i);

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/html/shadow/MediaControlElements.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/html/shadow/MediaControlElements.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/html/shadow/MediaControlElements.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -1378,7 +1378,8 @@
 
     IntRect paintingRect = IntRect(IntPoint(), layer->size());
 
-    std::unique_ptr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), deviceScaleFactor, ColorSpaceDeviceRGB));
+    // FIXME (149422): This buffer should not be unconditionally unaccelerated.
+    std::unique_ptr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), Unaccelerated, deviceScaleFactor));
     if (!buffer)
         return nullptr;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/page/FrameSnapshotting.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/page/FrameSnapshotting.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/page/FrameSnapshotting.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -99,7 +99,7 @@
     if (frame.settings().delegatesPageScaling())
         scaleFactor *= frame.page()->pageScaleFactor();
 
-    std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(imageRect.size(), scaleFactor, ColorSpaceDeviceRGB);
+    std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(imageRect.size(), Unaccelerated, scaleFactor);
     if (!buffer)
         return nullptr;
     buffer->context()->translate(-imageRect.x(), -imageRect.y());

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/BitmapImage.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/BitmapImage.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/BitmapImage.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -616,7 +616,7 @@
         return;
     }
     if (!m_cachedImage) {
-        std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(expandedIntSize(tileRect.size()));
+        std::unique_ptr<ImageBuffer> buffer = ctxt->createCompatibleBuffer(expandedIntSize(tileRect.size()));
         if (!buffer)
             return;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/CrossfadeGeneratedImage.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/CrossfadeGeneratedImage.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/CrossfadeGeneratedImage.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -97,7 +97,7 @@
 
 void CrossfadeGeneratedImage::drawPattern(GraphicsContext* context, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator compositeOp, const FloatRect& dstRect, BlendMode blendMode)
 {
-    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(size(), 1, ColorSpaceDeviceRGB, context->isAcceleratedContext() ? Accelerated : Unaccelerated);
+    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(size(), context->renderingMode());
     if (!imageBuffer)
         return;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/GraphicsContext.h (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/GraphicsContext.h	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/GraphicsContext.h	2015-10-13 09:35:51 UTC (rev 190938)
@@ -32,6 +32,7 @@
 #include "FloatRect.h"
 #include "FontCascade.h"
 #include "Gradient.h"
+#include "GraphicsTypes.h"
 #include "Image.h"
 #include "ImageOrientation.h"
 #include "Path.h"
@@ -270,6 +271,7 @@
         WEBCORE_EXPORT void setIsAcceleratedContext(bool);
 #endif
         bool isAcceleratedContext() const;
+        RenderingMode renderingMode() const { return isAcceleratedContext() ? Accelerated : Unaccelerated; }
 
         WEBCORE_EXPORT void save();
         WEBCORE_EXPORT void restore();

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/GraphicsTypes.h (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/GraphicsTypes.h	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/GraphicsTypes.h	2015-10-13 09:35:51 UTC (rev 190938)
@@ -84,6 +84,12 @@
     
     enum TextAlign { StartTextAlign, EndTextAlign, LeftTextAlign, CenterTextAlign, RightTextAlign };
 
+    enum RenderingMode {
+        Unaccelerated,
+        UnacceleratedNonPlatformBuffer, // Use plain memory allocation rather than platform API to allocate backing store.
+        Accelerated
+    };
+
     String compositeOperatorName(CompositeOperator, BlendMode);
     bool parseBlendMode(const String&, BlendMode&);
     bool parseCompositeAndBlendOperator(const String&, CompositeOperator&, BlendMode&);

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ImageBuffer.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ImageBuffer.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ImageBuffer.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -160,7 +160,7 @@
 
 std::unique_ptr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, const GraphicsContext* context, bool)
 {
-    return create(size, resolutionScale, colorSpace, context->isAcceleratedContext() ? Accelerated : Unaccelerated);
+    return create(size, context->renderingMode(), resolutionScale, colorSpace);
 }
 
 }

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ImageBuffer.h (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ImageBuffer.h	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ImageBuffer.h	2015-10-13 09:35:51 UTC (rev 190938)
@@ -55,12 +55,6 @@
     Unmultiplied
 };
 
-enum RenderingMode {
-    Unaccelerated,
-    UnacceleratedNonPlatformBuffer, // Use plain memory allocation rather than platform API to allocate backing store.
-    Accelerated
-};
-
 enum BackingStoreCopy {
     CopyBackingStore, // Guarantee subsequent draws don't affect the copy.
     DontCopyBackingStore // Subsequent draws may affect the copy.
@@ -75,7 +69,7 @@
     WTF_MAKE_NONCOPYABLE(ImageBuffer); WTF_MAKE_FAST_ALLOCATED;
 public:
     // Will return a null pointer on allocation failure.
-    static std::unique_ptr<ImageBuffer> create(const FloatSize& size, float resolutionScale = 1, ColorSpace colorSpace = ColorSpaceDeviceRGB, RenderingMode renderingMode = Unaccelerated)
+    static std::unique_ptr<ImageBuffer> create(const FloatSize& size, RenderingMode renderingMode, float resolutionScale = 1, ColorSpace colorSpace = ColorSpaceDeviceRGB)
     {
         bool success = false;
         std::unique_ptr<ImageBuffer> buffer(new ImageBuffer(size, resolutionScale, colorSpace, renderingMode, success));

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/NamedImageGeneratedImage.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/NamedImageGeneratedImage.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/NamedImageGeneratedImage.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -63,7 +63,6 @@
 void NamedImageGeneratedImage::drawPattern(GraphicsContext* context, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator compositeOp, const FloatRect& dstRect, BlendMode blendMode)
 {
 #if USE(NEW_THEME)
-//    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(size(), 1, ColorSpaceDeviceRGB, context->isAcceleratedContext() ? Accelerated : Unaccelerated);
     std::unique_ptr<ImageBuffer> imageBuffer = context->createCompatibleBuffer(size(), true);
     if (!imageBuffer)
         return;

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ShadowBlur.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ShadowBlur.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/ShadowBlur.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -79,7 +79,9 @@
         IntSize roundedSize(roundUpToMultipleOf32(size.width()), roundUpToMultipleOf32(size.height()));
 
         clearScratchBuffer();
-        m_imageBuffer = ImageBuffer::create(roundedSize, 1);
+
+        // ShadowBlur is not used with accelerated drawing, so it's OK to make an unconditionally unaccelerated buffer.
+        m_imageBuffer = ImageBuffer::create(roundedSize, Unaccelerated, 1);
         return m_imageBuffer.get();
     }
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -322,7 +322,8 @@
 #if USE(IOSURFACE_CANVAS_BACKING_STORE)
     // Make a copy of the source to ensure the bits don't change before being drawn
     IntSize sourceCopySize(sourceRect.width(), sourceRect.height());
-    std::unique_ptr<ImageBuffer> sourceCopy = ImageBuffer::create(sourceCopySize, 1, ColorSpaceDeviceRGB, Unaccelerated);
+    // FIXME (149431): Should this ImageBuffer be unconditionally unaccelerated? Making it match the context seems to break putData().
+    std::unique_ptr<ImageBuffer> sourceCopy = ImageBuffer::create(sourceCopySize, Unaccelerated, 1, ColorSpaceDeviceRGB);
     if (!sourceCopy)
         return;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/filters/FilterEffect.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/filters/FilterEffect.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/filters/FilterEffect.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -276,7 +276,7 @@
     if (m_openCLImageResult)
         return openCLImageToImageBuffer();
 #endif
-    m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), m_filter.filterScale(), m_resultColorSpace, m_filter.renderingMode());
+    m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), m_filter.renderingMode(), m_filter.filterScale(), m_resultColorSpace);
     if (!m_imageBufferResult)
         return nullptr;
 
@@ -308,7 +308,7 @@
     if (context->isFailed(clEnqueueReadImage(context->commandQueue(), m_openCLImageResult, CL_TRUE, origin, region, 0, 0, destinationPixelArray->data(), 0, 0, 0)))
         return nullptr;
 
-    m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size());
+    m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), m_filter.renderingMode());
     if (!m_imageBufferResult)
         return nullptr;
 
@@ -462,7 +462,7 @@
         return nullptr;
 
     FloatSize clampedSize = ImageBuffer::clampedSize(m_absolutePaintRect.size());
-    m_imageBufferResult = ImageBuffer::create(clampedSize, m_filter.filterScale(), m_resultColorSpace, m_filter.renderingMode());
+    m_imageBufferResult = ImageBuffer::create(clampedSize, m_filter.renderingMode(), m_filter.filterScale(), m_resultColorSpace);
     if (!m_imageBufferResult)
         return nullptr;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -35,7 +35,9 @@
 
 void BitmapTexture::updateContents(TextureMapper* textureMapper, GraphicsLayer* sourceLayer, const IntRect& targetRect, const IntPoint& offset, UpdateContentsFlag updateContentsFlag)
 {
-    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(targetRect.size());
+    // Making an unconditionally unaccelerated buffer here is OK because this code
+    // isn't used by any platforms that respect the accelerated bit.
+    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(targetRect.size(), Unaccelerated);
 
     if (!imageBuffer)
         return;

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/FilterEffectRenderer.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/FilterEffectRenderer.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/FilterEffectRenderer.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -323,7 +323,7 @@
     if (!m_graphicsBufferAttached) {
         IntSize logicalSize(m_sourceDrawingRegion.width(), m_sourceDrawingRegion.height());
         if (!sourceImage() || sourceImage()->logicalSize() != logicalSize)
-            setSourceImage(ImageBuffer::create(logicalSize, filterScale(), ColorSpaceDeviceRGB, renderingMode()));
+            setSourceImage(ImageBuffer::create(logicalSize, renderingMode(), filterScale()));
         m_graphicsBufferAttached = true;
     }
 }

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderLayer.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderLayer.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/RenderLayer.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -6887,17 +6887,17 @@
     }
     
     FilterInfo& filterInfo = FilterInfo::get(*this);
+    Frame& frame = renderer().frame();
     if (!filterInfo.renderer()) {
         RefPtr<FilterEffectRenderer> filterRenderer = FilterEffectRenderer::create();
-        filterRenderer->setFilterScale(renderer().frame().page()->deviceScaleFactor());
-        RenderingMode renderingMode = renderer().frame().settings().acceleratedFiltersEnabled() ? Accelerated : Unaccelerated;
-        filterRenderer->setRenderingMode(renderingMode);
+        filterRenderer->setFilterScale(frame.page()->deviceScaleFactor());
+        filterRenderer->setRenderingMode(frame.settings().acceleratedFiltersEnabled() ? Accelerated : Unaccelerated);
         filterInfo.setRenderer(WTF::move(filterRenderer));
         
         // We can optimize away code paths in other places if we know that there are no software filters.
         renderer().view().setHasSoftwareFilters(true);
-    } else if (filterInfo.renderer()->filterScale() != renderer().frame().page()->deviceScaleFactor()) {
-        filterInfo.renderer()->setFilterScale(renderer().frame().page()->deviceScaleFactor());
+    } else if (filterInfo.renderer()->filterScale() != frame.page()->deviceScaleFactor()) {
+        filterInfo.renderer()->setFilterScale(frame.page()->deviceScaleFactor());
         filterInfo.renderer()->clearIntermediateResults();
     }
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/shapes/Shape.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/shapes/Shape.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/shapes/Shape.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -179,7 +179,8 @@
     IntRect imageRect = snappedIntRect(imageR);
     IntRect marginRect = snappedIntRect(marginR);
     auto intervals = std::make_unique<RasterShapeIntervals>(marginRect.height(), -marginRect.y());
-    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(imageRect.size());
+    // FIXME (149420): This buffer should not be unconditionally unaccelerated.
+    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(imageRect.size(), Unaccelerated);
 
     if (imageBuffer) {
         GraphicsContext* graphicsContext = imageBuffer->context();

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -141,6 +141,7 @@
     AffineTransform absoluteTransform = SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem(renderer);
 
     if (shouldCreateClipperMaskImage && !repaintRect.isEmpty()) {
+        // FIXME (149469): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks nested clipping, though.
         clipperMaskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, ColorSpaceDeviceRGB, Unaccelerated);
         if (!clipperMaskImage)
             return false;

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -61,7 +61,7 @@
     AffineTransform absoluteTransform = SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem(*textRootBlock);
     FloatRect repaintRect = textRootBlock->repaintRectInLocalCoordinates();
 
-    auto maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, ColorSpaceDeviceRGB, Unaccelerated);
+    auto maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, ColorSpaceDeviceRGB, context->renderingMode());
     if (!maskImage)
         return false;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -69,6 +69,7 @@
     if (!maskerData->maskImage && !repaintRect.isEmpty()) {
         const SVGRenderStyle& svgStyle = style().svgStyle();
         ColorSpace colorSpace = svgStyle.colorInterpolation() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB;
+        // FIXME (149470): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks alpha masking, though.
         maskerData->maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, colorSpace, Unaccelerated);
         if (!maskerData->maskImage)
             return false;

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -94,7 +94,7 @@
         static_cast<float>(m_attributes.patternTransform().yScale()));
 
     // Build tile image.
-    auto tileImage = createTileImage(m_attributes, tileBoundaries, absoluteTileBoundaries, tileImageTransform, clampedAbsoluteTileBoundaries, context.isAcceleratedContext() ? Accelerated : Unaccelerated);
+    auto tileImage = createTileImage(m_attributes, tileBoundaries, absoluteTileBoundaries, tileImageTransform, clampedAbsoluteTileBoundaries, context.renderingMode());
     if (!tileImage)
         return nullptr;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/SVGRenderingContext.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/SVGRenderingContext.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/rendering/svg/SVGRenderingContext.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -247,7 +247,7 @@
     FloatSize scale;
     FloatSize clampedSize = ImageBuffer::clampedSize(paintRect.size(), scale);
 
-    auto imageBuffer = ImageBuffer::create(clampedSize, 1, colorSpace, renderingMode);
+    auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, 1, colorSpace);
     if (!imageBuffer)
         return nullptr;
 
@@ -270,7 +270,7 @@
     if (clampedSize.isEmpty())
         return nullptr;
 
-    auto imageBuffer = ImageBuffer::create(clampedSize, 1, colorSpace, renderingMode);
+    auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, 1, colorSpace);
     if (!imageBuffer)
         return nullptr;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebCore/svg/graphics/SVGImage.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebCore/svg/graphics/SVGImage.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebCore/svg/graphics/SVGImage.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -173,7 +173,8 @@
     if (!m_page)
         return 0;
 
-    std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(size(), 1);
+    // Cairo does not use the accelerated drawing flag, so it's OK to make an unconditionally unaccelerated buffer.
+    std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(size(), Unaccelerated);
     if (!buffer) // failed to allocate image
         return 0;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebKit/mac/ChangeLog (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebKit/mac/ChangeLog	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebKit/mac/ChangeLog	2015-10-13 09:35:51 UTC (rev 190938)
@@ -1,3 +1,13 @@
+2015-09-22  Tim Horton  <[email protected]>
+
+        Make it more obvious when using an unaccelerated image buffer, and fix a few callers who do
+        https://bugs.webkit.org/show_bug.cgi?id=149428
+
+        Reviewed by Simon Fraser and Darin Adler.
+
+        * WebCoreSupport/WebContextMenuClient.mm:
+        (WebContextMenuClient::imageForCurrentSharingServicePickerItem):
+
 2015-08-17  Filip Pizlo  <[email protected]>
 
         Replace all remaining uses of WTF::Mutex with WTF::Lock

Modified: releases/WebKitGTK/webkit-2.10/Source/WebKit/mac/WebCoreSupport/WebContextMenuClient.mm (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebKit/mac/WebCoreSupport/WebContextMenuClient.mm	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebKit/mac/WebCoreSupport/WebContextMenuClient.mm	2015-10-13 09:35:51 UTC (rev 190938)
@@ -465,7 +465,8 @@
     if (!clientFloatRectForNode(*node, rect))
         return nil;
 
-    std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(rect.size());
+    // This is effectively a snapshot, and will be painted in an unaccelerated fashion in line with FrameSnapshotting.
+    std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(rect.size(), Unaccelerated);
     if (!buffer)
         return nil;
 

Modified: releases/WebKitGTK/webkit-2.10/Source/WebKit2/ChangeLog (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebKit2/ChangeLog	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebKit2/ChangeLog	2015-10-13 09:35:51 UTC (rev 190938)
@@ -1,3 +1,13 @@
+2015-09-22  Tim Horton  <[email protected]>
+
+        Make it more obvious when using an unaccelerated image buffer, and fix a few callers who do
+        https://bugs.webkit.org/show_bug.cgi?id=149428
+
+        Reviewed by Simon Fraser and Darin Adler.
+
+        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
+        (WebKit::ThreadSafeCoordinatedSurface::create):
+
 2015-09-22  Andreas Kling  <[email protected]>
 
         [WK2][NetworkCache] New entry bodies remain in dirty memory after being written to disk.

Modified: releases/WebKitGTK/webkit-2.10/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp (190937 => 190938)


--- releases/WebKitGTK/webkit-2.10/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp	2015-10-13 09:19:22 UTC (rev 190937)
+++ releases/WebKitGTK/webkit-2.10/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp	2015-10-13 09:35:51 UTC (rev 190938)
@@ -37,7 +37,9 @@
 
 Ref<ThreadSafeCoordinatedSurface> ThreadSafeCoordinatedSurface::create(const IntSize& size, CoordinatedSurface::Flags flags)
 {
-    return adoptRef(*new ThreadSafeCoordinatedSurface(size, flags, ImageBuffer::create(size)));
+    // Making an unconditionally unaccelerated buffer here is OK because this code
+    // isn't used by any platforms that respect the accelerated bit.
+    return adoptRef(*new ThreadSafeCoordinatedSurface(size, flags, ImageBuffer::create(size, Unaccelerated)));
 }
 
 Ref<ThreadSafeCoordinatedSurface> ThreadSafeCoordinatedSurface::create(const IntSize& size, CoordinatedSurface::Flags flags, std::unique_ptr<ImageBuffer> buffer)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to