diff options
| author | 2017-02-17 22:17:35 +0000 | |
|---|---|---|
| committer | 2017-02-17 22:17:36 +0000 | |
| commit | f810b29ebc8564f94ff7fb14f2d13a0f4d111703 (patch) | |
| tree | d99aec6c734c984cfb96779aedc1549646ebc3a5 /services/surfaceflinger/Layer.cpp | |
| parent | 873e2eee781f323a8aa0283cab5924fa4cd7ecfe (diff) | |
| parent | 5ea5e5905170f32d5cf45ad35c552d64743892c3 (diff) | |
Merge changes from topic 'GPU_replace_GL'
* changes:
Fix unexpected FrameEvents on BufferQueue reconnect
Add FrameEvents::isValidTimestamp
Change GL references to GPU for getFrameTimestamps.
Clean up FrameTimestamp log messages.
Diffstat (limited to 'services/surfaceflinger/Layer.cpp')
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 46a7338b10..4ea029f5b1 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), @@ -1904,8 +1904,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. @@ -1943,14 +1945,19 @@ bool Layer::onPostComposition(const std::shared_ptr<FenceTime>& glDoneFence, #ifdef USE_HWC2 void Layer::releasePendingBuffer(nsecs_t dequeueReadyTime) { - mSurfaceFlingerConsumer->releasePendingBuffer(); + if (!mSurfaceFlingerConsumer->releasePendingBuffer()) { + return; + } + auto releaseFenceTime = std::make_shared<FenceTime>( mSurfaceFlingerConsumer->getPrevFinalReleaseFence()); 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 @@ -2136,8 +2143,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 } @@ -2372,6 +2381,11 @@ void Layer::dumpFrameEvents(String8& result) { mFrameEventHistory.dump(result); } +void Layer::onDisconnect() { + Mutex::Autolock lock(mFrameEventHistoryMutex); + mFrameEventHistory.onDisconnect(); +} + void Layer::addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps, FrameEventHistoryDelta *outDelta) { Mutex::Autolock lock(mFrameEventHistoryMutex); |