Index: Source/WebCore/platform/graphics/filters/FEMorphology.cpp |
=================================================================== |
--- Source/WebCore/platform/graphics/filters/FEMorphology.cpp (revision 131761) |
+++ Source/WebCore/platform/graphics/filters/FEMorphology.cpp (working copy) |
@@ -173,14 +173,17 @@ |
ParallelJobs<PlatformApplyParameters> parallelJobs(&WebCore::FEMorphology::platformApplyWorker, optimalThreadNumber); |
int numOfThreads = parallelJobs.numberOfJobs(); |
if (numOfThreads > 1) { |
- const int deltaY = 1 + paintingData->height / numOfThreads; |
+ // Split the job into "jobSize"-sized jobs but there a few jobs that need to be slightly larger since |
+ // jobSize * jobs < total size. These extras are handled by the remainder "jobsWithExtra". |
+ const int jobSize = paintingData->height / numOfThreads; |
+ const int jobsWithExtra = paintingData->height % numOfThreads; |
int currentY = 0; |
for (int job = numOfThreads - 1; job >= 0; --job) { |
PlatformApplyParameters& param = parallelJobs.parameter(job); |
param.filter = this; |
param.startY = currentY; |
- currentY += deltaY; |
- param.endY = job ? currentY : paintingData->height; |
+ currentY += job < jobsWithExtra ? jobSize + 1 : jobSize; |
+ param.endY = currentY; |
param.paintingData = paintingData; |
} |
parallelJobs.execute(); |