And ready_to_composite_queue.size() == 1, because buffers_sent_to_compositor.size() == 2.
And that is because the compositor is holding buffers across frames. Which is because it's full screen -- bypass!
So the answer is BufferQueue is behaving as well as it can. But if you want to avoid out-of-order frames and have bypass support then you need quad buffers :P
Actually, now I remember this is a problem I discovered in lp:~vanvugt/mir/double ... if you had framedropping and bypass then real buffer demand reached 4. If you enable bypass with framedropping and only have 3 buffers then you'll end up dropping your newest frame.
There is an alternative solution to quad-buffering though - Drop the oldest frame which *might* still be bypassed. Worst case is you end up tearing.
And ready_to_ composite_ queue.size( ) == 1, because buffers_ sent_to_ compositor. size() == 2.
And that is because the compositor is holding buffers across frames. Which is because it's full screen -- bypass!
So the answer is BufferQueue is behaving as well as it can. But if you want to avoid out-of-order frames and have bypass support then you need quad buffers :P
Actually, now I remember this is a problem I discovered in lp:~vanvugt/mir/double ... if you had framedropping and bypass then real buffer demand reached 4. If you enable bypass with framedropping and only have 3 buffers then you'll end up dropping your newest frame.
There is an alternative solution to quad-buffering though - Drop the oldest frame which *might* still be bypassed. Worst case is you end up tearing.