[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

krit at webkit.org krit at webkit.org
Wed Dec 22 14:54:44 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit b248739a69b2089ee0f731b509b395ce7b005b0c
Author: krit at webkit.org <krit at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sun Oct 24 19:24:38 2010 +0000

    2010-10-24  Dirk Schulze  <krit at webkit.org>
    
            Reviewed by Nikolas Zimmermann.
    
            Filter example Chiseled from SVG Wow! is slow
            https://bugs.webkit.org/show_bug.cgi?id=48174
    
            Added 'using WTF::ByteArray;' at the end of ByteArray.h
    
            * wtf/ByteArray.h:
    2010-10-24  Dirk Schulze  <krit at webkit.org>
    
            Reviewed by Nikolas Zimmermann.
    
            Filter example Chiseled from SVG Wow! is slow
            https://bugs.webkit.org/show_bug.cgi?id=48174
    
            Use a pointer to the ByteArray instead of the ref counted CanvasPixelArray or ImageData directly
            to access the data for pixel manipulation on SVG Filters or SVG Masker. This is a
            performance increase since the recurring use of the -> operator can be avoided.
            FEConvolveMatrix and FELighting still need to change in a followup patch.
    
            No functionality was changed. So, no new tests.
    
            * platform/graphics/filters/FEBlend.cpp:
            (WebCore::FEBlend::apply):
            * platform/graphics/filters/FEColorMatrix.cpp:
            (WebCore::luminance):
            (WebCore::effectType):
            (WebCore::FEColorMatrix::apply):
            * platform/graphics/filters/FEComponentTransfer.cpp:
            (WebCore::FEComponentTransfer::apply):
            * platform/graphics/filters/FEComposite.cpp:
            (WebCore::arithmetic):
            (WebCore::FEComposite::apply):
            * platform/graphics/filters/FEDisplacementMap.cpp:
            (WebCore::FEDisplacementMap::apply):
            * platform/graphics/filters/FEGaussianBlur.cpp:
            (WebCore::boxBlur):
            (WebCore::FEGaussianBlur::apply):
            * platform/graphics/filters/FEMorphology.cpp:
            (WebCore::FEMorphology::apply):
            * platform/graphics/filters/FETurbulence.cpp:
            (WebCore::FETurbulence::apply):
            * rendering/RenderSVGResourceMasker.cpp:
            (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@70421 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 92e9170..e9ec875 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,3 +1,14 @@
+2010-10-24  Dirk Schulze  <krit at webkit.org>
+
+        Reviewed by Nikolas Zimmermann.
+
+        Filter example Chiseled from SVG Wow! is slow
+        https://bugs.webkit.org/show_bug.cgi?id=48174
+
+        Added 'using WTF::ByteArray;' at the end of ByteArray.h
+
+        * wtf/ByteArray.h:
+
 2010-10-24  Patrick Gansterer  <paroga at webkit.org>
 
         Reviewed by David Kilzer.
diff --git a/JavaScriptCore/wtf/ByteArray.h b/JavaScriptCore/wtf/ByteArray.h
index f4d34a4..bdec630 100644
--- a/JavaScriptCore/wtf/ByteArray.h
+++ b/JavaScriptCore/wtf/ByteArray.h
@@ -97,6 +97,8 @@ namespace WTF {
         unsigned char m_data[];
 #endif
     };
-}
+} // namespace WTF
+
+using WTF::ByteArray;
 
 #endif
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 0739527..91dda8e 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,40 @@
+2010-10-24  Dirk Schulze  <krit at webkit.org>
+
+        Reviewed by Nikolas Zimmermann.
+
+        Filter example Chiseled from SVG Wow! is slow
+        https://bugs.webkit.org/show_bug.cgi?id=48174
+
+        Use a pointer to the ByteArray instead of the ref counted CanvasPixelArray or ImageData directly
+        to access the data for pixel manipulation on SVG Filters or SVG Masker. This is a
+        performance increase since the recurring use of the -> operator can be avoided.
+        FEConvolveMatrix and FELighting still need to change in a followup patch.
+
+        No functionality was changed. So, no new tests.
+
+        * platform/graphics/filters/FEBlend.cpp:
+        (WebCore::FEBlend::apply):
+        * platform/graphics/filters/FEColorMatrix.cpp:
+        (WebCore::luminance):
+        (WebCore::effectType):
+        (WebCore::FEColorMatrix::apply):
+        * platform/graphics/filters/FEComponentTransfer.cpp:
+        (WebCore::FEComponentTransfer::apply):
+        * platform/graphics/filters/FEComposite.cpp:
+        (WebCore::arithmetic):
+        (WebCore::FEComposite::apply):
+        * platform/graphics/filters/FEDisplacementMap.cpp:
+        (WebCore::FEDisplacementMap::apply):
+        * platform/graphics/filters/FEGaussianBlur.cpp:
+        (WebCore::boxBlur):
+        (WebCore::FEGaussianBlur::apply):
+        * platform/graphics/filters/FEMorphology.cpp:
+        (WebCore::FEMorphology::apply):
+        * platform/graphics/filters/FETurbulence.cpp:
+        (WebCore::FETurbulence::apply):
+        * rendering/RenderSVGResourceMasker.cpp:
+        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
+
 2010-10-24  Pavel Feldman  <pfeldman at chromium.org>
 
         Reviewed by Timothy Hatcher.
