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

Commit ddb1b41a authored by Matt Buckley's avatar Matt Buckley Committed by Automerger Merge Worker
Browse files

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

parents 205b2133 f69c4025
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -280,6 +280,11 @@ void DrawFrameTask::unblockUiThread() {
    mSignal.signal();
    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) {
DrawFrameTask::HintSessionWrapper::HintSessionWrapper(int32_t uiThreadId, int32_t renderThreadId) {
    if (!Properties::useHintManager) return;
    if (!Properties::useHintManager) return;
    if (uiThreadId < 0 || renderThreadId < 0) return;
    if (uiThreadId < 0 || renderThreadId < 0) return;
+2 −0
Original line number Original line Diff line number Diff line
@@ -90,6 +90,8 @@ public:


    void forceDrawNextFrame() { mForceDrawFrame = true; }
    void forceDrawNextFrame() { mForceDrawFrame = true; }


    void createHintSession(pid_t uiThreadId, pid_t renderThreadId);

private:
private:
    class HintSessionWrapper {
    class HintSessionWrapper {
    public:
    public:
+11 −4
Original line number Original line Diff line number Diff line
@@ -38,11 +38,18 @@ namespace renderthread {
RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode,
RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode,
                         IContextFactory* contextFactory)
                         IContextFactory* contextFactory)
        : mRenderThread(RenderThread::getInstance()), mContext(nullptr) {
        : mRenderThread(RenderThread::getInstance()), mContext(nullptr) {
    mContext = mRenderThread.queue().runSync([&]() -> CanvasContext* {
    pid_t uiThreadId = pthread_gettid_np(pthread_self());
        return CanvasContext::create(mRenderThread, translucent, rootRenderNode, contextFactory);
    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,
    mDrawFrameTask.setContext(&mRenderThread, mContext, rootRenderNode, uiThreadId, renderThreadId);
                              pthread_gettid_np(pthread_self()), getRenderThreadTid());
}
}


RenderProxy::~RenderProxy() {
RenderProxy::~RenderProxy() {