Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1608)

Unified Diff: Source/core/platform/image-decoders/png/PNGImageDecoder.cpp

Issue 15466004: Make image decoders faster by refactoring hot loops that fills the lines of ImageFrame. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Make image decoders faster by refactoring hot loops that fills the lines of ImageFrame. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/platform/image-decoders/png/PNGImageDecoder.cpp
diff --git a/Source/core/platform/image-decoders/png/PNGImageDecoder.cpp b/Source/core/platform/image-decoders/png/PNGImageDecoder.cpp
index beb9a1dc8e6ee7c9e0cb688b7b18ca3e0da0c093..ae1735aceab7978f6f66747d2f0cb596b641f7b4 100644
--- a/Source/core/platform/image-decoders/png/PNGImageDecoder.cpp
+++ b/Source/core/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -488,16 +488,11 @@ void PNGImageDecoder::rowAvailable(unsigned char* rowBuffer, unsigned rowIndex,
#endif
// Write the decoded row pixels to the frame buffer.
- ImageFrame::PixelData* address = buffer.getAddr(0, y);
bool nonTrivialAlpha = false;
- int width = size().width();
-
- png_bytep pixel = row;
- for (int x = 0; x < width; ++x, pixel += colorChannels) {
- unsigned alpha = hasAlpha ? pixel[3] : 255;
- buffer.setRGBA(address++, pixel[0], pixel[1], pixel[2], alpha);
- nonTrivialAlpha |= alpha < 255;
- }
+ if (hasAlpha)
+ buffer.fillRowFromRGBASourceWithNonTrivialAlphaDetection(y, row, nonTrivialAlpha);
+ else
+ buffer.fillRowFromRGBSource(y, row);
if (nonTrivialAlpha && !buffer.hasAlpha())
buffer.setHasAlpha(nonTrivialAlpha);

Powered by Google App Engine
This is Rietveld 408576698