summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/Layer.cpp
diff options
context:
space:
mode:
author Brian C. Anderson <brianderson@google.com> 2017-02-17 22:17:35 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-02-17 22:17:36 +0000
commitf810b29ebc8564f94ff7fb14f2d13a0f4d111703 (patch)
treed99aec6c734c984cfb96779aedc1549646ebc3a5 /services/surfaceflinger/Layer.cpp
parent873e2eee781f323a8aa0283cab5924fa4cd7ecfe (diff)
parent5ea5e5905170f32d5cf45ad35c552d64743892c3 (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.cpp30
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);