Loading libs/hwui/renderthread/DrawFrameTask.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -278,6 +278,11 @@ void DrawFrameTask::unblockUiThread() { mSignal.signal(); } void DrawFrameTask::createHintSession(pid_t uiThreadId, pid_t renderThreadId) { if (mHintSessionWrapper) return; mHintSessionWrapper.emplace(uiThreadId, renderThreadId); } DrawFrameTask::HintSessionWrapper::HintSessionWrapper(int32_t uiThreadId, int32_t renderThreadId) { if (!Properties::useHintManager) return; if (uiThreadId < 0 || renderThreadId < 0) return; Loading libs/hwui/renderthread/DrawFrameTask.h +2 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,8 @@ public: void forceDrawNextFrame() { mForceDrawFrame = true; } void createHintSession(pid_t uiThreadId, pid_t renderThreadId); private: class HintSessionWrapper { public: Loading libs/hwui/renderthread/RenderProxy.cpp +11 −4 Original line number Diff line number Diff line Loading @@ -38,11 +38,18 @@ namespace renderthread { RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode, IContextFactory* contextFactory) : mRenderThread(RenderThread::getInstance()), mContext(nullptr) { mContext = mRenderThread.queue().runSync([&]() -> CanvasContext* { return CanvasContext::create(mRenderThread, translucent, rootRenderNode, contextFactory); pid_t uiThreadId = pthread_gettid_np(pthread_self()); pid_t renderThreadId = getRenderThreadTid(); mContext = mRenderThread.queue().runSync([=, this]() -> CanvasContext* { CanvasContext* context = CanvasContext::create(mRenderThread, translucent, rootRenderNode, contextFactory); if (context != nullptr) { mRenderThread.queue().post( [=] { mDrawFrameTask.createHintSession(uiThreadId, renderThreadId); }); } return context; }); mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode, pthread_gettid_np(pthread_self()), getRenderThreadTid()); mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode, uiThreadId, renderThreadId); } RenderProxy::~RenderProxy() { Loading Loading
libs/hwui/renderthread/DrawFrameTask.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -278,6 +278,11 @@ void DrawFrameTask::unblockUiThread() { mSignal.signal(); } void DrawFrameTask::createHintSession(pid_t uiThreadId, pid_t renderThreadId) { if (mHintSessionWrapper) return; mHintSessionWrapper.emplace(uiThreadId, renderThreadId); } DrawFrameTask::HintSessionWrapper::HintSessionWrapper(int32_t uiThreadId, int32_t renderThreadId) { if (!Properties::useHintManager) return; if (uiThreadId < 0 || renderThreadId < 0) return; Loading
libs/hwui/renderthread/DrawFrameTask.h +2 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,8 @@ public: void forceDrawNextFrame() { mForceDrawFrame = true; } void createHintSession(pid_t uiThreadId, pid_t renderThreadId); private: class HintSessionWrapper { public: Loading
libs/hwui/renderthread/RenderProxy.cpp +11 −4 Original line number Diff line number Diff line Loading @@ -38,11 +38,18 @@ namespace renderthread { RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode, IContextFactory* contextFactory) : mRenderThread(RenderThread::getInstance()), mContext(nullptr) { mContext = mRenderThread.queue().runSync([&]() -> CanvasContext* { return CanvasContext::create(mRenderThread, translucent, rootRenderNode, contextFactory); pid_t uiThreadId = pthread_gettid_np(pthread_self()); pid_t renderThreadId = getRenderThreadTid(); mContext = mRenderThread.queue().runSync([=, this]() -> CanvasContext* { CanvasContext* context = CanvasContext::create(mRenderThread, translucent, rootRenderNode, contextFactory); if (context != nullptr) { mRenderThread.queue().post( [=] { mDrawFrameTask.createHintSession(uiThreadId, renderThreadId); }); } return context; }); mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode, pthread_gettid_np(pthread_self()), getRenderThreadTid()); mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode, uiThreadId, renderThreadId); } RenderProxy::~RenderProxy() { Loading