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