wayland_shm: Add swap mode fallback when buffer age changes

This copies the behaviour in opengl_x11 engine, where the buffer
age needs to be continuously the same to be taken into account.
If the age varies, then we fallback to a full redraw.

Apparently this fixes issues on actual devices. I tested this
patch in weston (I didn't have issues before and buffer age is 1).
This commit is contained in:
Jean-Philippe Andre 2016-10-18 17:36:43 +09:00
parent 2922b68fdf
commit 62ca4486ea
2 changed files with 11 additions and 5 deletions

View File

@ -107,6 +107,7 @@ struct _Outbuf
int rotation;
int onebuf;
int num_buff;
int prev_age;
Outbuf_Depth depth;
Evas_Engine_Info_Wayland_Shm *info;

View File

@ -314,17 +314,22 @@ _evas_outbuf_flush(Outbuf *ob, Tilebuf_Rect *rects EINA_UNUSED, Evas_Render_Mode
Render_Engine_Swap_Mode
_evas_outbuf_swap_mode_get(Outbuf *ob)
{
Render_Engine_Swap_Mode mode;
int age;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
age = ob->surface->funcs.assign(ob->surface);
if (age == 1) return MODE_COPY;
else if (age == 2) return MODE_DOUBLE;
else if (age == 3) return MODE_TRIPLE;
else if (age == 4) return MODE_QUADRUPLE;
if (age == 1) mode = MODE_COPY;
else if (age == 2) mode = MODE_DOUBLE;
else if (age == 3) mode = MODE_TRIPLE;
else if (age == 4) mode = MODE_QUADRUPLE;
else mode = MODE_FULL;
return MODE_FULL;
if (ob->prev_age != age) mode = MODE_FULL;
ob->prev_age = age;
return mode;
}
int