[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