bufferqueue: workaround: allow NULL fence with queueBuffer (DO NOT MERGE)
On one device there is a bug, not yet root-caused, that causes fence fds to not make it across binder from producer to consumer in the IGraphicBufferProducer::queueBuffer call. Rather than returning an error, which the producer typically treats as a fatal error, this change allows the buffer to be queued with no fence. This avoids an application crash at the risk of (likely single-frame) visible corruption. Bug: 17946343 Change-Id: I9ca89f94098c455e1e90f5f58d5336c936b04a9c
This commit is contained in:
parent
60fd3feeca
commit
5b0cbcf946
@ -522,7 +522,12 @@ status_t BufferQueueProducer::queueBuffer(int slot,
|
|||||||
|
|
||||||
if (fence == NULL) {
|
if (fence == NULL) {
|
||||||
BQ_LOGE("queueBuffer: fence is NULL");
|
BQ_LOGE("queueBuffer: fence is NULL");
|
||||||
return BAD_VALUE;
|
// Temporary workaround for b/17946343: soldier-on instead of returning an error. This
|
||||||
|
// prevents the client from dying, at the risk of visible corruption due to hwcomposer
|
||||||
|
// reading the buffer before the producer is done rendering it. Unless the buffer is the
|
||||||
|
// last frame of an animation, the corruption will be transient.
|
||||||
|
fence = Fence::NO_FENCE;
|
||||||
|
// return BAD_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (scalingMode) {
|
switch (scalingMode) {
|
||||||
|
Loading…
Reference in New Issue
Block a user