[webkit-reviews] review denied: [Bug 68353] [Qt] Apply ParalellJobs for ImageBuffer::platformTransformColorSpace method : [Attachment 107994] [Qt] Apply ParalellJobs for ImageBuffer::platformTransformColorSpace method

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Sep 20 06:44:26 PDT 2011


Andreas Kling <kling at webkit.org> has denied Andras Piroska
<pandras at inf.u-szeged.hu>'s request for review:
Bug 68353: [Qt] Apply ParalellJobs for ImageBuffer::platformTransformColorSpace
method
https://bugs.webkit.org/show_bug.cgi?id=68353

Attachment 107994: [Qt] Apply ParalellJobs for
ImageBuffer::platformTransformColorSpace method
https://bugs.webkit.org/attachment.cgi?id=107994&action=review

------- Additional Comments from Andreas Kling <kling at webkit.org>
View in context: https://bugs.webkit.org/attachment.cgi?id=107994&action=review


> Source/WebCore/ChangeLog:14
> +	   No new tests / no behavioral changes.

So how much faster is it?

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:169
> +static const int minimalAreaOfImage = 128 * 128; // Empirical data limit for
parallel jobs

Empirical data limit?
Where does this value come from?
The name 'minimalAreaOfImage' doesn't sufficiently explain what the constant
does.

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:171
> +struct ThreadParam {

We try not to abbreviate unnecessarily in WebKit. ThreadParameters?

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:172
> +    int yStart, yEnd;

One declaration per line.

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:179
> +static void worker(ThreadParam* tp)

'tp' is a bad variable name. parameters?

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:189
> +	   for (int x = 0; x < tp->width; ++x) {
> +	       QRgb& pixel = scanLine[x];
> +	       pixel = qRgba((*tp->lookUpTable)[qRed(pixel)],
> +			     (*tp->lookUpTable)[qGreen(pixel)],
> +			     (*tp->lookUpTable)[qBlue(pixel)],
> +			     qAlpha(pixel));
> +	   }

First off, we should share this code with the non-parallel path.
Second, this is a terrible algorithm, performance wise. I'm sure you can make
it a *lot* faster by manipulating the color byte fields directly instead of
going through qRgba and  qRed/qGreen/qBlue/qAlpha.

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:208
> +    int areaOfImage = m_size.width() * m_size.height();
> +    int optimalThreadCount = areaOfImage / minimalAreaOfImage;

Granted, I haven't studied the math behind this, but I would think that the
optimal thread counts relates more to the number of scanlines, not so much to
the X*Y area.

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:210
> +	   ParallelJobs<ThreadParam> parallelJobs(&worker, 2);

Why hard-code 2 threads if we know the optimal thread count?

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:211
> +	   int threadCount = parallelJobs.numberOfJobs();

You don't need this variable.

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:213
> +	   int dy = m_size.height() / threadCount;

'dy' is a bad variable name. scanLinesPerThread?

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:215
> +	       ThreadParam& tp = parallelJobs.parameter(i);

'tp' is a bad variable name. parameters?

> Source/WebCore/platform/graphics/qt/ImageBufferQt.cpp:218
> +	       tp.yEnd = (i == threadCount-1) ? m_size.height() : yStart;

Coding style, threadCount-1 should be threadCount - 1


More information about the webkit-reviews mailing list