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

Commit a7fcaabb authored by John Reck's avatar John Reck Committed by android-build-merger
Browse files

Merge "Make getFrameNumber lazy" into nyc-dev

am: 8cddce3f

* commit '8cddce3f':
  Make getFrameNumber lazy

Change-Id: If81ee9732424750465ceae5d2136bb23288f6a5f
parents 5cfa643f 8cddce3f
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -564,7 +564,8 @@ static void android_view_RenderNode_requestPositionUpdates(JNIEnv* env, jobject,

            auto functor = std::bind(
                std::mem_fn(&SurfaceViewPositionUpdater::doUpdatePosition), this,
                (jlong) info.frameNumber, (jint) bounds.left, (jint) bounds.top,
                (jlong) info.canvasContext.getFrameNumber(),
                (jint) bounds.left, (jint) bounds.top,
                (jint) bounds.right, (jint) bounds.bottom);

            info.canvasContext.enqueueFrameWork(std::move(functor));
+0 −2
Original line number Diff line number Diff line
@@ -102,8 +102,6 @@ public:
    // tree state changes
    TreeObserver* observer = nullptr;

    // Frame number for use with synchronized surfaceview position updating
    int64_t frameNumber = -1;
    int32_t windowInsetLeft = 0;
    int32_t windowInsetTop = 0;
    bool updateWindowPositions = false;
+11 −4
Original line number Diff line number Diff line
@@ -108,6 +108,8 @@ void CanvasContext::setSurface(Surface* surface) {
        mEglSurface = mEglManager.createSurface(surface);
    }

    mFrameNumber = -1;

    if (mEglSurface != EGL_NO_SURFACE) {
        const bool preserveBuffer = (mSwapBehavior != kSwap_discardBuffer);
        mBufferPreserved = mEglManager.setPreserveBuffer(mEglSurface, preserveBuffer);
@@ -214,10 +216,6 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo,
    info.renderer = mCanvas;
#endif

    if (CC_LIKELY(mNativeSurface.get())) {
        info.frameNumber = static_cast<int64_t>(mNativeSurface->getNextFrameNumber());
    }

    mAnimationContext->startFrame(info.mode);
    for (const sp<RenderNode>& node : mRenderNodes) {
        // Only the primary target node will be drawn full - all other nodes would get drawn in
@@ -515,6 +513,7 @@ void CanvasContext::draw() {
        swap.swapTime = systemTime(CLOCK_MONOTONIC);
        swap.vsyncTime = mRenderThread.timeLord().latestVsync();
        mHaveNewSurface = false;
        mFrameNumber = -1;
    }

    // TODO: Use a fence for real completion?
@@ -782,6 +781,14 @@ void CanvasContext::enqueueFrameWork(std::function<void()>&& func) {
    mFrameWorkProcessor->add(task);
}

int64_t CanvasContext::getFrameNumber() {
    // mFrameNumber is reset to -1 when the surface changes or we swap buffers
    if (mFrameNumber == -1 && mNativeSurface.get()) {
        mFrameNumber = static_cast<int64_t>(mNativeSurface->getNextFrameNumber());
    }
    return mFrameNumber;
}

} /* namespace renderthread */
} /* namespace uirenderer */
} /* namespace android */
+3 −0
Original line number Diff line number Diff line
@@ -166,6 +166,8 @@ public:
    // Used to queue up work that needs to be completed before this frame completes
    ANDROID_API void enqueueFrameWork(std::function<void()>&& func);

    ANDROID_API int64_t getFrameNumber();

private:
    friend class RegisterFrameCallbackTask;
    // TODO: Replace with something better for layer & other GL object
@@ -195,6 +197,7 @@ private:
    };

    RingBuffer<SwapHistory, 3> mSwapHistory;
    int64_t mFrameNumber = -1;

    bool mOpaque;
#if HWUI_NEW_OPS