Title: [119831] trunk
Revision
119831
Author
schen...@chromium.org
Date
2012-06-08 08:01:00 -0700 (Fri, 08 Jun 2012)

Log Message

WebCore::ImageBuffer.cpp has broken color table code
https://bugs.webkit.org/show_bug.cgi?id=80321

Reviewed by Dirk Schulze.

Source/WebCore: 

The code in ImageBuffer::transformColorSpace had two problems that are
fixed by this patch.

First, it was using member variables for data
that is static constant. This is incredibly wasteful, as every
ImageBuffer that is created (and we make a lot of them) gets its own
copy of the LUT and the table is initialized again and again. The
patch replaces this with a static local, with lazy evaluation, in
the method that uses the tables.

Second, the code for filling the table was mapping 255 to 254, thus
reducing the intensity and alpha of every image it pushed through a
color transform.

Test: svg/filters/color-space-conversion.svg

* platform/graphics/ImageBuffer.cpp:
(WebCore::ImageBuffer::transformColorSpace):
* platform/graphics/ImageBuffer.h:
(ImageBuffer):

LayoutTests: 

Temporarily marking Chromium tests expected to fail as a result of this patch. And a new test.

* platform/chromium/TestExpectations:
* svg/filters/color-space-conversion.svg:
* svg/filters/color-space-conversion-expected.svg:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (119830 => 119831)


--- trunk/LayoutTests/ChangeLog	2012-06-08 14:44:04 UTC (rev 119830)
+++ trunk/LayoutTests/ChangeLog	2012-06-08 15:01:00 UTC (rev 119831)
@@ -1,3 +1,16 @@
+2012-06-08  Stephen Chenney  <schen...@chromium.org>
+
+        WebCore::ImageBuffer.cpp has broken color table code
+        https://bugs.webkit.org/show_bug.cgi?id=80321
+
+        Reviewed by Dirk Schulze.
+
+        Temporarily marking Chromium tests expected to fail as a result of this patch. And a new test.
+
+        * platform/chromium/TestExpectations:
+        * svg/filters/color-space-conversion.svg:
+        * svg/filters/color-space-conversion-expected.svg:
+
 2012-06-08  Qi Zhang  <qi.2.zh...@nokia.com>
 
         [Qt] fast/viewport/viewport-133.html fails

Modified: trunk/LayoutTests/platform/chromium/TestExpectations (119830 => 119831)


--- trunk/LayoutTests/platform/chromium/TestExpectations	2012-06-08 14:44:04 UTC (rev 119830)
+++ trunk/LayoutTests/platform/chromium/TestExpectations	2012-06-08 15:01:00 UTC (rev 119831)
@@ -1304,6 +1304,205 @@
 BUGWK85107 : svg/as-image/svg-as-relative-image-with-explicit-size.html = PASS IMAGE
 BUGWK85107 : svg/as-image/animated-svg-as-image.html = PASS IMAGE
 
