summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hendrik Wagenaar <hendrikw@google.com> 2017-02-07 14:27:28 -0800
committer Hendrik Wagenaar <hendrikw@google.com> 2017-02-07 15:45:16 -0800
commitcd11bd5909e50a3f69937f73a0b5871ad402d85f (patch)
tree08d2e0efe133f629f17da151e6d562522892ce14
parent2572bd4f89c575709349c9e6c31cd1c3a343d852 (diff)
Discard invisible surfaces
* Jiwen found that we would try to post invisible layers, and this would cause a hang. * Check to see if the surface is invisible, and if so, discard it Test: Manually tested with particles Change-Id: Id4a0813cb30bd48c3cfa4d13dcee59fcb5f58a8d
-rw-r--r--libs/vr/libvrflinger/display_surface.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/libs/vr/libvrflinger/display_surface.cpp b/libs/vr/libvrflinger/display_surface.cpp
index e1729f8cf0..7c821bfd68 100644
--- a/libs/vr/libvrflinger/display_surface.cpp
+++ b/libs/vr/libvrflinger/display_surface.cpp
@@ -381,6 +381,15 @@ void DisplaySurface::OnPostConsumer(
ATRACE_NAME("DisplaySurface::OnPostConsumer");
std::lock_guard<std::mutex> autolock(lock_);
+ if (!IsVisible()) {
+ ALOGD_IF(TRACE,
+ "DisplaySurface::OnPostConsumer: Discarding buffer_id=%d on "
+ "invisible surface.",
+ consumer->id());
+ consumer->Discard();
+ return;
+ }
+
if (posted_buffers_.IsFull()) {
ALOGE("Error: posted buffers full, overwriting");
posted_buffers_.PopBack();