diff options
Diffstat (limited to 'dm/DMTaskRunner.cpp')
-rw-r--r-- | dm/DMTaskRunner.cpp | 45 |
1 files changed, 8 insertions, 37 deletions
diff --git a/dm/DMTaskRunner.cpp b/dm/DMTaskRunner.cpp index bd53ce615a..e0bd977288 100644 --- a/dm/DMTaskRunner.cpp +++ b/dm/DMTaskRunner.cpp @@ -3,48 +3,19 @@ namespace DM { +TaskRunner::TaskRunner(int cpuThreads, int gpuThreads) : fCpu(cpuThreads), fGpu(gpuThreads) {} -TaskRunner::TaskRunner(int cputhreads) - : fMain(cputhreads) - , fGpu(1) { - // Enqueue a task on the GPU thread to create a GrContextFactory. - struct Create : public SkRunnable { - Create(GrContextFactory** ptr) : fPtr(ptr) {} - void run() SK_OVERRIDE { - *fPtr = SkNEW(GrContextFactory); - delete this; - } - GrContextFactory** fPtr; - }; - fGpu.add(SkNEW_ARGS(Create, (&fGrContextFactory))); -} +void TaskRunner::add(CpuTask* task) { fCpu.add(task); } -void TaskRunner::add(Task* task) { - if (task->usesGpu()) { - fGpu.add(task); - } else { - fMain.add(task); - } -} +void TaskRunner::add(GpuTask* task) { fGpu.add(task); } void TaskRunner::wait() { - // Enqueue a task on the GPU thread to destroy the GrContextFactory. - struct Delete : public SkRunnable { - Delete(GrContextFactory* ptr) : fPtr(ptr) {} - void run() SK_OVERRIDE { - delete fPtr; - delete this; - } - GrContextFactory* fPtr; - }; - fGpu.add(SkNEW_ARGS(Delete, (fGrContextFactory))); - - // These wait calls block until the threadpool is done. We don't allow - // children to spawn new 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 fMain: fGpu - // and fMain can both add tasks to fMain, so we have to wait for that last. + // 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(); - fMain.wait(); + fCpu.wait(); } } // namespace DM |