+BUGWK80321 : platform/chromium/compositing/accelerated-drawing/svg-filters.html = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1-SE/filters-image-05-f.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-color-01-b.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-comptran-01-b.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-conv-01-f.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-diffuse-01-f.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-gauss-01-b.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-image-01-b.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-light-01-f.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-specular-01-f.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-tile-01-b.svg = IMAGE
+BUGWK80321 : svg/W3C-SVG-1.1/filters-turb-01-f.svg = IMAGE
+BUGWK80321 : svg/css/path-gradient-stroke-shadow.svg = IMAGE
+BUGWK80321 : svg/css/rect-gradient-stroke-shadow.svg = IMAGE
+BUGWK80321 : svg/custom/convolution-crash.svg = IMAGE
+BUGWK80321 : svg/custom/empty-merge.svg = IMAGE
+BUGWK80321 : svg/custom/feDisplacementMap-01.svg = IMAGE
+BUGWK80321 : svg/custom/grayscale-gradient-mask-2.svg = IMAGE
+BUGWK80321 : svg/custom/image-with-transform-clip-filter.svg = IMAGE
+BUGWK80321 : svg/custom/non-opaque-filters.svg = IMAGE
+BUGWK80321 : svg/custom/recursive-filter.svg = IMAGE
+BUGWK80321 : svg/custom/text-filter.svg = IMAGE
+BUGWK80321 : svg/custom/use-disappears-after-style-update.svg = IMAGE
+BUGWK80321 : svg/custom/visibility-override-filter.svg = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEBlendElement-dom-in-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-dom-amplitude-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-dom-exponent-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-dom-intercept-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-dom-offset-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-dom-slope-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-dom-tableValues-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-dom-type-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-amplitude-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-exponent-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-intercept-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-offset-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-slope-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-tableValues-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-type-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelUnitLength-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-preserveAlpha-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelUnitLength-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-preserveAlpha-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in2-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-dom-scale-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-dom-xChannelSelector-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-dom-yChannelSelector-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-in-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-in2-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-scale-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-xChannelSelector-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-yChannelSelector-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEImageElement-dom-preserveAspectRatio-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFEImageElement-svgdom-preserveAspectRatio-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-dom-in-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularConstant-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularExponent-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-dom-suraceScale-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-in-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularConstant-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularExponent-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-suraceScale-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-dom-limitingConeAngle-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtX-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtY-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtZ-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-dom-specularExponent-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-dom-x-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-dom-y-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-dom-z-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-svgdom-limitingConeAngle-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtX-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtY-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtZ-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-svgdom-specularExponent-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-svgdom-x-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-svgdom-y-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFESpotLightElement-svgdom-z-prop.html = IMAGE
+BUGWK80231 : svg/dynamic-updates/SVGFETileElement-dom-in-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETileElement-svgdom-in-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-dom-filterRes-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-dom-filterUnits-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-dom-height-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-dom-primitiveUnits-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-dom-width-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-dom-x-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-dom-y-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-filterRes-call.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-filterResX-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-filterResY-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-filterUnits-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-height-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-primitiveUnits-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-width-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-x-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterElement-svgdom-y-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-height-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-result-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-width-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-x-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-y-attr.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-height-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-result-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-width-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-x-prop.html = IMAGE
+BUGWK80321 : svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-y-prop.html = IMAGE
+BUGWK80321 : svg/filters/animate-fill.svg = IMAGE
+BUGWK80321 : svg/filters/big-sized-filter-2.svg = IMAGE
+BUGWK80321 : svg/filters/container-with-filters.svg = IMAGE
+BUGWK80321 : svg/filters/feColorMatrix-default-type.svg = IMAGE
+BUGWK80321 : svg/filters/feColorMatrix-offset.svg = IMAGE
+BUGWK80321 : svg/filters/feColorMatrix-saturate.svg = IMAGE
+BUGWK80321 : svg/filters/feColorMatrix-values.svg = IMAGE
+BUGWK80321 : svg/filters/feComposite.svg = IMAGE
+BUGWK80321 : svg/filters/feConvolveFilter-y-bounds.svg = IMAGE
+BUGWK80321 : svg/filters/feDisplacementMap.svg = IMAGE
+BUGWK80321 : svg/filters/feGaussianBlur.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-animated-transform-on-target-rect.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-multiple-targets-id-change.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-position.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-preserveAspectratio.svg = IMAGE
+BUGWK80231 : svg/filters/feImage-reference-invalidation.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-subregions-preseveAspectRatio-none-with-viewBox.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-subregions-preseveAspectRatio-none.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-subregions.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-add-to-document.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-attribute-change-with-use-indirection-2.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-attribute-change-with-use-indirection.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-attribute-change.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-changes-id.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-id-change.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-inline-style-change.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-property-change.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-reappend-to-document.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-remove-from-document.svg = IMAGE
+BUGWK80321 : svg/filters/feImage-target-style-change.svg = IMAGE
+BUGWK80321 : svg/filters/feLighting-crash.svg = IMAGE
+BUGWK80321 : svg/filters/feMerge.svg = IMAGE
+BUGWK80321 : svg/filters/feOffset.svg = IMAGE
+BUGWK80321 : svg/filters/feTile.svg = IMAGE
+BUGWK80321 : svg/filters/filter-on-tspan.svg = IMAGE
+BUGWK80321 : svg/filters/filter-placement-issue.svg = IMAGE
+BUGWK80321 : svg/filters/filter-refresh.svg = IMAGE
+BUGWK80321 : svg/filters/filter-rounding-issues.svg = IMAGE
+BUGWK80321 : svg/filters/filter-source-position.svg = IMAGE
+BUGWK80321 : svg/filters/filter-width-update.svg = IMAGE
+BUGWK80321 : svg/filters/filterRes.svg = IMAGE
+BUGWK80321 : svg/filters/filterRes1.svg = IMAGE
+BUGWK80321 : svg/filters/filterRes2.svg = IMAGE
+BUGWK80321 : svg/filters/filterRes3.svg = IMAGE
+BUGWK80321 : svg/filters/filteredImage.svg = IMAGE
+BUGWK80321 : svg/filters/parent-children-with-same-filter.svg = IMAGE
+BUGWK80321 : svg/filters/shadow-on-filter.svg = IMAGE
+BUGWK80321 : svg/filters/shadow-on-rect-with-filter.svg = IMAGE
+BUGWK80321 : svg/filters/subRegion-in-userSpace.svg = IMAGE
+BUGWK80321 : svg/filters/subRegion-one-effect.svg = IMAGE
+BUGWK80321 : svg/filters/subRegion-two-effects.svg = IMAGE
+BUGWK80321 : svg/foreignObject/filter.html = IMAGE
+BUGWK80321 : svg/repaint/filter-child-repaint.svg = IMAGE
+BUGWK80322 : svg/repaint/filter-repaint.svg = IMAGE
+
 // -----------------------------------------------------------------
 // End SVG TESTS
 // -----------------------------------------------------------------

