Simplify TaskManager fallback path
Change-Id: Ie3833449f7fe6aa69b9f71eb8bab1bef0fe434aa
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user