diff --git a/WebCore/platform/graphics/filters/FEBlend.cpp b/WebCore/platform/graphics/filters/FEBlend.cpp
index 1a40027..0e82e2e 100644
--- a/WebCore/platform/graphics/filters/FEBlend.cpp
+++ b/WebCore/platform/graphics/filters/FEBlend.cpp
@@ -102,19 +102,23 @@ void FEBlend::apply(Filter* filter)
         return;
 
     IntRect effectADrawingRect = requestedRegionOfInputImageData(in->absolutePaintRect());
-    RefPtr<CanvasPixelArray> srcPixelArrayA(in->resultImage()->getPremultipliedImageData(effectADrawingRect)->data());
+    RefPtr<ImageData> srcImageDataA = in->resultImage()->getPremultipliedImageData(effectADrawingRect);
+    ByteArray* srcPixelArrayA = srcImageDataA->data()->data();
 
     IntRect effectBDrawingRect = requestedRegionOfInputImageData(in2->absolutePaintRect());
-    RefPtr<CanvasPixelArray> srcPixelArrayB(in2->resultImage()->getPremultipliedImageData(effectBDrawingRect)->data());
+    RefPtr<ImageData> srcImageDataB = in2->resultImage()->getPremultipliedImageData(effectBDrawingRect);
+    ByteArray* srcPixelArrayB = srcImageDataB->data()->data();
 
     IntRect imageRect(IntPoint(), resultImage()->size());
     RefPtr<ImageData> imageData = ImageData::create(imageRect.width(), imageRect.height());
+    ByteArray* dstPixelArray = imageData->data()->data();
 
     // Keep synchronized with BlendModeType
     static const BlendType callEffect[] = {unknown, normal, multiply, screen, darken, lighten};
 
