Changeset 102088 in webkit
- Timestamp:
- Dec 5, 2011, 8:16:28 PM (15 years ago)
- Location:
- trunk/Source
- Files:
-
- 21 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/page/Settings.cpp (modified) (1 diff)
-
WebCore/page/Settings.h (modified) (2 diffs)
-
WebCore/platform/graphics/filters/FETile.cpp (modified) (1 diff)
-
WebCore/platform/graphics/filters/Filter.h (modified) (3 diffs)
-
WebCore/platform/graphics/filters/FilterEffect.cpp (modified) (2 diffs)
-
WebCore/platform/graphics/skia/ImageBufferSkia.cpp (modified) (1 diff)
-
WebCore/rendering/svg/RenderSVGResourceClipper.cpp (modified) (1 diff)
-
WebCore/rendering/svg/RenderSVGResourceFilter.cpp (modified) (3 diffs)
-
WebCore/rendering/svg/RenderSVGResourceGradient.cpp (modified) (1 diff)
-
WebCore/rendering/svg/RenderSVGResourceMasker.cpp (modified) (1 diff)
-
WebCore/rendering/svg/RenderSVGResourcePattern.cpp (modified) (1 diff)
-
WebCore/rendering/svg/SVGImageBufferTools.cpp (modified) (2 diffs)
-
WebCore/rendering/svg/SVGImageBufferTools.h (modified) (1 diff)
-
WebCore/testing/Internals.cpp (modified) (1 diff)
-
WebCore/testing/Internals.h (modified) (1 diff)
-
WebCore/testing/Internals.idl (modified) (1 diff)
-
WebKit/chromium/ChangeLog (modified) (1 diff)
-
WebKit/chromium/public/WebSettings.h (modified) (1 diff)
-
WebKit/chromium/src/WebSettingsImpl.cpp (modified) (1 diff)
-
WebKit/chromium/src/WebSettingsImpl.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r102086 r102088 1 2011-12-05 Stephen White <senorblanco@chromium.org> 2 3 Allow the ImageBuffers used by SVG filters to be accelerated 4 https://bugs.webkit.org/show_bug.cgi?id=73842 5 6 Reviewed by Kenneth Russell. 7 8 Regressions covered by existing SVG tests; new functionality to be 9 tested by the API exposed on Internals. 10 11 * page/Settings.cpp: 12 (WebCore::Settings::Settings): 13 * page/Settings.h: 14 (WebCore::Settings::setAcceleratedFiltersEnabled): 15 (WebCore::Settings::acceleratedFiltersEnabled): 16 * platform/graphics/filters/FETile.cpp: 17 (WebCore::FETile::platformApplySoftware): 18 * platform/graphics/filters/Filter.h: 19 (WebCore::Filter::Filter): 20 (WebCore::Filter::renderingMode): 21 (WebCore::Filter::setRenderingMode): 22 * platform/graphics/filters/FilterEffect.cpp: 23 (WebCore::FilterEffect::asImageBuffer): 24 (WebCore::FilterEffect::createImageBufferResult): 25 * platform/graphics/skia/ImageBufferSkia.cpp: 26 (WebCore::ImageBuffer::platformTransformColorSpace): 27 * rendering/svg/RenderSVGResourceClipper.cpp: 28 (WebCore::RenderSVGResourceClipper::applyClippingToContext): 29 * rendering/svg/RenderSVGResourceFilter.cpp: 30 (WebCore::RenderSVGResourceFilter::applyResource): 31 * rendering/svg/RenderSVGResourceMasker.cpp: 32 (WebCore::RenderSVGResourceMasker::applyResource): 33 * rendering/svg/RenderSVGResourcePattern.cpp: 34 (WebCore::RenderSVGResourcePattern::createTileImage): 35 * rendering/svg/SVGImageBufferTools.cpp: 36 (WebCore::SVGImageBufferTools::createImageBuffer): 37 * rendering/svg/SVGImageBufferTools.h: 38 * testing/Internals.cpp: 39 (WebCore::Internals::setAcceleratedFiltersEnabled): 40 * testing/Internals.h: 41 * testing/Internals.idl: 42 1 43 2011-12-05 Benjamin Poulain <bpoulain@apple.com> 2 44 -
trunk/Source/WebCore/page/Settings.cpp
r101977 r102088 171 171 , m_canvasUsesAcceleratedDrawing(false) 172 172 , m_acceleratedDrawingEnabled(false) 173 , m_acceleratedFiltersEnabled(false) 173 174 // FIXME: This should really be disabled by default as it makes platforms that don't support the feature download files 174 175 // they can't use by. Leaving enabled for now to not change existing behavior. -
trunk/Source/WebCore/page/Settings.h
r101977 r102088 301 301 void setAcceleratedDrawingEnabled(bool enabled) { m_acceleratedDrawingEnabled = enabled; } 302 302 bool acceleratedDrawingEnabled() const { return m_acceleratedDrawingEnabled; } 303 304 void setAcceleratedFiltersEnabled(bool enabled) { m_acceleratedFiltersEnabled = enabled; } 305 bool acceleratedFiltersEnabled() const { return m_acceleratedFiltersEnabled; } 303 306 304 307 void setAcceleratedCompositingEnabled(bool); … … 574 577 bool m_canvasUsesAcceleratedDrawing : 1; 575 578 bool m_acceleratedDrawingEnabled : 1; 579 bool m_acceleratedFiltersEnabled : 1; 576 580 bool m_downloadableBinaryFontsEnabled : 1; 577 581 bool m_xssAuditorEnabled : 1; -
trunk/Source/WebCore/platform/graphics/filters/FETile.cpp
r97853 r102088 68 68 69 69 OwnPtr<ImageBuffer> tileImage; 70 if (!SVGImageBufferTools::createImageBuffer(tileRect, tileRect, tileImage, ColorSpaceDeviceRGB ))70 if (!SVGImageBufferTools::createImageBuffer(tileRect, tileRect, tileImage, ColorSpaceDeviceRGB, filter()->renderingMode())) 71 71 return; 72 72 -
trunk/Source/WebCore/platform/graphics/filters/Filter.h
r99854 r102088 33 33 class Filter : public RefCounted<Filter> { 34 34 public: 35 Filter() : m_renderingMode(Unaccelerated) { } 35 36 virtual ~Filter() { } 36 37 … … 40 41 FloatSize filterResolution() const { return m_filterResolution; } 41 42 void setFilterResolution(const FloatSize& filterResolution) { m_filterResolution = filterResolution; } 43 44 RenderingMode renderingMode() const { return m_renderingMode; } 45 void setRenderingMode(RenderingMode renderingMode) { m_renderingMode = renderingMode; } 42 46 43 47 virtual float applyHorizontalScale(float value) const { return value * m_filterResolution.width(); } … … 52 56 OwnPtr<ImageBuffer> m_sourceImage; 53 57 FloatSize m_filterResolution; 58 RenderingMode m_renderingMode; 54 59 }; 55 60 -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
r97853 r102088 119 119 if (m_imageBufferResult) 120 120 return m_imageBufferResult.get(); 121 m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), ColorSpaceLinearRGB );121 m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), ColorSpaceLinearRGB, m_filter->renderingMode()); 122 122 IntRect destinationRect(IntPoint(), m_absolutePaintRect.size()); 123 123 if (m_premultipliedImageResult) … … 256 256 if (m_absolutePaintRect.isEmpty()) 257 257 return 0; 258 m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), ColorSpaceLinearRGB );258 m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), ColorSpaceLinearRGB, m_filter->renderingMode()); 259 259 if (!m_imageBufferResult) 260 260 return 0; -
trunk/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
r101325 r102088 179 179 void ImageBuffer::platformTransformColorSpace(const Vector<int>& lookUpTable) 180 180 { 181 // FIXME: Disable color space conversions on accelerated canvases (for now). 182 if (m_data.m_platformContext.isAccelerated()) 183 return; 184 181 185 const SkBitmap& bitmap = *context()->platformContext()->bitmap(); 182 186 if (bitmap.isNull()) -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
r101517 r102088 180 180 181 181 if (shouldCreateClipData && !clampedAbsoluteTargetRect.isEmpty()) { 182 if (!SVGImageBufferTools::createImageBuffer(absoluteTargetRect, clampedAbsoluteTargetRect, clipperData->clipMaskImage, ColorSpaceDeviceRGB ))182 if (!SVGImageBufferTools::createImageBuffer(absoluteTargetRect, clampedAbsoluteTargetRect, clipperData->clipMaskImage, ColorSpaceDeviceRGB, Unaccelerated)) 183 183 return false; 184 184 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
r101517 r102088 36 36 #include "ImageData.h" 37 37 #include "IntRect.h" 38 #include "Page.h" 38 39 #include "RenderSVGResource.h" 39 40 #include "RenderSVGResourceFilterPrimitive.h" 41 #include "Settings.h" 40 42 #include "SVGElement.h" 41 43 #include "SVGFilter.h" … … 230 232 231 233 OwnPtr<ImageBuffer> sourceGraphic; 232 if (!SVGImageBufferTools::createImageBuffer(absoluteDrawingRegion, absoluteDrawingRegion, sourceGraphic, ColorSpaceLinearRGB)) { 234 RenderingMode renderingMode = object->document()->page()->settings()->acceleratedFiltersEnabled() ? Accelerated : Unaccelerated; 235 if (!SVGImageBufferTools::createImageBuffer(absoluteDrawingRegion, absoluteDrawingRegion, sourceGraphic, ColorSpaceLinearRGB, renderingMode)) { 233 236 ASSERT(!m_filter.contains(object)); 234 237 filterData->savedContext = context; … … 237 240 } 238 241 242 // Set the rendering mode from the page's settings. 243 filterData->filter->setRenderingMode(renderingMode); 244 239 245 GraphicsContext* sourceGraphicContext = sourceGraphic->context(); 240 246 ASSERT(sourceGraphicContext); -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
r101517 r102088 93 93 94 94 OwnPtr<ImageBuffer> maskImage; 95 if (!SVGImageBufferTools::createImageBuffer(absoluteTargetRect, clampedAbsoluteTargetRect, maskImage, ColorSpaceDeviceRGB ))95 if (!SVGImageBufferTools::createImageBuffer(absoluteTargetRect, clampedAbsoluteTargetRect, maskImage, ColorSpaceDeviceRGB, Unaccelerated)) 96 96 return false; 97 97 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
r99929 r102088 107 107 ASSERT(svgStyle); 108 108 ColorSpace colorSpace = svgStyle->colorInterpolation() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceDeviceRGB; 109 if (!SVGImageBufferTools::createImageBuffer(absoluteTargetRect, clampedAbsoluteTargetRect, maskerData->maskImage, colorSpace ))109 if (!SVGImageBufferTools::createImageBuffer(absoluteTargetRect, clampedAbsoluteTargetRect, maskerData->maskImage, colorSpace, Unaccelerated)) 110 110 return false; 111 111 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
r101517 r102088 253 253 OwnPtr<ImageBuffer> tileImage; 254 254 255 if (!SVGImageBufferTools::createImageBuffer(absoluteTileBoundaries, clampedAbsoluteTileBoundaries, tileImage, ColorSpaceDeviceRGB ))255 if (!SVGImageBufferTools::createImageBuffer(absoluteTileBoundaries, clampedAbsoluteTileBoundaries, tileImage, ColorSpaceDeviceRGB, Unaccelerated)) 256 256 return nullptr; 257 257 -
trunk/Source/WebCore/rendering/svg/SVGImageBufferTools.cpp
r96408 r102088 53 53 } 54 54 55 bool SVGImageBufferTools::createImageBuffer(const FloatRect& absoluteTargetRect, const FloatRect& clampedAbsoluteTargetRect, OwnPtr<ImageBuffer>& imageBuffer, ColorSpace colorSpace )55 bool SVGImageBufferTools::createImageBuffer(const FloatRect& absoluteTargetRect, const FloatRect& clampedAbsoluteTargetRect, OwnPtr<ImageBuffer>& imageBuffer, ColorSpace colorSpace, RenderingMode renderingMode) 56 56 { 57 57 IntSize imageSize(roundedImageBufferSize(clampedAbsoluteTargetRect.size())); … … 62 62 return false; 63 63 64 OwnPtr<ImageBuffer> image = ImageBuffer::create(imageSize, colorSpace );64 OwnPtr<ImageBuffer> image = ImageBuffer::create(imageSize, colorSpace, renderingMode); 65 65 if (!image) 66 66 return false; -
trunk/Source/WebCore/rendering/svg/SVGImageBufferTools.h
r96155 r102088 36 36 WTF_MAKE_NONCOPYABLE(SVGImageBufferTools); 37 37 public: 38 static bool createImageBuffer(const FloatRect& absoluteTargetRect, const FloatRect& clampedAbsoluteTargetRect, OwnPtr<ImageBuffer>&, ColorSpace );38 static bool createImageBuffer(const FloatRect& absoluteTargetRect, const FloatRect& clampedAbsoluteTargetRect, OwnPtr<ImageBuffer>&, ColorSpace, RenderingMode); 39 39 static void renderSubtreeToImageBuffer(ImageBuffer*, RenderObject*, const AffineTransform&); 40 40 static void clipToImageBuffer(GraphicsContext*, const AffineTransform& absoluteTransform, const FloatRect& clampedAbsoluteTargetRect, OwnPtr<ImageBuffer>&); -
trunk/Source/WebCore/testing/Internals.cpp
r101875 r102088 315 315 } 316 316 317 void Internals::setAcceleratedFiltersEnabled(Document* document, bool enabled, ExceptionCode& ec) 318 { 319 if (!document || !document->settings()) { 320 ec = INVALID_ACCESS_ERR; 321 return; 322 } 323 324 document->settings()->setAcceleratedFiltersEnabled(enabled); 325 } 326 317 327 void Internals::setEnableScrollAnimator(Document* document, bool enabled, ExceptionCode& ec) 318 328 { -
trunk/Source/WebCore/testing/Internals.h
r101875 r102088 80 80 void setEnableCompositingForScrollableFrames(Document*, bool enabled, ExceptionCode&); 81 81 void setAcceleratedDrawingEnabled(Document*, bool enabled, ExceptionCode&); 82 void setAcceleratedFiltersEnabled(Document*, bool enabled, ExceptionCode&); 82 83 83 84 void setEnableScrollAnimator(Document*, bool enabled, ExceptionCode&); -
trunk/Source/WebCore/testing/Internals.idl
r101875 r102088 53 53 void setEnableCompositingForScrollableFrames(in Document document, in boolean enabled) raises(DOMException); 54 54 void setAcceleratedDrawingEnabled(in Document document, in boolean enabled) raises(DOMException); 55 void setAcceleratedFiltersEnabled(in Document document, in boolean enabled) raises(DOMException); 55 56 void setEnableScrollAnimator(in Document document, in boolean enabled) raises(DOMException); 56 57 void setZoomAnimatorTransform(in Document document, in float scale, in float tx, in float ty) raises(DOMException); -
trunk/Source/WebKit/chromium/ChangeLog
r102078 r102088 1 2011-12-05 Stephen White <senorblanco@chromium.org> 2 3 Allow the ImageBuffers used by SVG filters to be accelerated 4 https://bugs.webkit.org/show_bug.cgi?id=73842 5 6 Reviewed by Kenneth Russell. 7 8 * public/WebSettings.h: 9 * src/WebSettingsImpl.cpp: 10 (WebKit::WebSettingsImpl::setAcceleratedFiltersEnabled): 11 * src/WebSettingsImpl.h: 12 1 13 2011-12-05 Adam Barth <abarth@webkit.org> 2 14 -
trunk/Source/WebKit/chromium/public/WebSettings.h
r101576 r102088 118 118 virtual void setMinimumAccelerated2dCanvasSize(int) = 0; 119 119 virtual void setAcceleratedDrawingEnabled(bool) = 0; 120 virtual void setAcceleratedFiltersEnabled(bool) = 0; 120 121 virtual void setMemoryInfoEnabled(bool) = 0; 121 122 virtual void setHyperlinkAuditingEnabled(bool) = 0; -
trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp
r102044 r102088 359 359 } 360 360 361 void WebSettingsImpl::setAcceleratedFiltersEnabled(bool enabled) 362 { 363 m_settings->setAcceleratedFiltersEnabled(enabled); 364 } 365 361 366 void WebSettingsImpl::setAccelerated2dCanvasEnabled(bool enabled) 362 367 { -
trunk/Source/WebKit/chromium/src/WebSettingsImpl.h
r101977 r102088 110 110 virtual void setMinimumAccelerated2dCanvasSize(int); 111 111 virtual void setAcceleratedDrawingEnabled(bool); 112 virtual void setAcceleratedFiltersEnabled(bool); 112 113 virtual void setMemoryInfoEnabled(bool); 113 114 virtual void setHyperlinkAuditingEnabled(bool);
Note:
See TracChangeset
for help on using the changeset viewer.