Go to file
Christian Poetzsch 31ab17fb0c Fix the execution point of onFrameAvailable/onFrameReplaced callbacks
In a4650a5 the concept of a maximum frame number allowance for the consumer was
introduced. A call to acquireBuffers will only return buffers when their frame
number is less-than-or-equal-to this maximum frame number. When SurfaceFlinger
is the consumer, this maximum  frame number is calculated in the
onFrameAvailable/onFrameReplaced callbacks. These callbacks are called when a
new buffer is dequeued by the application. The problem is that these callbacks
are called _after_ the fence wait which is used to throttle the frame
production of client apps. When the previous frame needs a long time to draw,
those waits can potentially be a long time. As a result SurfaceFlinger won't do
any composition with the new frame until the wait is over.

Normally this isn't a big problem because there is a queue of buffers for
SurfaceFlinger to work with. However, this changes massively when a client app
is using a swap interval of zero. In this case, a new frame will instantly
replace the previous queued frame. However, SurfaceFlinger doesn't know this
until the onFrameReplaced callback gets called - which is delayed by the fence
wait. If the timing is bad, SurfaceFlinger never gets a chance to pick up a new
frame to do the composition with.

We see this behaviour on our TC development system (slow GPU) with legacy
on-screen benchmarks. Such apps are using a swap interval of zero and sometimes
frames don't get updated for several seconds. This behaviour can be also seen
on a Nexus5, although it isn't as obvious as on our TC.

The fix in this cl is to move the EGL throttling to the end of the queueBuffers
function. This ensures that if a frame gets replaced in the queue, all
consumers who installed the callbacks, get called in a timely fashion.

Change-Id: I36e9ecda162150f41e97d4fb7437963a3d86b371
Signed-off-by: Christian Poetzsch <christian.potzsch@imgtec.com>
2015-12-16 18:46:53 -08:00
build native: Restore VM memory overrides 2015-10-12 23:36:09 -07:00
cmds installd: Consider bundled app dir as a valid apk path 2015-11-07 17:54:10 -08:00
data/etc native: add ambient temperature & relative humidity sensor features 2015-11-04 12:28:21 -08:00
docs framework/native/docs: remove doc footer for jd output 2015-05-27 10:13:35 -07:00
include libbinder: allow devices to disable ashmem size tracking 2015-12-10 10:15:49 +11:00
libs Fix the execution point of onFrameAvailable/onFrameReplaced callbacks 2015-12-16 18:46:53 -08:00
opengl Android 6.0.1 release 3 2015-12-07 17:07:16 -08:00
services SF: Fix invalid reduction of transparent region from a layer. 2015-12-16 00:16:12 -05:00
MODULE_LICENSE_APACHE2
NOTICE