-    ASSERT(srcPixelArrayA->length() == srcPixelArrayB->length());
-    for (unsigned pixelOffset = 0; pixelOffset < srcPixelArrayA->length(); pixelOffset += 4) {
+    unsigned pixelArrayLength = srcPixelArrayA->length();
+    ASSERT(pixelArrayLength == srcPixelArrayB->length());
+    for (unsigned pixelOffset = 0; pixelOffset < pixelArrayLength; pixelOffset += 4) {
         unsigned char alphaA = srcPixelArrayA->get(pixelOffset + 3);
         unsigned char alphaB = srcPixelArrayB->get(pixelOffset + 3);
         for (unsigned channel = 0; channel < 3; ++channel) {
@@ -122,10 +126,10 @@ void FEBlend::apply(Filter* filter)
             unsigned char colorB = srcPixelArrayB->get(pixelOffset + channel);
 
             unsigned char result = (*callEffect[m_mode])(colorA, colorB, alphaA, alphaB);
-            imageData->data()->set(pixelOffset + channel, result);
+            dstPixelArray->set(pixelOffset + channel, result);
         }
         unsigned char alphaR = 255 - ((255 - alphaA) * (255 - alphaB)) / 255;
-        imageData->data()->set(pixelOffset + 3, alphaR);
+        dstPixelArray->set(pixelOffset + 3, alphaR);
     }
 
     resultImage()->putPremultipliedImageData(imageData.get(), imageRect, IntPoint());
diff --git a/WebCore/platform/graphics/filters/FEColorMatrix.cpp b/WebCore/platform/graphics/filters/FEColorMatrix.cpp
index b41d5ad..acf7d4a 100644
--- a/WebCore/platform/graphics/filters/FEColorMatrix.cpp
+++ b/WebCore/platform/graphics/filters/FEColorMatrix.cpp
@@ -25,11 +25,10 @@
 #if ENABLE(FILTERS)
 #include "FEColorMatrix.h"
 
-#include "CanvasPixelArray.h"
 #include "Filter.h"
 #include "GraphicsContext.h"
 #include "ImageData.h"
-#include <math.h>
+
 #include <wtf/MathExtras.h>
 
 namespace WebCore {
@@ -112,25 +111,21 @@ inline void huerotate(double& red, double& green, double& blue, const float& hue
 inline void luminance(double& red, double& green, double& blue, double& alpha)
 {
     alpha = 0.2125 * red + 0.7154 * green + 0.0721 * blue;
-    red = 0.;
-    green = 0.;
-    blue = 0.;
+    red = 0;
+    green = 0;
+    blue = 0;
 }
 
 template<ColorMatrixType filterType>
-void effectType(const PassRefPtr<CanvasPixelArray>& srcPixelArray, PassRefPtr<ImageData>& imageData, const Vector<float>& values)
+void effectType(ByteArray* pixelArray, const Vector<float>& values)
 {
-    for (unsigned pixelOffset = 0; pixelOffset < srcPixelArray->length(); pixelOffset++) {
-        unsigned pixelByteOffset = pixelOffset * 4;
-
-        unsigned char r = 0, g = 0, b = 0, a = 0;
-        srcPixelArray->get(pixelByteOffset, r);
-        srcPixelArray->get(pixelByteOffset + 1, g);
-        srcPixelArray->get(pixelByteOffset + 2, b);
-        srcPixelArray->get(pixelByteOffset + 3, a);
+    unsigned pixelArrayLength = pixelArray->length();
+    for (unsigned pixelByteOffset = 0; pixelByteOffset < pixelArrayLength; pixelByteOffset += 4) {
+        double red = pixelArray->get(pixelByteOffset);
+        double green = pixelArray->get(pixelByteOffset + 1);
+        double blue = pixelArray->get(pixelByteOffset + 2);
+        double alpha = pixelArray->get(pixelByteOffset + 3);
 
-        double red = r, green = g, blue = b, alpha = a;
-        
         switch (filterType) {
             case FECOLORMATRIX_TYPE_MATRIX:
                 matrix(red, green, blue, alpha, values);
@@ -146,10 +141,10 @@ void effectType(const PassRefPtr<CanvasPixelArray>& srcPixelArray, PassRefPtr<Im
                 break;
         }
 
-        imageData->data()->set(pixelByteOffset, red);
-        imageData->data()->set(pixelByteOffset + 1, green);
-        imageData->data()->set(pixelByteOffset + 2, blue);
-        imageData->data()->set(pixelByteOffset + 3, alpha);
+        pixelArray->set(pixelByteOffset, red);
+        pixelArray->set(pixelByteOffset + 1, green);
+        pixelArray->set(pixelByteOffset + 2, blue);
+        pixelArray->set(pixelByteOffset + 3, alpha);
     }
 }
 
@@ -167,23 +162,23 @@ void FEColorMatrix::apply(Filter* filter)
     filterContext->drawImageBuffer(in->resultImage(), ColorSpaceDeviceRGB, drawingRegionOfInputImage(in->absolutePaintRect()));
 
     IntRect imageRect(IntPoint(), resultImage()->size());
-    PassRefPtr<ImageData> imageData(resultImage()->getUnmultipliedImageData(imageRect));
-    PassRefPtr<CanvasPixelArray> srcPixelArray(imageData->data());
+    RefPtr<ImageData> imageData = resultImage()->getUnmultipliedImageData(imageRect);
+    ByteArray* pixelArray = imageData->data()->data();
 
     switch (m_type) {
         case FECOLORMATRIX_TYPE_UNKNOWN:
             break;
         case FECOLORMATRIX_TYPE_MATRIX:
-            effectType<FECOLORMATRIX_TYPE_MATRIX>(srcPixelArray, imageData, m_values);
+            effectType<FECOLORMATRIX_TYPE_MATRIX>(pixelArray, m_values);
             break;
         case FECOLORMATRIX_TYPE_SATURATE: 
-            effectType<FECOLORMATRIX_TYPE_SATURATE>(srcPixelArray, imageData, m_values);
+            effectType<FECOLORMATRIX_TYPE_SATURATE>(pixelArray, m_values);
             break;
         case FECOLORMATRIX_TYPE_HUEROTATE:
-            effectType<FECOLORMATRIX_TYPE_HUEROTATE>(srcPixelArray, imageData, m_values);
+            effectType<FECOLORMATRIX_TYPE_HUEROTATE>(pixelArray, m_values);
             break;
         case FECOLORMATRIX_TYPE_LUMINANCETOALPHA:
-            effectType<FECOLORMATRIX_TYPE_LUMINANCETOALPHA>(srcPixelArray, imageData, m_values);
+            effectType<FECOLORMATRIX_TYPE_LUMINANCETOALPHA>(pixelArray, m_values);
             setIsAlphaImage(true);
             break;
     }
diff --git a/WebCore/platform/graphics/filters/FEComponentTransfer.cpp b/WebCore/platform/graphics/filters/FEComponentTransfer.cpp
index 08d0b1f..5cffac7 100644
--- a/WebCore/platform/graphics/filters/FEComponentTransfer.cpp
+++ b/WebCore/platform/graphics/filters/FEComponentTransfer.cpp
@@ -26,11 +26,11 @@
 #if ENABLE(FILTERS)
 #include "FEComponentTransfer.h"
 
-#include "CanvasPixelArray.h"
 #include "Filter.h"
 #include "GraphicsContext.h"
 #include "ImageData.h"
-#include <math.h>
+
+#include <wtf/MathExtras.h>
 
 namespace WebCore {
 
@@ -168,13 +168,14 @@ void FEComponentTransfer::apply(Filter* filter)
         (*callEffect[transferFunction[channel].type])(tables[channel], transferFunction[channel]);
 
     IntRect drawingRect = requestedRegionOfInputImageData(in->absolutePaintRect());
-    RefPtr<ImageData> imageData(in->resultImage()->getUnmultipliedImageData(drawingRect));
-    CanvasPixelArray* srcPixelArray(imageData->data());
+    RefPtr<ImageData> imageData = in->resultImage()->getUnmultipliedImageData(drawingRect);
+    ByteArray* pixelArray = imageData->data()->data();
 
-    for (unsigned pixelOffset = 0; pixelOffset < srcPixelArray->length(); pixelOffset += 4) {
+    unsigned pixelArrayLength = pixelArray->length();
+    for (unsigned pixelOffset = 0; pixelOffset < pixelArrayLength; pixelOffset += 4) {
         for (unsigned channel = 0; channel < 4; ++channel) {
-            unsigned char c = srcPixelArray->get(pixelOffset + channel);
-            imageData->data()->set(pixelOffset + channel, tables[channel][c]);
+            unsigned char c = pixelArray->get(pixelOffset + channel);
+            pixelArray->set(pixelOffset + channel, tables[channel][c]);
         }
     }
 
diff --git a/WebCore/platform/graphics/filters/FEComposite.cpp b/WebCore/platform/graphics/filters/FEComposite.cpp
index 2326966..aad71e3 100644
--- a/WebCore/platform/graphics/filters/FEComposite.cpp
+++ b/WebCore/platform/graphics/filters/FEComposite.cpp
@@ -26,7 +26,6 @@
 #if ENABLE(FILTERS)
 #include "FEComposite.h"
 
-#include "CanvasPixelArray.h"
 #include "Filter.h"
 #include "GraphicsContext.h"
 #include "ImageData.h"
@@ -98,12 +97,13 @@ void FEComposite::setK4(float k4)
     m_k4 = k4;
 }
 
-inline void arithmetic(const RefPtr<CanvasPixelArray>& srcPixelArrayA, CanvasPixelArray*& srcPixelArrayB,
+inline void arithmetic(const ByteArray* srcPixelArrayA, ByteArray* srcPixelArrayB,
                        float k1, float k2, float k3, float k4)
 {
     float scaledK1 = k1 / 255.f;
     float scaledK4 = k4 * 255.f;
-    for (unsigned pixelOffset = 0; pixelOffset < srcPixelArrayA->length(); pixelOffset += 4) {
+    unsigned pixelArrayLength = srcPixelArrayA->length();
+    for (unsigned pixelOffset = 0; pixelOffset < pixelArrayLength; pixelOffset += 4) {
         for (unsigned channel = 0; channel < 4; ++channel) {
             unsigned char i1 = srcPixelArrayA->get(pixelOffset + channel);
             unsigned char i2 = srcPixelArrayB->get(pixelOffset + channel);
@@ -174,11 +174,12 @@ void FEComposite::apply(Filter* filter)
         break;
     case FECOMPOSITE_OPERATOR_ARITHMETIC: {
         IntRect effectADrawingRect = requestedRegionOfInputImageData(in->absolutePaintRect());
-        RefPtr<CanvasPixelArray> srcPixelArrayA(in->resultImage()->getPremultipliedImageData(effectADrawingRect)->data());
+        RefPtr<ImageData> srcImageData = in->resultImage()->getPremultipliedImageData(effectADrawingRect);
+        ByteArray* srcPixelArrayA = srcImageData->data()->data();
 
         IntRect effectBDrawingRect = requestedRegionOfInputImageData(in2->absolutePaintRect());
-        RefPtr<ImageData> imageData(in2->resultImage()->getPremultipliedImageData(effectBDrawingRect));
-        CanvasPixelArray* srcPixelArrayB(imageData->data());
+        RefPtr<ImageData> imageData = in2->resultImage()->getPremultipliedImageData(effectBDrawingRect);
+        ByteArray* srcPixelArrayB = imageData->data()->data();
 
         arithmetic(srcPixelArrayA, srcPixelArrayB, m_k1, m_k2, m_k3, m_k4);
         resultImage()->putPremultipliedImageData(imageData.get(), IntRect(IntPoint(), resultImage()->size()), IntPoint());
diff --git a/WebCore/platform/graphics/filters/FEDisplacementMap.cpp b/WebCore/platform/graphics/filters/FEDisplacementMap.cpp
index 0c53241..4c62ca7 100644
--- a/WebCore/platform/graphics/filters/FEDisplacementMap.cpp
+++ b/WebCore/platform/graphics/filters/FEDisplacementMap.cpp
@@ -26,7 +26,6 @@
 #if ENABLE(FILTERS)
 #include "FEDisplacementMap.h"
 
-#include "CanvasPixelArray.h"
 #include "Filter.h"
 #include "GraphicsContext.h"
 #include "ImageData.h"
@@ -93,13 +92,16 @@ void FEDisplacementMap::apply(Filter* filter)
         return;
 
     IntRect effectADrawingRect = requestedRegionOfInputImageData(in->absolutePaintRect());
-    RefPtr<CanvasPixelArray> srcPixelArrayA(in->resultImage()->getPremultipliedImageData(effectADrawingRect)->data());
+    RefPtr<ImageData> srcImageDataA = in->resultImage()->getPremultipliedImageData(effectADrawingRect);
+    ByteArray* srcPixelArrayA = srcImageDataA->data()->data() ;
 
     IntRect effectBDrawingRect = requestedRegionOfInputImageData(in2->absolutePaintRect());
-    RefPtr<CanvasPixelArray> srcPixelArrayB(in2->resultImage()->getUnmultipliedImageData(effectBDrawingRect)->data());
+    RefPtr<ImageData> srcImageDataB = in2->resultImage()->getUnmultipliedImageData(effectBDrawingRect);
+    ByteArray* srcPixelArrayB = srcImageDataB->data()->data();
 
     IntRect imageRect(IntPoint(), resultImage()->size());
     RefPtr<ImageData> imageData = ImageData::create(imageRect.width(), imageRect.height());
+    ByteArray* dstPixelArray = imageData->data()->data();
 
     ASSERT(srcPixelArrayA->length() == srcPixelArrayB->length());
 
@@ -116,10 +118,10 @@ void FEDisplacementMap::apply(Filter* filter)
             int srcY = y + static_cast<int>(scaleY * srcPixelArrayB->get(dstIndex + m_yChannelSelector - 1) + scaleAdjustmentY);
             for (unsigned channel = 0; channel < 4; ++channel) {
                 if (srcX < 0 || srcX >= imageRect.width() || srcY < 0 || srcY >= imageRect.height())
-                    imageData->data()->set(dstIndex + channel, static_cast<unsigned char>(0));
+                    dstPixelArray->set(dstIndex + channel, static_cast<unsigned char>(0));
                 else {
                     unsigned char pixelValue = srcPixelArrayA->get(srcY * stride + srcX * 4 + channel);
-                    imageData->data()->set(dstIndex + channel, pixelValue);
+                    dstPixelArray->set(dstIndex + channel, pixelValue);
                 }
             }
 
diff --git a/WebCore/platform/graphics/filters/FEGaussianBlur.cpp b/WebCore/platform/graphics/filters/FEGaussianBlur.cpp
index 1f36ba7..bb70537 100644
--- a/WebCore/platform/graphics/filters/FEGaussianBlur.cpp
+++ b/WebCore/platform/graphics/filters/FEGaussianBlur.cpp
@@ -27,10 +27,10 @@
 #if ENABLE(FILTERS)
 #include "FEGaussianBlur.h"
 
-#include "CanvasPixelArray.h"
 #include "Filter.h"
 #include "GraphicsContext.h"
 #include "ImageData.h"
+
 #include <wtf/MathExtras.h>
 
 using std::max;
@@ -72,7 +72,7 @@ void FEGaussianBlur::setStdDeviationY(float y)
     m_stdY = y;
 }
 
-static void boxBlur(CanvasPixelArray*& srcPixelArray, CanvasPixelArray*& dstPixelArray,
+inline void boxBlur(ByteArray* srcPixelArray, ByteArray* dstPixelArray,
                     unsigned dx, int dxLeft, int dxRight, int stride, int strideLine, int effectWidth, int effectHeight, bool alphaImage)
 {
     for (int y = 0; y < effectHeight; ++y) {
@@ -175,7 +175,7 @@ void FEGaussianBlur::apply(Filter* filter)
     setIsAlphaImage(in->isAlphaImage());
 
     IntRect effectDrawingRect = requestedRegionOfInputImageData(in->absolutePaintRect());
-    RefPtr<ImageData> srcImageData(in->resultImage()->getPremultipliedImageData(effectDrawingRect));
+    RefPtr<ImageData> srcImageData = in->resultImage()->getPremultipliedImageData(effectDrawingRect);
     IntRect imageRect(IntPoint(), resultImage()->size());
 
     if (!m_stdX && !m_stdY) {
@@ -187,9 +187,9 @@ void FEGaussianBlur::apply(Filter* filter)
     unsigned kernelSizeY = 0;
     calculateKernelSize(filter, kernelSizeX, kernelSizeY, m_stdX, m_stdY);
 
-    CanvasPixelArray* srcPixelArray(srcImageData->data());
+    ByteArray* srcPixelArray = srcImageData->data()->data();
     RefPtr<ImageData> tmpImageData = ImageData::create(imageRect.width(), imageRect.height());
-    CanvasPixelArray* tmpPixelArray(tmpImageData->data());
+    ByteArray* tmpPixelArray = tmpImageData->data()->data();
 
     int stride = 4 * imageRect.width();
     int dxLeft = 0;
@@ -201,7 +201,7 @@ void FEGaussianBlur::apply(Filter* filter)
             kernelPosition(i, kernelSizeX, dxLeft, dxRight);
             boxBlur(srcPixelArray, tmpPixelArray, kernelSizeX, dxLeft, dxRight, 4, stride, imageRect.width(), imageRect.height(), isAlphaImage());
         } else {
-            CanvasPixelArray* auxPixelArray = tmpPixelArray;
+            ByteArray* auxPixelArray = tmpPixelArray;
             tmpPixelArray = srcPixelArray;
             srcPixelArray = auxPixelArray;
         }
@@ -210,7 +210,7 @@ void FEGaussianBlur::apply(Filter* filter)
             kernelPosition(i, kernelSizeY, dyLeft, dyRight);
             boxBlur(tmpPixelArray, srcPixelArray, kernelSizeY, dyLeft, dyRight, stride, 4, imageRect.height(), imageRect.width(), isAlphaImage());
         } else {
-            CanvasPixelArray* auxPixelArray = tmpPixelArray;
+            ByteArray* auxPixelArray = tmpPixelArray;
             tmpPixelArray = srcPixelArray;
             srcPixelArray = auxPixelArray;
         }
diff --git a/WebCore/platform/graphics/filters/FEMorphology.cpp b/WebCore/platform/graphics/filters/FEMorphology.cpp
index ac26441..0b67f9a 100644
--- a/WebCore/platform/graphics/filters/FEMorphology.cpp
+++ b/WebCore/platform/graphics/filters/FEMorphology.cpp
@@ -26,7 +26,6 @@
 #if ENABLE(FILTERS)
 #include "FEMorphology.h"
 
-#include "CanvasPixelArray.h"
 #include "Filter.h"
 #include "ImageData.h"
 
@@ -108,8 +107,10 @@ void FEMorphology::apply(Filter* filter)
 
     IntRect imageRect(IntPoint(), resultImage()->size());
     IntRect effectDrawingRect = requestedRegionOfInputImageData(in->absolutePaintRect());
-    RefPtr<CanvasPixelArray> srcPixelArray(in->resultImage()->getPremultipliedImageData(effectDrawingRect)->data());
+    RefPtr<ImageData> srcImageData = in->resultImage()->getPremultipliedImageData(effectDrawingRect);
+    ByteArray* srcPixelArray = srcImageData->data()->data();
     RefPtr<ImageData> imageData = ImageData::create(imageRect.width(), imageRect.height());
+    ByteArray* dstPixelArray = imageData->data()->data();
 
     int effectWidth = effectDrawingRect.width() * 4;
     
@@ -155,7 +156,7 @@ void FEMorphology::apply(Filter* filter)
                         (m_type == FEMORPHOLOGY_OPERATOR_DILATE && extrema[kernelIndex] >= entireExtrema))
                         entireExtrema = extrema[kernelIndex];
                 }
-                imageData->data()->set(y * effectWidth + 4 * x + channel, entireExtrema);
+                dstPixelArray->set(y * effectWidth + 4 * x + channel, entireExtrema);
             }
         }
     }
diff --git a/WebCore/platform/graphics/filters/FETurbulence.cpp b/WebCore/platform/graphics/filters/FETurbulence.cpp
index b1494a5..9ad27cf 100644
--- a/WebCore/platform/graphics/filters/FETurbulence.cpp
+++ b/WebCore/platform/graphics/filters/FETurbulence.cpp
@@ -26,7 +26,6 @@
 #if ENABLE(FILTERS)
 #include "FETurbulence.h"
 
-#include "CanvasPixelArray.h"
 #include "Filter.h"
 #include "ImageData.h"
 
@@ -329,6 +328,7 @@ void FETurbulence::apply(Filter* filter)
         return;
 
     RefPtr<ImageData> imageData = ImageData::create(imageRect.width(), imageRect.height());
+    ByteArray* pixelArray = imageData->data()->data();
     PaintingData paintingData(m_seed, roundedIntSize(filterPrimitiveSubregion().size()));
     initPaint(paintingData);
 
@@ -342,7 +342,7 @@ void FETurbulence::apply(Filter* filter)
         for (int x = 0; x < imageRect.width(); ++x) {
             point.setX(point.x() + 1);
             for (paintingData.channel = 0; paintingData.channel < 4; ++paintingData.channel, ++indexOfPixelChannel)
-                imageData->data()->set(indexOfPixelChannel, calculateTurbulenceValueForPoint(paintingData, filter->mapAbsolutePointToLocalPoint(point)));
+                pixelArray->set(indexOfPixelChannel, calculateTurbulenceValueForPoint(paintingData, filter->mapAbsolutePointToLocalPoint(point)));
         }
     }
     resultImage()->putUnmultipliedImageData(imageData.get(), imageRect, IntPoint());
diff --git a/WebCore/rendering/RenderSVGResourceMasker.cpp b/WebCore/rendering/RenderSVGResourceMasker.cpp
index 10133b2..ed27899 100644
--- a/WebCore/rendering/RenderSVGResourceMasker.cpp
+++ b/WebCore/rendering/RenderSVGResourceMasker.cpp
@@ -161,10 +161,11 @@ void RenderSVGResourceMasker::drawContentIntoMaskImage(MaskerData* maskerData, c
 
     // Create the luminance mask.
     IntRect maskImageRect(IntPoint(), maskerData->maskImage->size());
-    RefPtr<ImageData> imageData(maskerData->maskImage->getUnmultipliedImageData(maskImageRect));
-    CanvasPixelArray* srcPixelArray(imageData->data());
+    RefPtr<ImageData> imageData = maskerData->maskImage->getUnmultipliedImageData(maskImageRect);
+    ByteArray* srcPixelArray = imageData->data()->data();
 
-    for (unsigned pixelOffset = 0; pixelOffset < srcPixelArray->length(); pixelOffset += 4) {
+    unsigned pixelArrayLength = srcPixelArray->length();
+    for (unsigned pixelOffset = 0; pixelOffset < pixelArrayLength; pixelOffset += 4) {
         unsigned char a = srcPixelArray->get(pixelOffset + 3);
         if (!a)
             continue;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list