[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e

commit-queue at webkit.org commit-queue at webkit.org
Fri Jan 21 14:37:08 UTC 2011


The following commit has been merged in the debian/experimental branch:
commit a83cd21d0dce23ac22919a94e7336c05f00e69f8
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Dec 23 07:43:45 2010 +0000

    2010-12-22  Noel Gordon  <noel.gordon at gmail.com>
    
            Reviewed by Darin Fisher.
    
            [chromium] Optimize canvas.toDataURL("image/png") unpremultiplication loop
            https://bugs.webkit.org/show_bug.cgi?id=51321
    
            Follow on from r73890, unroll the SkUnPreMultiply::PMColorToColor() call for
            the "image/png" encoder case viz., compute the unpremultiplication in-place.
            See https://bugs.webkit.org/show_bug.cgi?id=50804 for reference.
    
            No new tests: canvas.toDataURL() is covered by existing tests.
    
            * platform/image-encoders/skia/PNGImageEncoder.cpp:
            (WebCore::preMultipliedBGRAtoRGBA):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@74540 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 269c81b..abc1e23 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,19 @@
+2010-12-22  Noel Gordon  <noel.gordon at gmail.com>
+
+        Reviewed by Darin Fisher.
+
+        [chromium] Optimize canvas.toDataURL("image/png") unpremultiplication loop
+        https://bugs.webkit.org/show_bug.cgi?id=51321
+
+        Follow on from r73890, unroll the SkUnPreMultiply::PMColorToColor() call for
+        the "image/png" encoder case viz., compute the unpremultiplication in-place.
+        See https://bugs.webkit.org/show_bug.cgi?id=50804 for reference.
+
+        No new tests: canvas.toDataURL() is covered by existing tests.
+
+        * platform/image-encoders/skia/PNGImageEncoder.cpp:
+        (WebCore::preMultipliedBGRAtoRGBA):
+
 2010-12-22  Ariya Hidayat  <ariya at sencha.com>
 
         Reviewed by Simon Fraser.
diff --git a/WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp b/WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp
index 9fc82c4..92dd69a 100644
--- a/WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp
+++ b/WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp
@@ -33,6 +33,7 @@
 
 #include "IntSize.h"
 #include "SkBitmap.h"
+#include "SkColorPriv.h"
 #include "SkUnPreMultiply.h"
 extern "C" {
 #include "png.h"
@@ -47,12 +48,21 @@ static void writeOutput(png_structp png, png_bytep data, png_size_t size)
 
 static void preMultipliedBGRAtoRGBA(const SkPMColor* input, int pixels, unsigned char* output)
 {
-    while (pixels-- > 0) {
-        SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(*input++);
-        *output++ = SkColorGetR(unmultiplied);
-        *output++ = SkColorGetG(unmultiplied);
-        *output++ = SkColorGetB(unmultiplied);
-        *output++ = SkColorGetA(unmultiplied);
+    static const SkUnPreMultiply::Scale* scale = SkUnPreMultiply::GetScaleTable();
+
+    for (; pixels-- > 0; ++input) {
+        const unsigned alpha = SkGetPackedA32(*input);
+        if ((alpha != 0) && (alpha != 255)) {
+            *output++ = SkUnPreMultiply::ApplyScale(scale[alpha], SkGetPackedR32(*input));
+            *output++ = SkUnPreMultiply::ApplyScale(scale[alpha], SkGetPackedG32(*input));
+            *output++ = SkUnPreMultiply::ApplyScale(scale[alpha], SkGetPackedB32(*input));
+            *output++ = alpha;
+        } else {
+            *output++ = SkGetPackedR32(*input);
+            *output++ = SkGetPackedG32(*input);
+            *output++ = SkGetPackedB32(*input);
+            *output++ = alpha;
+        }
     }
 }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list