SF: Always perform sideband transactions

On normal Layers, we defer applying resize transactions until a buffer
of the correct size arrives. This breaks with sideband streams, because
buffers are not seen by SurfaceFlinger. This change applies
transactions immediately for Layers which have a sideband stream
attached to avoid that problem.

Bug: 20428254
Change-Id: I379d8aaef460d467cdf8432764b4a504928fb65a
(cherry picked from commit c300b8b506536e1bf94ffd8a3b75d46e776923e0)
This commit is contained in:
Dan Stoza 2015-04-22 14:59:08 -07:00
parent e647dddebb
commit 9e9b044554

View File

@ -918,7 +918,7 @@ uint32_t Layer::doTransaction(uint32_t flags) {
const bool resizePending = (c.requested.w != c.active.w) || const bool resizePending = (c.requested.w != c.active.w) ||
(c.requested.h != c.active.h); (c.requested.h != c.active.h);
if (resizePending) { if (resizePending && mSidebandStream == NULL) {
// don't let Layer::doTransaction update the drawing state // don't let Layer::doTransaction update the drawing state
// if we have a pending resize, unless we are in fixed-size mode. // if we have a pending resize, unless we are in fixed-size mode.
// the drawing state will be updated only once we receive a buffer // the drawing state will be updated only once we receive a buffer
@ -927,6 +927,10 @@ uint32_t Layer::doTransaction(uint32_t flags) {
// in particular, we want to make sure the clip (which is part // in particular, we want to make sure the clip (which is part
// of the geometry state) is latched together with the size but is // of the geometry state) is latched together with the size but is
// latched immediately when no resizing is involved. // latched immediately when no resizing is involved.
//
// If a sideband stream is attached, however, we want to skip this
// optimization so that transactions aren't missed when a buffer
// never arrives
flags |= eDontUpdateGeometryState; flags |= eDontUpdateGeometryState;
} }