aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dm/DMTask.cpp12
-rw-r--r--dm/DMTask.h6
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