diff options
Diffstat (limited to 'libs/hwui/renderthread/RenderThread.cpp')
-rw-r--r-- | libs/hwui/renderthread/RenderThread.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 4a4e254..03e98d5 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -21,7 +21,9 @@ #include <gui/DisplayEventReceiver.h> #include <utils/Log.h> +#include "../RenderState.h" #include "CanvasContext.h" +#include "EglManager.h" #include "RenderProxy.h" namespace android { @@ -138,13 +140,16 @@ RenderThread::RenderThread() : Thread(true), Singleton<RenderThread>() , mDisplayEventReceiver(0) , mVsyncRequested(false) , mFrameCallbackTaskPending(false) - , mFrameCallbackTask(0) { + , mFrameCallbackTask(0) + , mRenderState(NULL) + , mEglManager(NULL) { mFrameCallbackTask = new DispatchFrameCallbacks(this); mLooper = new Looper(false); run("RenderThread"); } RenderThread::~RenderThread() { + LOG_ALWAYS_FATAL("Can't destroy the render thread"); } void RenderThread::initializeDisplayEventReceiver() { @@ -159,6 +164,12 @@ void RenderThread::initializeDisplayEventReceiver() { Looper::EVENT_INPUT, RenderThread::displayEventReceiverCallback, this); } +void RenderThread::initThreadLocals() { + initializeDisplayEventReceiver(); + mEglManager = new EglManager(*this); + mRenderState = new RenderState(); +} + int RenderThread::displayEventReceiverCallback(int fd, int events, void* data) { if (events & (Looper::EVENT_ERROR | Looper::EVENT_HANGUP)) { ALOGE("Display event receiver pipe was closed or an error occurred. " @@ -233,7 +244,7 @@ void RenderThread::requestVsync() { } bool RenderThread::threadLoop() { - initializeDisplayEventReceiver(); + initThreadLocals(); int timeoutMillis = -1; for (;;) { |