| Index: dm/DMTaskRunner.cpp
|
| diff --git a/dm/DMTaskRunner.cpp b/dm/DMTaskRunner.cpp
|
| index 30d07babc866959b4d2148105c5d2a76c9239a7e..8a0bc838e174d96b0c87986e3a4af89725a8b93d 100644
|
| --- a/dm/DMTaskRunner.cpp
|
| +++ b/dm/DMTaskRunner.cpp
|
| @@ -3,19 +3,19 @@
|
|
|
| namespace DM {
|
|
|
| -TaskRunner::TaskRunner(int cpuThreads) {
|
| - SkTaskGroup::SetThreadCount(cpuThreads);
|
| -}
|
| +TaskRunner::TaskRunner(int cpuThreads, int gpuThreads) : fCpu(cpuThreads), fGpu(gpuThreads) {}
|
|
|
| -void TaskRunner::add(CpuTask* task) { fCpuWork.add(task); }
|
| -void TaskRunner::add(GpuTask* task) { fGpuWork.push(task); }
|
| +void TaskRunner::add(CpuTask* task) { fCpu.add(task); }
|
| +void TaskRunner::addNext(CpuTask* task) { fCpu.addNext(task); }
|
| +void TaskRunner::add(GpuTask* task) { fGpu.add(task); }
|
|
|
| void TaskRunner::wait() {
|
| - GrContextFactory factory;
|
| - for (int i = 0; i < fGpuWork.count(); i++) {
|
| - fGpuWork[i]->run(&factory);
|
| - }
|
| - fCpuWork.wait();
|
| + // These wait calls block until each threadpool is done. We don't allow
|
| + // spawning new child GPU tasks, so we can wait for that first knowing
|
| + // we'll never try to add to it later. Same can't be said of the CPU pool:
|
| + // both CPU and GPU tasks can spawn off new CPU work, so we wait for that last.
|
| + fGpu.wait();
|
| + fCpu.wait();
|
| }
|
|
|
| } // namespace DM
|
|
|