OSDN Git Service

SurfaceFlinger: Fix PTS on stale buffers
authorDan Stoza <stoza@google.com>
Tue, 28 Apr 2015 21:42:06 +0000 (14:42 -0700)
committerDan Stoza <stoza@google.com>
Fri, 1 May 2015 19:23:44 +0000 (12:23 -0700)
commitecc504043fddb7a75042ce402c67aedfac04d5e2
treeef6b8080362a8655a3291e5757dd72d202701898
parent7b2fc930077b1e6ca5946cae6834902318209474
SurfaceFlinger: Fix PTS on stale buffers

SurfaceFlinger's (Layer's) shadow copy of the BufferQueue queue was
getting out of sync for a few reasons. This change fixes these by
doing the following:

- Adds a check to re-synchronize the shadow copy every time we
  successfully acquire a buffer by first dropping stale buffers before
  removing the current buffer.
- Avoids trying to perform updates for buffers which have been rejected
  (for incorrect dimensions) by SurfaceFlinger.
- Adds IGraphicBufferConsumer::setShadowQueueSize, which allows the
  consumer to notify the BufferQueue that it is maintaining a shadow
  copy of the queue and prevents it from dropping so many buffers
  during acquireBuffer that it ends up returning a buffer for which the
  consumer has not yet received an onFrameAvailable call.

Bug: 20096136
Change-Id: I78d0738428005fc19b3be85cc8f1db498043612f
(cherry picked from commit 2e36f2283f48ab764b496490c73a132acf21df3a)
include/gui/BufferQueueConsumer.h
include/gui/BufferQueueCore.h
include/gui/IGraphicBufferConsumer.h
libs/gui/BufferQueueConsumer.cpp
libs/gui/BufferQueueCore.cpp
libs/gui/IGraphicBufferConsumer.cpp
services/surfaceflinger/Layer.cpp
services/surfaceflinger/SurfaceFlingerConsumer.cpp
services/surfaceflinger/SurfaceFlingerConsumer.h