summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2015-04-20 14:54:49 -0700
committerChris Craik <ccraik@google.com>2015-04-20 14:54:49 -0700
commitdee66b6d99dec8bc97843542d5388e50ebd0f6ee (patch)
treeb11d6264cd3fa93e6f7ba9806642109facd233d5 /libs
parent19f1faa376c08edbd2c7e19ad33107e1b9520777 (diff)
downloadframeworks_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.cpp4
-rw-r--r--libs/hwui/TessellationCache.cpp9
-rw-r--r--libs/hwui/thread/TaskProcessor.h16
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);