DMTask.cpp revision fa8cb1cf222f85aa898cfe979ac57da6a7b9f6f9
1#include "DMTask.h"
2#include "DMTaskRunner.h"
3#include "SkCommandLineFlags.h"
4
5DEFINE_bool(cpu, true, "Master switch for running CPU-bound work.");
6DEFINE_bool(gpu, true, "Master switch for running GPU-bound work.");
7
8namespace DM {
9
10Task::Task(Reporter* reporter, TaskRunner* taskRunner)
11    : fReporter(reporter)
12    , fTaskRunner(taskRunner)
13    , fDepth(0) {
14    fReporter->start();
15}
16
17Task::Task(const Task& parent)
18    : fReporter(parent.fReporter)
19    , fTaskRunner(parent.fTaskRunner)
20    , fDepth(parent.depth() + 1) {
21    fReporter->start();
22}
23
24void Task::fail(const char* msg) {
25    SkString failure(this->name());
26    if (msg) {
27        failure.appendf(": %s", msg);
28    }
29    fReporter->fail(failure);
30}
31
32void Task::start() {
33    fStart = SkTime::GetMSecs();
34}
35
36void Task::finish() {
37    fReporter->finish(this->name(), SkTime::GetMSecs() - fStart);
38}
39
40void Task::spawnChild(CpuTask* task) {
41    fTaskRunner->add(task);
42}
43
44CpuTask::CpuTask(Reporter* reporter, TaskRunner* taskRunner) : Task(reporter, taskRunner) {}
45CpuTask::CpuTask(const Task& parent) : Task(parent) {}
46
47void CpuTask::run() {
48    this->start();
49    if (FLAGS_cpu && !this->shouldSkip()) {
50        this->draw();
51    }
52    this->finish();
53    SkDELETE(this);
54}
55
56GpuTask::GpuTask(Reporter* reporter, TaskRunner* taskRunner) : Task(reporter, taskRunner) {}
57
58void GpuTask::run(GrContextFactory& factory) {
59    this->start();
60    if (FLAGS_gpu && !this->shouldSkip()) {
61        this->draw(&factory);
62    }
63    this->finish();
64    SkDELETE(this);
65}
66
67
68
69}  // namespace DM
70