evas-wayland-shm: Improve next buffer selection algorithm

When triple buffering it's possible that we'll only need two buffers at
a time for long durations.  When we finally call upon a third buffer it
hasn't been used recently enough to do a partial redraw.
By picking the oldest available buffer when multiple buffers are free we
can increase the likelihood of doing partial redraws.

Based on 79409757c6 by Derek Foreman.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2016-10-26 11:53:49 -04:00
parent bb2a55ead6
commit f3d1b2d7da
1 changed files with 8 additions and 7 deletions

View File

@ -461,18 +461,19 @@ _evas_shm_surface_reconfigure(Surface *s, int w, int h, uint32_t flags)
static Shm_Leaf *
_evas_shm_surface_wait(Shm_Surface *surface)
{
int iterations = 0, i;
int i = 0, best = -1, best_age = -1;
while (iterations++ < 10)
for (i = 0; i < surface->num_buff; i++)
{
for (i = 0; i < surface->num_buff; i++)
if (surface->leaf[i].busy) continue;
if ((surface->leaf[i].valid) && (surface->leaf[i].age > best_age))
{
if (surface->leaf[i].busy) continue;
if (surface->leaf[i].valid) return &surface->leaf[i];
best = i;
best_age = surface->leaf[i].age;
}
wl_display_dispatch_pending(surface->disp);
}
if (best >= 0) return &surface->leaf[best];
return NULL;
}