Merge "Create HintSessionWrapper right after CanvasContext"

This commit is contained in:
Matt Buckley
2023-01-31 22:51:13 +00:00
committed by Android (Google) Code Review
3 changed files with 12 additions and 4 deletions

View File

@@ -180,8 +180,6 @@ void CanvasContext::setSurface(ANativeWindow* window, bool enableTimeout) {
ATRACE_CALL();
if (window) {
// Ensure the hint session is running here, away from any critical paths
mHintSessionWrapper.init();
mNativeSurface = std::make_unique<ReliableSurface>(window);
mNativeSurface->init();
if (enableTimeout) {
@@ -1050,6 +1048,10 @@ void CanvasContext::setSyncDelayDuration(nsecs_t duration) {
mSyncDelayDuration = duration;
}
void CanvasContext::startHintSession() {
mHintSessionWrapper.init();
}
} /* namespace renderthread */
} /* namespace uirenderer */
} /* namespace android */

View File

@@ -224,6 +224,8 @@ public:
void setSyncDelayDuration(nsecs_t duration);
void startHintSession();
private:
CanvasContext(RenderThread& thread, bool translucent, RenderNode* rootRenderNode,
IContextFactory* contextFactory, std::unique_ptr<IRenderPipeline> renderPipeline,

View File

@@ -45,8 +45,12 @@ RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode,
pid_t uiThreadId = pthread_gettid_np(pthread_self());
pid_t renderThreadId = getRenderThreadTid();
mContext = mRenderThread.queue().runSync([=, this]() -> CanvasContext* {
return CanvasContext::create(mRenderThread, translucent, rootRenderNode, contextFactory,
uiThreadId, renderThreadId);
CanvasContext* context = CanvasContext::create(mRenderThread, translucent, rootRenderNode,
contextFactory, uiThreadId, renderThreadId);
if (context != nullptr) {
mRenderThread.queue().post([=] { context->startHintSession(); });
}
return context;
});
mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode);
}