1d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#ifndef DMTask_DEFINED 2d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#define DMTask_DEFINED 3d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 4d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "DMReporter.h" 5787227d3560bd8021394b76ada2cb184ecf5c919commit-bot@chromium.org#include "DMGpuSupport.h" 6d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkRunnable.h" 7a39874b636f9954c6da335733fed646ba33dd614commit-bot@chromium.org#include "SkTime.h" 8d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 9ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org// DM will run() these tasks on one of two threadpools. 10ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org// Subclasses can call fail() to mark this task as failed, or make any number of spawnChild() calls 11ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org// to kick off dependent tasks. 12d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com// 13ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org// Tasks delete themselves when run. 14d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 15d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comnamespace DM { 16d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 17d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comclass TaskRunner; 18d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 19ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgclass CpuTask; 20d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 21ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgclass Task { 22ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgpublic: 23d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com virtual bool shouldSkip() const = 0; 24d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com virtual SkString name() const = 0; 25d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 26d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com // Returns the number of parents above this task. 27d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com // Top-level tasks return 0, their children 1, and so on. 28d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com int depth() const { return fDepth; } 29d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com 30d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comprotected: 31ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org Task(Reporter* reporter, TaskRunner* taskRunner); 32ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org Task(const Task& parent); 3339e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org virtual ~Task(); 34d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 35a39874b636f9954c6da335733fed646ba33dd614commit-bot@chromium.org void start(); 36ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org void fail(const char* msg = NULL); 37ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org void finish(); 38a39874b636f9954c6da335733fed646ba33dd614commit-bot@chromium.org 393f032156c8b5d4decb0beccdc2cdbcf91867fa36commit-bot@chromium.org void spawnChildNext(CpuTask* task); // For now we don't allow GPU child tasks. 4038aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org 41d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comprivate: 42ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org Reporter* fReporter; // Unowned. 43ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org TaskRunner* fTaskRunner; // Unowned. 44d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com int fDepth; 45a39874b636f9954c6da335733fed646ba33dd614commit-bot@chromium.org SkMSec fStart; 46ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org}; 47ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org 48ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgclass CpuTask : public Task, public SkRunnable { 49ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgpublic: 50ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org CpuTask(Reporter* reporter, TaskRunner* taskRunner); 51ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org CpuTask(const Task& parent); 52ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org virtual ~CpuTask() {} 53ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org 54ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org void run() SK_OVERRIDE; 55ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org virtual void draw() = 0; 56b0c7156d5be00509d0f80a8d223d5355122b6a3fcommit-bot@chromium.org 57b0c7156d5be00509d0f80a8d223d5355122b6a3fcommit-bot@chromium.org void spawnChild(CpuTask* task); 58ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org}; 59ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org 60ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgclass GpuTask : public Task, public SkTRunnable<GrContextFactory> { 61ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org public: 62ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org GpuTask(Reporter* reporter, TaskRunner* taskRunner); 63ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org virtual ~GpuTask() {} 641ecd9cf379312e72670e2aec313c850d422ce9c7scroggo@google.com 65ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org void run(GrContextFactory&) SK_OVERRIDE; 66ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org virtual void draw(GrContextFactory*) = 0; 67b0c7156d5be00509d0f80a8d223d5355122b6a3fcommit-bot@chromium.org 68b0c7156d5be00509d0f80a8d223d5355122b6a3fcommit-bot@chromium.org void spawnChild(CpuTask* task); 69d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com}; 70d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 71d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com} // namespace DM 72d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 73d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#endif // DMTask_DEFINED 74