1#ifndef DMTaskRunner_DEFINED
2#define DMTaskRunner_DEFINED
3
4#include "DMGpuSupport.h"
5#include "SkThreadPool.h"
6#include "SkTypes.h"
7
8// TaskRunner runs Tasks on one of two threadpools depending on the need for a GrContextFactory.
9// It's typically a good idea to run fewer GPU threads than CPU threads (go nuts with those).
10
11namespace DM {
12
13class CpuTask;
14class GpuTask;
15
16class TaskRunner : SkNoncopyable {
17public:
18    explicit TaskRunner(int cpuThreads, int gpuThreads);
19
20    void add(CpuTask* task);
21    void addNext(CpuTask* task);
22    void add(GpuTask* task);
23    void wait();
24
25private:
26    SkTThreadPool<void> fCpu;
27    SkTThreadPool<GrContextFactory> fGpu;
28};
29
30}  // namespace DM
31
32#endif  // DMTaskRunner_DEFINED
33