Index: dm/DMTask.cpp |
diff --git a/dm/DMTask.cpp b/dm/DMTask.cpp |
index 8b6a94e52ad33a016eadbb7c033be77789c496eb..83df84933f8cd816d8910f7d039f880208e67d6c 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 |