summaryrefslogtreecommitdiff
path: root/libs/hwui/thread/TaskProcessor.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/thread/TaskProcessor.h')
-rw-r--r--libs/hwui/thread/TaskProcessor.h16
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);