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

Commit e50121b4 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Simplify TaskManager fallback path"

parents 6a1c23bf dee66b6d
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -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);
    }
}

+2 −7
Original line number Diff line number Diff line
@@ -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;
+12 −4
Original line number Diff line number Diff line
@@ -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);