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

Commit f69c4025 authored by Matt Buckley's avatar Matt Buckley Committed by Android (Google) Code Review
Browse files

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

parents 7dddb47a 7c1786be
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -90,6 +90,8 @@ public:

    void forceDrawNextFrame() { mForceDrawFrame = true; }

    void createHintSession(pid_t uiThreadId, pid_t renderThreadId);

private:
    class HintSessionWrapper {
    public:
+11 −4
Original line number Diff line number Diff line
@@ -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() {