Merge "Make getFrameNumber lazy" into nyc-dev
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user