summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlingerConsumer.cpp
diff options
context:
space:
mode:
author Brian Anderson <brianderson@google.com> 2016-12-01 16:54:33 -0800
committer Brian Anderson <brianderson@google.com> 2017-02-15 16:41:26 -0800
commit5ea5e5905170f32d5cf45ad35c552d64743892c3 (patch)
treefbb4f89afcc0f593652fe722e2e2e351a12ca921 /services/surfaceflinger/SurfaceFlingerConsumer.cpp
parented816e6cb4ca15181bf6120890c85290b5f7c02b (diff)
Fix unexpected FrameEvents on BufferQueue reconnect
Helps reduce the number of ALOGE's being hit when switching between apps. * Notify Layer when the Producer disconnects. * Avoid sending event deltas from a previous connection. * Avoid releasing a frame more than once. Test: adb shell /data/nativetest/libgui_test/libgui_test --gtest_filter=*GetFrameTimestamps* Change-Id: I64f314be72ddb154b584d726ac382cd468e345bf
Diffstat (limited to 'services/surfaceflinger/SurfaceFlingerConsumer.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlingerConsumer.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/services/surfaceflinger/SurfaceFlingerConsumer.cpp b/services/surfaceflinger/SurfaceFlingerConsumer.cpp
index 942af139ec..bb1ff06065 100644
--- a/services/surfaceflinger/SurfaceFlingerConsumer.cpp
+++ b/services/surfaceflinger/SurfaceFlingerConsumer.cpp
@@ -211,11 +211,11 @@ void SurfaceFlingerConsumer::setReleaseFence(const sp<Fence>& fence)
}
}
-void SurfaceFlingerConsumer::releasePendingBuffer()
+bool SurfaceFlingerConsumer::releasePendingBuffer()
{
if (!mPendingRelease.isPending) {
ALOGV("Pending buffer already released");
- return;
+ return false;
}
ALOGV("Releasing pending buffer");
Mutex::Autolock lock(mMutex);
@@ -225,6 +225,7 @@ void SurfaceFlingerConsumer::releasePendingBuffer()
ALOGE_IF(result != NO_ERROR, "releasePendingBuffer failed: %s (%d)",
strerror(-result), result);
mPendingRelease = PendingRelease();
+ return true;
}
#endif
@@ -261,6 +262,13 @@ void SurfaceFlingerConsumer::onSidebandStreamChanged() {
}
}
+void SurfaceFlingerConsumer::onDisconnect() {
+ sp<Layer> l = mLayer.promote();
+ if (l.get()) {
+ l->onDisconnect();
+ }
+}
+
void SurfaceFlingerConsumer::addAndGetFrameTimestamps(
const NewFrameEventsEntry* newTimestamps,
FrameEventHistoryDelta *outDelta) {