Added: trunk/LayoutTests/svg/filters/color-space-conversion-expected.svg (0 => 119831)


--- trunk/LayoutTests/svg/filters/color-space-conversion-expected.svg	                        (rev 0)
+++ trunk/LayoutTests/svg/filters/color-space-conversion-expected.svg	2012-06-08 15:01:00 UTC (rev 119831)
@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <g>
+    <rect x="5" y="5" width="20" height="20" fill="rgb(0,0,0)"/>
+    <rect x="25" y="5" width="20" height="20" fill="rgb(102,0,0)"/>
+    <rect x="45" y="5" width="20" height="20" fill="rgb(204,0,0)"/>
+    <rect x="65" y="5" width="20" height="20" fill="rgb(255,0,0)"/>
+    <rect x="25" y="25" width="20" height="20" fill="rgb(0,102,0)"/>
+    <rect x="45" y="25" width="20" height="20" fill="rgb(0,204,0)"/>
+    <rect x="65" y="25" width="20" height="20" fill="rgb(0,255,0)"/>
+    <rect x="25" y="45" width="20" height="20" fill="rgb(0,0,102)"/>
+    <rect x="45" y="45" width="20" height="20" fill="rgb(0,0,204)"/>
+    <rect x="65" y="45" width="20" height="20" fill="rgb(0,0,255)"/>
+    <rect x="85" y="45" width="20" height="20" fill="rgb(255,255,255)"/>
+  </g>
+</svg>

Added: trunk/LayoutTests/svg/filters/color-space-conversion.svg (0 => 119831)


--- trunk/LayoutTests/svg/filters/color-space-conversion.svg	                        (rev 0)
+++ trunk/LayoutTests/svg/filters/color-space-conversion.svg	2012-06-08 15:01:00 UTC (rev 119831)
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <filter id="filter">
+      <feOffset dx="5" dy="5"/>
+    </filter>
+  </defs>
+  <g filter="url(#filter)">
+    <rect x="0" y="0" width="20" height="20" fill="rgb(0,0,0)"/>
+    <rect x="20" y="0" width="20" height="20" fill="rgb(102,0,0)"/>
+    <rect x="40" y="0" width="20" height="20" fill="rgb(204,0,0)"/>
+    <rect x="60" y="0" width="20" height="20" fill="rgb(255,0,0)"/>
+    <rect x="20" y="20" width="20" height="20" fill="rgb(0,102,0)"/>
+    <rect x="40" y="20" width="20" height="20" fill="rgb(0,204,0)"/>
+    <rect x="60" y="20" width="20" height="20" fill="rgb(0,255,0)"/>
+    <rect x="20" y="40" width="20" height="20" fill="rgb(0,0,102)"/>
+    <rect x="40" y="40" width="20" height="20" fill="rgb(0,0,204)"/>
+    <rect x="60" y="40" width="20" height="20" fill="rgb(0,0,255)"/>
+    <rect x="80" y="40" width="20" height="20" fill="rgb(255,255,255)"/>
+  </g>
+</svg>

Modified: trunk/Source/WebCore/ChangeLog (119830 => 119831)


