diff options
Diffstat (limited to 'libs/hwui/thread/TaskProcessor.h')
-rw-r--r-- | libs/hwui/thread/TaskProcessor.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libs/hwui/thread/TaskProcessor.h b/libs/hwui/thread/TaskProcessor.h index ec6519cf85ad..82538e9c7342 100644 --- a/libs/hwui/thread/TaskProcessor.h +++ b/libs/hwui/thread/TaskProcessor.h @@ -39,7 +39,17 @@ public: TaskProcessor(TaskManager* manager): mManager(manager) { } virtual ~TaskProcessor() { } - bool add(const sp<Task<T> >& task); + void add(const sp<Task<T> >& task) { + if (!addImpl(task)) { + // fall back to immediate execution + process(task); + } + } + + virtual void onProcess(const sp<Task<T> >& task) = 0; + +private: + bool addImpl(const sp<Task<T> >& task); virtual void process(const sp<TaskBase>& task) override { sp<Task<T> > realTask = static_cast<Task<T>* >(task.get()); @@ -48,13 +58,11 @@ public: onProcess(realTask); } - virtual void onProcess(const sp<Task<T> >& task) = 0; - TaskManager* mManager; }; template<typename T> -bool TaskProcessor<T>::add(const sp<Task<T> >& task) { +bool TaskProcessor<T>::addImpl(const sp<Task<T> >& task) { if (mManager) { sp<TaskProcessor<T> > self(this); return mManager->addTask(task, self); |