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

Commit 5ad36d45 authored by John Reck's avatar John Reck Committed by Gerrit Code Review
Browse files

Merge "Fix ANR caused by hwuiTask thread"

parents fd2c1307 c3c58e01
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -493,7 +493,9 @@ void PathCache::precache(const SkPath* path, const SkPaint* paint) {
        if (mProcessor == NULL) {
            mProcessor = new PathProcessor(Caches::getInstance());
        }
        mProcessor->add(task);
        if (!mProcessor->add(task)) {
            mProcessor->process(task);
        }
    }
}

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

    task->incStrong(NULL); // not using sp<>s, so manually ref while in the cache
    mShadowCache.put(key, task.get());
@@ -421,7 +423,9 @@ TessellationCache::Buffer* TessellationCache::getOrCreateBuffer(
        if (mProcessor == NULL) {
            mProcessor = new TessellationProcessor(Caches::getInstance());
        }
        mProcessor->add(task);
        if (!mProcessor->add(task)) {
            mProcessor->process(task);
        }
        mCache.put(entry, buffer);
    }
    return buffer;
+2 −4
Original line number Diff line number Diff line
@@ -105,6 +105,8 @@ bool TaskManager::WorkerThread::threadLoop() {
bool TaskManager::WorkerThread::addTask(TaskWrapper task) {
    if (!isRunning()) {
        run(mName.string(), PRIORITY_DEFAULT);
    } else if (exitPending()) {
        return false;
    }

    Mutex::Autolock l(mLock);
@@ -120,10 +122,6 @@ size_t TaskManager::WorkerThread::getTaskCount() const {
}

void TaskManager::WorkerThread::exit() {
    {
        Mutex::Autolock l(mLock);
        mTasks.clear();
    }
    requestExit();
    mSignal.signal();
}
+2 −6
Original line number Diff line number Diff line
@@ -30,9 +30,6 @@ public:
    TaskProcessorBase() { }
    virtual ~TaskProcessorBase() { };

private:
    friend class TaskManager;

    virtual void process(const sp<TaskBase>& task) = 0;
};

@@ -44,9 +41,6 @@ public:

    bool add(const sp<Task<T> >& task);

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

private:
    virtual void process(const sp<TaskBase>& task) {
        sp<Task<T> > realTask = static_cast<Task<T>* >(task.get());
        // This is the right way to do it but sp<> doesn't play nice
@@ -54,6 +48,8 @@ private:
        onProcess(realTask);
    }

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

    TaskManager* mManager;
};