Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dee66b6d authored by Chris Craik's avatar Chris Craik
Browse files

Simplify TaskManager fallback path

Change-Id: Ie3833449f7fe6aa69b9f71eb8bab1bef0fe434aa
parent 19f1faa3
Loading
Loading
Loading
Loading
+1 −3
Original line number Original line Diff line number Diff line
@@ -446,9 +446,7 @@ void PathCache::precache(const SkPath* path, const SkPaint* paint) {
        if (mProcessor == nullptr) {
        if (mProcessor == nullptr) {
            mProcessor = new PathProcessor(Caches::getInstance());
            mProcessor = new PathProcessor(Caches::getInstance());
        }
        }
        if (!mProcessor->add(task)) {
        mProcessor->add(task);
            mProcessor->process(task);
        }
    }
    }
}
}


+2 −7
Original line number Original line Diff line number Diff line
@@ -386,10 +386,7 @@ void TessellationCache::precacheShadows(const Matrix4* drawTransform, const Rect
    if (mShadowProcessor == nullptr) {
    if (mShadowProcessor == nullptr) {
        mShadowProcessor = new ShadowProcessor(Caches::getInstance());
        mShadowProcessor = new ShadowProcessor(Caches::getInstance());
    }
    }
    if (!mShadowProcessor->add(task)) {
    mShadowProcessor->add(task);
        mShadowProcessor->process(task);
    }

    task->incStrong(nullptr); // not using sp<>s, so manually ref while in the cache
    task->incStrong(nullptr); // not using sp<>s, so manually ref while in the cache
    mShadowCache.put(key, task.get());
    mShadowCache.put(key, task.get());
}
}
@@ -424,9 +421,7 @@ TessellationCache::Buffer* TessellationCache::getOrCreateBuffer(
        if (mProcessor == nullptr) {
        if (mProcessor == nullptr) {
            mProcessor = new TessellationProcessor(Caches::getInstance());
            mProcessor = new TessellationProcessor(Caches::getInstance());
        }
        }
        if (!mProcessor->add(task)) {
        mProcessor->add(task);
            mProcessor->process(task);
        }
        mCache.put(entry, buffer);
        mCache.put(entry, buffer);
    }
    }
    return buffer;
    return buffer;
+12 −4
Original line number Original line Diff line number Diff line
@@ -39,7 +39,17 @@ public:
    TaskProcessor(TaskManager* manager): mManager(manager) { }
    TaskProcessor(TaskManager* manager): mManager(manager) { }
    virtual ~TaskProcessor() { }
    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 {
    virtual void process(const sp<TaskBase>& task) override {
        sp<Task<T> > realTask = static_cast<Task<T>* >(task.get());
        sp<Task<T> > realTask = static_cast<Task<T>* >(task.get());
@@ -48,13 +58,11 @@ public:
        onProcess(realTask);
        onProcess(realTask);
    }
    }


    virtual void onProcess(const sp<Task<T> >& task) = 0;

    TaskManager* mManager;
    TaskManager* mManager;
};
};


template<typename T>
template<typename T>
bool TaskProcessor<T>::add(const sp<Task<T> >& task) {
bool TaskProcessor<T>::addImpl(const sp<Task<T> >& task) {
    if (mManager) {
    if (mManager) {
        sp<TaskProcessor<T> > self(this);
        sp<TaskProcessor<T> > self(this);
        return mManager->addTask(task, self);
        return mManager->addTask(task, self);