Merge "Create HintSessionWrapper in RT right after CanvasContext" into tm-qpr-dev
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -90,6 +90,8 @@ public:
|
||||
|
||||
void forceDrawNextFrame() { mForceDrawFrame = true; }
|
||||
|
||||
void createHintSession(pid_t uiThreadId, pid_t renderThreadId);
|
||||
|
||||
private:
|
||||
class HintSessionWrapper {
|
||||
public:
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user