Update sideband stream when layer has queued a buffer
Layer which is disconnected from the sideband stream
cannot display a queued frame. This CL updates the
sideband when a frame is queued.
Bug: 159511848
Test: m surfaceflinger
Test: run the test from b/159511848
Change-Id: Iec532d63880b218fba5f3ccc7056ca4d283f32c6
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
index 07be791..09c10e0 100644
--- a/services/surfaceflinger/BufferQueueLayer.cpp
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
@@ -208,8 +208,14 @@
}
bool BufferQueueLayer::latchSidebandStream(bool& recomputeVisibleRegions) {
+ const bool updateSidebandStream = hasFrameUpdate() && mSidebandStream.get();
+ ALOGV_IF(updateSidebandStream,
+ "[%s] has both sideband stream and buffer. Updating the sideband stream.",
+ mName.c_str());
+
bool sidebandStreamChanged = true;
- if (mSidebandStreamChanged.compare_exchange_strong(sidebandStreamChanged, false)) {
+ if (mSidebandStreamChanged.compare_exchange_strong(sidebandStreamChanged, false) ||
+ updateSidebandStream) {
// mSidebandStreamChanged was changed to false
mSidebandStream = mConsumer->getSidebandStream();
auto* layerCompositionState = editCompositionState();