Create HintSessionWrapper right after CanvasContext
Move the construction of the HintSessionWrapper to RT right after the creation of the CanvasContext to ensure enough time is provided to not block the critical path in most cases. Bug: 266560774 Test: manual Change-Id: I1a67b163acd9c41156d9b9e14e974c67b6ba6ed5
This commit is contained in:
@@ -194,8 +194,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) {
|
||||
@@ -1033,6 +1031,10 @@ void CanvasContext::setSyncDelayDuration(nsecs_t duration) {
|
||||
mSyncDelayDuration = duration;
|
||||
}
|
||||
|
||||
void CanvasContext::startHintSession() {
|
||||
mHintSessionWrapper.init();
|
||||
}
|
||||
|
||||
} /* namespace renderthread */
|
||||
} /* namespace uirenderer */
|
||||
} /* namespace android */
|
||||
|
||||
@@ -227,6 +227,8 @@ public:
|
||||
|
||||
void setSyncDelayDuration(nsecs_t duration);
|
||||
|
||||
void startHintSession();
|
||||
|
||||
private:
|
||||
CanvasContext(RenderThread& thread, bool translucent, RenderNode* rootRenderNode,
|
||||
IContextFactory* contextFactory, std::unique_ptr<IRenderPipeline> renderPipeline,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user