Fix threading issues
Bug: 25584167 Change-Id: I413ef9e0c86f7cca1f7d085e0071745ca0192853
This commit is contained in:
@@ -563,7 +563,10 @@ void RenderProxy::post(RenderTask* task) {
|
||||
void* RenderProxy::postAndWait(MethodInvokeRenderTask* task) {
|
||||
void* retval;
|
||||
task->setReturnPtr(&retval);
|
||||
mRenderThread.queueAndWait(task);
|
||||
SignalingRenderTask syncTask(task, &mSyncMutex, &mSyncCondition);
|
||||
AutoMutex _lock(mSyncMutex);
|
||||
mRenderThread.queue(&syncTask);
|
||||
mSyncCondition.wait(mSyncMutex);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,9 @@ private:
|
||||
|
||||
DrawFrameTask mDrawFrameTask;
|
||||
|
||||
Mutex mSyncMutex;
|
||||
Condition mSyncCondition;
|
||||
|
||||
void destroyContext();
|
||||
|
||||
void post(RenderTask* task);
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
#include <gui/ISurfaceComposer.h>
|
||||
#include <gui/SurfaceComposerClient.h>
|
||||
#include <sys/resource.h>
|
||||
#include <utils/Condition.h>
|
||||
#include <utils/Log.h>
|
||||
#include <utils/Mutex.h>
|
||||
|
||||
namespace android {
|
||||
namespace uirenderer {
|
||||
@@ -325,10 +327,16 @@ void RenderThread::queue(RenderTask* task) {
|
||||
}
|
||||
|
||||
void RenderThread::queueAndWait(RenderTask* task) {
|
||||
SignalingRenderTask syncTask(task, &mSyncMutex, &mSyncCondition);
|
||||
AutoMutex _lock(mSyncMutex);
|
||||
// These need to be local to the thread to avoid the Condition
|
||||
// signaling the wrong thread. The easiest way to achieve that is to just
|
||||
// make this on the stack, although that has a slight cost to it
|
||||
Mutex mutex;
|
||||
Condition condition;
|
||||
SignalingRenderTask syncTask(task, &mutex, &condition);
|
||||
|
||||
AutoMutex _lock(mutex);
|
||||
queue(&syncTask);
|
||||
mSyncCondition.wait(mSyncMutex);
|
||||
condition.wait(mutex);
|
||||
}
|
||||
|
||||
void RenderThread::queueAtFront(RenderTask* task) {
|
||||
|
||||
@@ -27,9 +27,7 @@
|
||||
#include <utils/Looper.h>
|
||||
#include <utils/Thread.h>
|
||||
|
||||
#include <condition_variable>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <set>
|
||||
|
||||
namespace android {
|
||||
@@ -127,8 +125,6 @@ private:
|
||||
|
||||
nsecs_t mNextWakeup;
|
||||
TaskQueue mQueue;
|
||||
Mutex mSyncMutex;
|
||||
Condition mSyncCondition;
|
||||
|
||||
DisplayInfo mDisplayInfo;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user