ecore_wl2: Add buffer_age_get API and use it in surface code

This commit is contained in:
Derek Foreman 2018-01-25 16:08:20 -06:00
parent ebcce5aefa
commit e97a8cefe8
3 changed files with 14 additions and 3 deletions

View File

@ -2009,6 +2009,7 @@ EAPI void ecore_wl2_buffer_unlock(Ecore_Wl2_Buffer *b);
EAPI void ecore_wl2_buffer_destroy(Ecore_Wl2_Buffer *b);
EAPI Eina_Bool ecore_wl2_buffer_busy_get(Ecore_Wl2_Buffer *buffer);
EAPI void ecore_wl2_buffer_busy_set(Ecore_Wl2_Buffer *buffer);
EAPI int ecore_wl2_buffer_age_get(Ecore_Wl2_Buffer *buffer);
EAPI Ecore_Wl2_Surface *ecore_wl2_surface_create(Ecore_Wl2_Window *win, Eina_Bool alpha);
EAPI void ecore_wl2_surface_destroy(Ecore_Wl2_Surface *surface);

View File

@ -688,6 +688,14 @@ ecore_wl2_buffer_busy_set(Ecore_Wl2_Buffer *buffer)
buffer->busy = EINA_TRUE;
}
EAPI int
ecore_wl2_buffer_age_get(Ecore_Wl2_Buffer *buffer)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(buffer, 0);
return buffer->age;
}
static Ecore_Wl2_Buffer *
_ecore_wl2_buffer_partial_create(int w, int h, Eina_Bool alpha)
{

View File

@ -84,14 +84,16 @@ _evas_dmabuf_surface_wait(Ecore_Wl2_Surface *s)
Ecore_Wl2_Buffer *b, *best = NULL;
Eina_List *l;
int best_age = -1;
int age;
EINA_LIST_FOREACH(s->buffers, l, b)
{
if (ecore_wl2_buffer_busy_get(b)) continue;
if (b->age > best_age)
age = ecore_wl2_buffer_age_get(b);
if (age > best_age)
{
best = b;
best_age = b->age;
best_age = age;
}
}
@ -132,7 +134,7 @@ _evas_dmabuf_surface_assign(Ecore_Wl2_Surface *s)
EINA_LIST_FOREACH(s->buffers, l, b)
b->age++;
return s->current->age;
return ecore_wl2_buffer_age_get(s->current);
}
static void