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 |