--- trunk/Source/WebCore/ChangeLog	2012-06-08 14:44:04 UTC (rev 119830)
+++ trunk/Source/WebCore/ChangeLog	2012-06-08 15:01:00 UTC (rev 119831)
@@ -1,3 +1,31 @@
+2012-06-08  Stephen Chenney  <schen...@chromium.org>
+
+        WebCore::ImageBuffer.cpp has broken color table code
+        https://bugs.webkit.org/show_bug.cgi?id=80321
+
+        Reviewed by Dirk Schulze.
+
+        The code in ImageBuffer::transformColorSpace had two problems that are
+        fixed by this patch.
+
+        First, it was using member variables for data
+        that is static constant. This is incredibly wasteful, as every
+        ImageBuffer that is created (and we make a lot of them) gets its own
+        copy of the LUT and the table is initialized again and again. The
+        patch replaces this with a static local, with lazy evaluation, in
+        the method that uses the tables.
+
+        Second, the code for filling the table was mapping 255 to 254, thus
+        reducing the intensity and alpha of every image it pushed through a
+        color transform.
+
+        Test: svg/filters/color-space-conversion.svg
+
+        * platform/graphics/ImageBuffer.cpp:
+        (WebCore::ImageBuffer::transformColorSpace):
+        * platform/graphics/ImageBuffer.h:
+        (ImageBuffer):
+
 2012-06-08  Alexei Filippov  <alex...@chromium.org>
 
         Web Inspector: Better labels positioning on the memory pie chart

Modified: trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp (119830 => 119831)


--- trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp	2012-06-08 14:44:04 UTC (rev 119830)
+++ trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp	2012-06-08 15:01:00 UTC (rev 119831)
@@ -35,6 +35,9 @@
 #if !USE(CG)
 void ImageBuffer::transformColorSpace(ColorSpace srcColorSpace, ColorSpace dstColorSpace)
 {
+    DEFINE_STATIC_LOCAL(Vector<int>, deviceRgbLUT, ());
+    DEFINE_STATIC_LOCAL(Vector<int>, linearRgbLUT, ());
+
     if (srcColorSpace == dstColorSpace)
         return;
 
@@ -44,27 +47,27 @@
         return;
 
     if (dstColorSpace == ColorSpaceLinearRGB) {
-        if (m_linearRgbLUT.isEmpty()) {
+        if (linearRgbLUT.isEmpty()) {
             for (unsigned i = 0; i < 256; i++) {
                 float color = i  / 255.0f;
                 color = (color <= 0.04045f ? color / 12.92f : pow((color + 0.055f) / 1.055f, 2.4f));
                 color = std::max(0.0f, color);
                 color = std::min(1.0f, color);
-                m_linearRgbLUT.append(static_cast<int>(color * 255));
+                linearRgbLUT.append(static_cast<int>(round(color * 255)));
             }
         }
-        platformTransformColorSpace(m_linearRgbLUT);
+        platformTransformColorSpace(linearRgbLUT);
     } else if (dstColorSpace == ColorSpaceDeviceRGB) {
-        if (m_deviceRgbLUT.isEmpty()) {
+        if (deviceRgbLUT.isEmpty()) {
             for (unsigned i = 0; i < 256; i++) {
                 float color = i / 255.0f;
                 color = (powf(color, 1.0f / 2.4f) * 1.055f) - 0.055f;
                 color = std::max(0.0f, color);
                 color = std::min(1.0f, color);
-                m_deviceRgbLUT.append(static_cast<int>(color * 255));
+                deviceRgbLUT.append(static_cast<int>(round(color * 255)));
             }
         }
-        platformTransformColorSpace(m_deviceRgbLUT);
+        platformTransformColorSpace(deviceRgbLUT);
     }
 }
 #endif // USE(CG)

Modified: trunk/Source/WebCore/platform/graphics/ImageBuffer.h (119830 => 119831)


--- trunk/Source/WebCore/platform/graphics/ImageBuffer.h	2012-06-08 14:44:04 UTC (rev 119830)
+++ trunk/Source/WebCore/platform/graphics/ImageBuffer.h	2012-06-08 15:01:00 UTC (rev 119831)
@@ -140,11 +140,6 @@
         float m_resolutionScale;
         OwnPtr<GraphicsContext> m_context;
 
-#if !USE(CG)
-        Vector<int> m_linearRgbLUT;
-        Vector<int> m_deviceRgbLUT;
-#endif
-
         // This constructor will place its success into the given out-variable
         // so that create() knows when it should return failure.
         ImageBuffer(const IntSize&, float resolutionScale, ColorSpace, RenderingMode, DeferralMode, bool& success);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to