Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5f90f12 authored by Matt Buckley's avatar Matt Buckley
Browse files

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
parent e8120a0d
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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 */
+2 −0
Original line number Diff line number Diff line
@@ -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,
+6 −2
Original line number Diff line number Diff line
@@ -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);
}