Merge "Fix ANR caused by hwuiTask thread"

This commit is contained in:
John Reck
2015-02-04 21:53:47 +00:00
committed by Gerrit Code Review
4 changed files with 13 additions and 13 deletions

View File

@ -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);
}
}
}

View File

@ -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;

View File

@ -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();
}

View File

@ -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;
};