Merge "Create HintSessionWrapper in RT right after CanvasContext" into tm-qpr-dev

This commit is contained in:
Matt Buckley
2023-02-10 23:51:29 +00:00
committed by Android (Google) Code Review
3 changed files with 18 additions and 4 deletions

View File

@@ -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;

View File

@@ -90,6 +90,8 @@ public:
void forceDrawNextFrame() { mForceDrawFrame = true; }
void createHintSession(pid_t uiThreadId, pid_t renderThreadId);
private:
class HintSessionWrapper {
public:

View File

@@ -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() {