diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp index 763e72747e830..dd34e095738d4 100644 --- a/libs/hwui/renderthread/DrawFrameTask.cpp +++ b/libs/hwui/renderthread/DrawFrameTask.cpp @@ -85,7 +85,8 @@ int DrawFrameTask::drawFrame(nsecs_t frameTimeNanos, nsecs_t recordDurationNanos void DrawFrameTask::postAndWait() { AutoMutex _lock(mLock); - mRenderThread->queueAndWait(this, mSignal, mLock); + mRenderThread->queue(this); + mSignal.wait(mLock); } void DrawFrameTask::run() { diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 1e91eb541047b..3f030936185e6 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -412,7 +412,8 @@ void* RenderProxy::postAndWait(MethodInvokeRenderTask* task) { task->setReturnPtr(&retval); SignalingRenderTask syncTask(task, &mSyncMutex, &mSyncCondition); AutoMutex _lock(mSyncMutex); - mRenderThread.queueAndWait(&syncTask, mSyncCondition, mSyncMutex); + mRenderThread.queue(&syncTask); + mSyncCondition.wait(mSyncMutex); return retval; } diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 32dc46ee57ebc..03e98d5b2f03b 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -20,7 +20,6 @@ #include #include -#include #include "../RenderState.h" #include "CanvasContext.h" @@ -137,7 +136,6 @@ public: }; RenderThread::RenderThread() : Thread(true), Singleton() - , mThreadId(0) , mNextWakeup(LLONG_MAX) , mDisplayEventReceiver(0) , mVsyncRequested(false) @@ -246,7 +244,6 @@ void RenderThread::requestVsync() { } bool RenderThread::threadLoop() { - mThreadId = pthread_self(); initThreadLocals(); int timeoutMillis = -1; @@ -292,16 +289,6 @@ void RenderThread::queue(RenderTask* task) { } } -void RenderThread::queueAndWait(RenderTask* task, Condition& signal, Mutex& lock) { - static nsecs_t sTimeout = milliseconds(500); - queue(task); - status_t err = signal.waitRelative(lock, sTimeout); - if (CC_UNLIKELY(err != NO_ERROR)) { - ALOGE("Timeout waiting for RenderTherad! err=%d", err); - nukeFromOrbit(); - } -} - void RenderThread::queueAtFront(RenderTask* task) { AutoMutex _lock(mLock); mQueue.queueAtFront(task); @@ -354,10 +341,6 @@ RenderTask* RenderThread::nextTask(nsecs_t* nextWakeup) { return next; } -void RenderThread::nukeFromOrbit() { - pthread_kill(mThreadId, SIGABRT); -} - } /* namespace renderthread */ } /* namespace uirenderer */ } /* namespace android */ diff --git a/libs/hwui/renderthread/RenderThread.h b/libs/hwui/renderthread/RenderThread.h index 59843736f0486..0b91e9dd97aad 100644 --- a/libs/hwui/renderthread/RenderThread.h +++ b/libs/hwui/renderthread/RenderThread.h @@ -23,7 +23,6 @@ #include #include -#include #include #include #include @@ -74,7 +73,6 @@ public: // RenderThread takes complete ownership of tasks that are queued // and will delete them after they are run ANDROID_API void queue(RenderTask* task); - void queueAndWait(RenderTask* task, Condition& signal, Mutex& lock); ANDROID_API void queueAtFront(RenderTask* task); void queueDelayed(RenderTask* task, int delayMs); void remove(RenderTask* task); @@ -108,15 +106,11 @@ private: void dispatchFrameCallbacks(); void requestVsync(); - // VERY DANGEROUS HANDLE WITH EXTREME CARE - void nukeFromOrbit(); - // Returns the next task to be run. If this returns NULL nextWakeup is set // to the time to requery for the nextTask to run. mNextWakeup is also // set to this time RenderTask* nextTask(nsecs_t* nextWakeup); - pthread_t mThreadId; sp mLooper; Mutex mLock;