diff options
-rw-r--r-- | libs/gui/FrameTimestamps.cpp | 19 | ||||
-rw-r--r-- | libs/ui/FenceTime.cpp | 18 | ||||
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 20 |
3 files changed, 32 insertions, 25 deletions
diff --git a/libs/gui/FrameTimestamps.cpp b/libs/gui/FrameTimestamps.cpp index a6fa38aae5..1b44e3a425 100644 --- a/libs/gui/FrameTimestamps.cpp +++ b/libs/gui/FrameTimestamps.cpp @@ -16,6 +16,8 @@ #include <gui/FrameTimestamps.h> +#define LOG_TAG "FrameEvents" + #include <cutils/compiler.h> // For CC_[UN]LIKELY #include <inttypes.h> #include <utils/Log.h> @@ -256,8 +258,7 @@ void ProducerFrameEventHistory::updateAcquireFence( uint64_t frameNumber, std::shared_ptr<FenceTime>&& acquire) { FrameEvents* frame = getFrame(frameNumber, &mAcquireOffset); if (frame == nullptr) { - ALOGE("ProducerFrameEventHistory::updateAcquireFence: " - "Did not find frame."); + ALOGE("updateAcquireFence: Did not find frame."); return; } @@ -277,8 +278,8 @@ void ProducerFrameEventHistory::applyDelta( for (auto& d : delta.mDeltas) { // Avoid out-of-bounds access. - if (d.mIndex >= mFrames.size()) { - ALOGE("ProducerFrameEventHistory::applyDelta: Bad index."); + if (CC_UNLIKELY(d.mIndex >= mFrames.size())) { + ALOGE("applyDelta: Bad index."); return; } @@ -337,9 +338,7 @@ void ProducerFrameEventHistory::applyFenceDelta(FenceTimeline* timeline, case FenceTime::Snapshot::State::EMPTY: return; case FenceTime::Snapshot::State::FENCE: - if (CC_UNLIKELY((*dst)->isValid())) { - ALOGE("applyFenceDelta: Unexpected fence."); - } + ALOGE_IF((*dst)->isValid(), "applyFenceDelta: Unexpected fence."); *dst = createFenceTime(src.fence); timeline->push(*dst); return; @@ -454,8 +453,8 @@ void ConsumerFrameEventHistory::addRetire( void ConsumerFrameEventHistory::addRelease(uint64_t frameNumber, nsecs_t dequeueReadyTime, std::shared_ptr<FenceTime>&& release) { FrameEvents* frame = getFrame(frameNumber, &mReleaseOffset); - if (frame == nullptr) { - ALOGE("ConsumerFrameEventHistory::addRelease: Did not find frame."); + if (CC_UNLIKELY(frame == nullptr)) { + ALOGE("addRelease: Did not find frame (%" PRIu64 ").", frameNumber); return; } frame->addReleaseCalled = true; @@ -648,7 +647,7 @@ FrameEventHistoryDelta& FrameEventHistoryDelta::operator=( mCompositorTiming = src.mCompositorTiming; if (CC_UNLIKELY(!mDeltas.empty())) { - ALOGE("FrameEventHistoryDelta: Clobbering history."); + ALOGE("FrameEventHistoryDelta assign clobbering history."); } mDeltas = std::move(src.mDeltas); ALOGE_IF(src.mDeltas.empty(), "Source mDeltas not empty."); diff --git a/libs/ui/FenceTime.cpp b/libs/ui/FenceTime.cpp index 8106b16009..14147663de 100644 --- a/libs/ui/FenceTime.cpp +++ b/libs/ui/FenceTime.cpp @@ -16,6 +16,8 @@ #include <ui/FenceTime.h> +#define LOG_TAG "FenceTime" + #include <cutils/compiler.h> // For CC_[UN]LIKELY #include <utils/Log.h> #include <inttypes.h> @@ -62,8 +64,11 @@ FenceTime::FenceTime(sp<Fence>&& fence) FenceTime::FenceTime(nsecs_t signalTime) : mState(Fence::isValidTimestamp(signalTime) ? State::VALID : State::INVALID), mFence(nullptr), - mSignalTime(signalTime == Fence::SIGNAL_TIME_PENDING ? - Fence::SIGNAL_TIME_INVALID : signalTime) { + mSignalTime(signalTime) { + if (CC_UNLIKELY(mSignalTime == Fence::SIGNAL_TIME_PENDING)) { + ALOGE("Pending signal time not allowed after signal."); + mSignalTime = Fence::SIGNAL_TIME_INVALID; + } } void FenceTime::applyTrustedSnapshot(const Snapshot& src) { @@ -71,7 +76,7 @@ void FenceTime::applyTrustedSnapshot(const Snapshot& src) { // Applying Snapshot::State::FENCE, could change the valid state of the // FenceTime, which is not allowed. Callers should create a new // FenceTime from the snapshot instead. - ALOGE("FenceTime::applyTrustedSnapshot: Unexpected fence."); + ALOGE("applyTrustedSnapshot: Unexpected fence."); return; } @@ -332,16 +337,13 @@ void FenceToFenceTimeMap::signalAllForTest( continue; } ALOGE_IF(!fenceTime->isValid(), - "FenceToFenceTimeMap::signalAllForTest: " - "Signaling invalid fence."); + "signalAllForTest: Signaling invalid fence."); fenceTime->signalForTest(signalTime); signaled = true; } } - if (!signaled) { - ALOGE("FenceToFenceTimeMap::signalAllForTest: Nothing to signal."); - } + ALOGE_IF(!signaled, "signalAllForTest: Nothing to signal."); } void FenceToFenceTimeMap::garbageCollectLocked() { diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index a854aec4bd..8a6ec3c355 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -82,7 +82,7 @@ Layer::Layer(SurfaceFlinger* flinger, const sp<Client>& client, mCurrentOpacity(true), mBufferLatched(false), mCurrentFrameNumber(0), - mPreviousFrameNumber(-1U), + mPreviousFrameNumber(0), mRefreshPending(false), mFrameLatencyNeeded(false), mFiltering(false), @@ -1903,8 +1903,10 @@ bool Layer::onPostComposition(const std::shared_ptr<FenceTime>& glDoneFence, Mutex::Autolock lock(mFrameEventHistoryMutex); mFrameEventHistory.addPostComposition(mCurrentFrameNumber, glDoneFence, presentFence, compositorTiming); - mFrameEventHistory.addRetire(mPreviousFrameNumber, - retireFence); + if (mPreviousFrameNumber != 0) { + mFrameEventHistory.addRetire(mPreviousFrameNumber, + retireFence); + } } // Update mFrameTracker. @@ -1948,8 +1950,10 @@ void Layer::releasePendingBuffer(nsecs_t dequeueReadyTime) { mReleaseTimeline.push(releaseFenceTime); Mutex::Autolock lock(mFrameEventHistoryMutex); - mFrameEventHistory.addRelease( - mPreviousFrameNumber, dequeueReadyTime, std::move(releaseFenceTime)); + if (mPreviousFrameNumber != 0) { + mFrameEventHistory.addRelease(mPreviousFrameNumber, + dequeueReadyTime, std::move(releaseFenceTime)); + } } #endif @@ -2135,8 +2139,10 @@ Region Layer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime) auto releaseFenceTime = std::make_shared<FenceTime>( mSurfaceFlingerConsumer->getPrevFinalReleaseFence()); mReleaseTimeline.push(releaseFenceTime); - mFrameEventHistory.addRelease( - mPreviousFrameNumber, latchTime, std::move(releaseFenceTime)); + if (mPreviousFrameNumber != 0) { + mFrameEventHistory.addRelease(mPreviousFrameNumber, + latchTime, std::move(releaseFenceTime)); + } #endif } |