inline void FELighting::platformApplyGeneric(LightingData& data, LightSource::PaintingData& paintingData) { int optimalThreadNumber = ((data.widthDecreasedByOne - 1) * (data.heightDecreasedByOne - 1)) / s_minimalRectDimension; if (optimalThreadNumber > 1) { // Initialize parallel jobs ParallelJobs<PlatformApplyGenericParameters> parallelJobs(&platformApplyGenericWorker, optimalThreadNumber); // Fill the parameter array int job = parallelJobs.numberOfJobs(); if (job > 1) { // Split the job into "yStep"-sized jobs but there a few jobs that need to be slightly larger since // yStep * jobs < total size. These extras are handled by the remainder "jobsWithExtra". const int yStep = (data.heightDecreasedByOne - 1) / job; const int jobsWithExtra = (data.heightDecreasedByOne - 1) % job; int yStart = 1; for (--job; job >= 0; --job) { PlatformApplyGenericParameters& params = parallelJobs.parameter(job); params.filter = this; params.data = data; params.paintingData = paintingData; params.yStart = yStart; yStart += job < jobsWithExtra ? yStep + 1 : yStep; params.yEnd = yStart; } parallelJobs.execute(); return; } // Fallback to single threaded mode. } platformApplyGenericPaint(data, paintingData, 1, data.heightDecreasedByOne); }
inline void FELighting::platformApplyGeneric(LightingData& data, LightSource::PaintingData& paintingData) { int optimalThreadNumber = ((data.widthDecreasedByOne - 1) * (data.heightDecreasedByOne - 1)) / s_minimalRectDimension; if (optimalThreadNumber > 1) { // Initialize parallel jobs WTF::ParallelJobs<PlatformApplyGenericParameters> parallelJobs(&platformApplyGenericWorker, optimalThreadNumber); // Fill the parameter array int job = parallelJobs.numberOfJobs(); if (job > 1) { int yStart = 1; int yStep = (data.heightDecreasedByOne - 1) / job; for (--job; job >= 0; --job) { PlatformApplyGenericParameters& params = parallelJobs.parameter(job); params.filter = this; params.data = data; params.paintingData = paintingData; params.yStart = yStart; if (job > 0) { params.yEnd = yStart + yStep; yStart += yStep; } else params.yEnd = data.heightDecreasedByOne; } parallelJobs.execute(); return; } // Fallback to single threaded mode. } platformApplyGenericPaint(data, paintingData, 1, data.heightDecreasedByOne); }