Loading services/surfaceflinger/BufferQueueLayer.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -237,10 +237,14 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t getProducerStickyTransform() != 0, mName.string(), mOverrideScalingMode, getTransformToDisplayInverse(), mFreezeGeometryUpdates); const nsecs_t expectedPresentTime = mFlinger->mUseScheduler nsecs_t expectedPresentTime = mFlinger->mUseScheduler ? mFlinger->mScheduler->expectedPresentTime() : mFlinger->mPrimaryDispSync->expectedPresentTime(); if (isRemovedFromCurrentState()) { expectedPresentTime = 0; } // updateTexImage() below might drop the some buffers at the head of the queue if there is a // buffer behind them which is timely to be presented. However this buffer may not be signaled // yet. The code below makes sure that this wouldn't happen by setting maxFrameNumber to the Loading @@ -259,6 +263,7 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t } const uint64_t maxFrameNumberToAcquire = std::min(mLastFrameNumberReceived.load(), lastSignaledFrameNumber); status_t updateResult = mConsumer->updateTexImage(&r, expectedPresentTime, &mAutoRefresh, &queuedBuffer, maxFrameNumberToAcquire, releaseFence); Loading services/surfaceflinger/SurfaceFlinger.cpp +2 −10 Original line number Diff line number Diff line Loading @@ -3156,17 +3156,9 @@ void SurfaceFlinger::updateCursorAsync() void SurfaceFlinger::latchAndReleaseBuffer(const sp<Layer>& layer) { if (layer->hasReadyFrame()) { nsecs_t expectedPresentTime; if (mUseScheduler) { expectedPresentTime = mScheduler->expectedPresentTime(); } else { expectedPresentTime = mPrimaryDispSync->expectedPresentTime(); } if (layer->shouldPresentNow(expectedPresentTime)) { bool ignored = false; layer->latchBuffer(ignored, systemTime(), Fence::NO_FENCE); } } layer->releasePendingBuffer(systemTime()); } Loading Loading
services/surfaceflinger/BufferQueueLayer.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -237,10 +237,14 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t getProducerStickyTransform() != 0, mName.string(), mOverrideScalingMode, getTransformToDisplayInverse(), mFreezeGeometryUpdates); const nsecs_t expectedPresentTime = mFlinger->mUseScheduler nsecs_t expectedPresentTime = mFlinger->mUseScheduler ? mFlinger->mScheduler->expectedPresentTime() : mFlinger->mPrimaryDispSync->expectedPresentTime(); if (isRemovedFromCurrentState()) { expectedPresentTime = 0; } // updateTexImage() below might drop the some buffers at the head of the queue if there is a // buffer behind them which is timely to be presented. However this buffer may not be signaled // yet. The code below makes sure that this wouldn't happen by setting maxFrameNumber to the Loading @@ -259,6 +263,7 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t } const uint64_t maxFrameNumberToAcquire = std::min(mLastFrameNumberReceived.load(), lastSignaledFrameNumber); status_t updateResult = mConsumer->updateTexImage(&r, expectedPresentTime, &mAutoRefresh, &queuedBuffer, maxFrameNumberToAcquire, releaseFence); Loading
services/surfaceflinger/SurfaceFlinger.cpp +2 −10 Original line number Diff line number Diff line Loading @@ -3156,17 +3156,9 @@ void SurfaceFlinger::updateCursorAsync() void SurfaceFlinger::latchAndReleaseBuffer(const sp<Layer>& layer) { if (layer->hasReadyFrame()) { nsecs_t expectedPresentTime; if (mUseScheduler) { expectedPresentTime = mScheduler->expectedPresentTime(); } else { expectedPresentTime = mPrimaryDispSync->expectedPresentTime(); } if (layer->shouldPresentNow(expectedPresentTime)) { bool ignored = false; layer->latchBuffer(ignored, systemTime(), Fence::NO_FENCE); } } layer->releasePendingBuffer(systemTime()); } Loading