diff options
-rw-r--r-- | dm/DMTask.cpp | 12 | ||||
-rw-r--r-- | dm/DMTask.h | 6 |
2 files changed, 15 insertions, 3 deletions
diff --git a/dm/DMTask.cpp b/dm/DMTask.cpp index 8b6a94e52a..83df84933f 100644 --- a/dm/DMTask.cpp +++ b/dm/DMTask.cpp @@ -37,7 +37,7 @@ void Task::finish() { fReporter->finish(this->name(), SkTime::GetMSecs() - fStart); } -void Task::spawnChild(CpuTask* task) { +void Task::reallySpawnChild(CpuTask* task) { fTaskRunner->add(task); } @@ -53,6 +53,11 @@ void CpuTask::run() { SkDELETE(this); } +void CpuTask::spawnChild(CpuTask* task) { + // Run children serially on this (CPU) thread. This tends to save RAM and is usually no slower. + task->run(); +} + GpuTask::GpuTask(Reporter* reporter, TaskRunner* taskRunner) : Task(reporter, taskRunner) {} void GpuTask::run(GrContextFactory& factory) { @@ -64,6 +69,9 @@ void GpuTask::run(GrContextFactory& factory) { SkDELETE(this); } - +void GpuTask::spawnChild(CpuTask* task) { + // Really spawn a new task so it runs on the CPU threadpool instead of the GPU one we're on now. + this->reallySpawnChild(task); +} } // namespace DM diff --git a/dm/DMTask.h b/dm/DMTask.h index 76efbf924b..02d8a22011 100644 --- a/dm/DMTask.h +++ b/dm/DMTask.h @@ -36,7 +36,7 @@ protected: void fail(const char* msg = NULL); void finish(); - void spawnChild(CpuTask* task); // For now we don't allow GPU child tasks. + void reallySpawnChild(CpuTask* task); // For now we don't allow GPU child tasks. private: Reporter* fReporter; // Unowned. @@ -53,6 +53,8 @@ public: void run() SK_OVERRIDE; virtual void draw() = 0; + + void spawnChild(CpuTask* task); }; class GpuTask : public Task, public SkTRunnable<GrContextFactory> { @@ -62,6 +64,8 @@ class GpuTask : public Task, public SkTRunnable<GrContextFactory> { void run(GrContextFactory&) SK_OVERRIDE; virtual void draw(GrContextFactory*) = 0; + + void spawnChild(CpuTask* task); }; } // namespace DM |