diff options
author | Chris Craik <ccraik@google.com> | 2015-04-20 14:54:49 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2015-04-20 14:54:49 -0700 |
commit | dee66b6d99dec8bc97843542d5388e50ebd0f6ee (patch) | |
tree | b11d6264cd3fa93e6f7ba9806642109facd233d5 /libs | |
parent | 19f1faa376c08edbd2c7e19ad33107e1b9520777 (diff) | |
download | frameworks_base-dee66b6d99dec8bc97843542d5388e50ebd0f6ee.zip frameworks_base-dee66b6d99dec8bc97843542d5388e50ebd0f6ee.tar.gz frameworks_base-dee66b6d99dec8bc97843542d5388e50ebd0f6ee.tar.bz2 |
Simplify TaskManager fallback path
Change-Id: Ie3833449f7fe6aa69b9f71eb8bab1bef0fe434aa
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/PathCache.cpp | 4 | ||||
-rw-r--r-- | libs/hwui/TessellationCache.cpp | 9 | ||||
-rw-r--r-- | libs/hwui/thread/TaskProcessor.h | 16 |
3 files changed, 15 insertions, 14 deletions
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp index 2703072..bdb44a6 100644 --- a/libs/hwui/PathCache.cpp +++ b/libs/hwui/PathCache.cpp @@ -446,9 +446,7 @@ void PathCache::precache(const SkPath* path, const SkPaint* paint) { if (mProcessor == nullptr) { mProcessor = new PathProcessor(Caches::getInstance()); } - if (!mProcessor->add(task)) { - mProcessor->process(task); - } + mProcessor->add(task); } } diff --git a/libs/hwui/TessellationCache.cpp b/libs/hwui/TessellationCache.cpp index d9d06bf..7edb9fb 100644 --- a/libs/hwui/TessellationCache.cpp +++ b/libs/hwui/TessellationCache.cpp @@ -386,10 +386,7 @@ void TessellationCache::precacheShadows(const Matrix4* drawTransform, const Rect if (mShadowProcessor == nullptr) { mShadowProcessor = new ShadowProcessor(Caches::getInstance()); } - if (!mShadowProcessor->add(task)) { - mShadowProcessor->process(task); - } - + mShadowProcessor->add(task); task->incStrong(nullptr); // not using sp<>s, so manually ref while in the cache mShadowCache.put(key, task.get()); } @@ -424,9 +421,7 @@ TessellationCache::Buffer* TessellationCache::getOrCreateBuffer( if (mProcessor == nullptr) { mProcessor = new TessellationProcessor(Caches::getInstance()); } - if (!mProcessor->add(task)) { - mProcessor->process(task); - } + mProcessor->add(task); mCache.put(entry, buffer); } return buffer; diff --git a/libs/hwui/thread/TaskProcessor.h b/libs/hwui/thread/TaskProcessor.h index ec6519c..82538e9 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); |