Merge "Make getFrameNumber lazy" into nyc-dev

This commit is contained in:
John Reck
2016-04-18 23:20:37 +00:00
committed by Android (Google) Code Review
4 changed files with 16 additions and 7 deletions

View File

@@ -564,7 +564,8 @@ static void android_view_RenderNode_requestPositionUpdates(JNIEnv* env, jobject,
auto functor = std::bind( auto functor = std::bind(
std::mem_fn(&SurfaceViewPositionUpdater::doUpdatePosition), this, 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); (jint) bounds.right, (jint) bounds.bottom);
info.canvasContext.enqueueFrameWork(std::move(functor)); info.canvasContext.enqueueFrameWork(std::move(functor));

View File

@@ -102,8 +102,6 @@ public:
// tree state changes // tree state changes
TreeObserver* observer = nullptr; TreeObserver* observer = nullptr;
// Frame number for use with synchronized surfaceview position updating
int64_t frameNumber = -1;
int32_t windowInsetLeft = 0; int32_t windowInsetLeft = 0;
int32_t windowInsetTop = 0; int32_t windowInsetTop = 0;
bool updateWindowPositions = false; bool updateWindowPositions = false;

View File

@@ -108,6 +108,8 @@ void CanvasContext::setSurface(Surface* surface) {
mEglSurface = mEglManager.createSurface(surface); mEglSurface = mEglManager.createSurface(surface);
} }
mFrameNumber = -1;
if (mEglSurface != EGL_NO_SURFACE) { if (mEglSurface != EGL_NO_SURFACE) {
const bool preserveBuffer = (mSwapBehavior != kSwap_discardBuffer); const bool preserveBuffer = (mSwapBehavior != kSwap_discardBuffer);
mBufferPreserved = mEglManager.setPreserveBuffer(mEglSurface, preserveBuffer); mBufferPreserved = mEglManager.setPreserveBuffer(mEglSurface, preserveBuffer);
@@ -214,10 +216,6 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo,
info.renderer = mCanvas; info.renderer = mCanvas;
#endif #endif
if (CC_LIKELY(mNativeSurface.get())) {
info.frameNumber = static_cast<int64_t>(mNativeSurface->getNextFrameNumber());
}
mAnimationContext->startFrame(info.mode); mAnimationContext->startFrame(info.mode);
for (const sp<RenderNode>& node : mRenderNodes) { for (const sp<RenderNode>& node : mRenderNodes) {
// Only the primary target node will be drawn full - all other nodes would get drawn in // 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.swapTime = systemTime(CLOCK_MONOTONIC);
swap.vsyncTime = mRenderThread.timeLord().latestVsync(); swap.vsyncTime = mRenderThread.timeLord().latestVsync();
mHaveNewSurface = false; mHaveNewSurface = false;
mFrameNumber = -1;
} }
// TODO: Use a fence for real completion? // TODO: Use a fence for real completion?
@@ -782,6 +781,14 @@ void CanvasContext::enqueueFrameWork(std::function<void()>&& func) {
mFrameWorkProcessor->add(task); 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 renderthread */
} /* namespace uirenderer */ } /* namespace uirenderer */
} /* namespace android */ } /* namespace android */

View File

@@ -166,6 +166,8 @@ public:
// Used to queue up work that needs to be completed before this frame completes // Used to queue up work that needs to be completed before this frame completes
ANDROID_API void enqueueFrameWork(std::function<void()>&& func); ANDROID_API void enqueueFrameWork(std::function<void()>&& func);
ANDROID_API int64_t getFrameNumber();
private: private:
friend class RegisterFrameCallbackTask; friend class RegisterFrameCallbackTask;
// TODO: Replace with something better for layer & other GL object // TODO: Replace with something better for layer & other GL object
@@ -195,6 +197,7 @@ private:
}; };
RingBuffer<SwapHistory, 3> mSwapHistory; RingBuffer<SwapHistory, 3> mSwapHistory;
int64_t mFrameNumber = -1;
bool mOpaque; bool mOpaque;
#if HWUI_NEW_OPS #if HWUI_NEW_OPS