Render_Engine_Swap_Mode
_evas_outbuf_swapmode_get(Outbuf *ob)
{
- int i = 0;
+ int i = 0, n = 0, count = 0, ret = 0;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
- i = (ob->surface->last_buff - ob->surface->curr_buff +
- (ob->surface->last_buff > ob->surface->last_buff ?
- 0 : ob->surface->num_buff)) % ob->surface->num_buff;
+ if (!ob->surface->mapped) return MODE_FULL;
- switch (i)
+ for (; i < ob->surface->num_buff; i++)
{
- case 0:
- return MODE_COPY;
- case 1:
- return MODE_DOUBLE;
- case 2:
- return MODE_TRIPLE;
- case 3:
- return MODE_QUADRUPLE;
- default:
- return MODE_FULL;
+ n = (ob->surface->num_buff + ob->surface->curr_buff - (i)) % ob->surface->num_buff;
+ if (ob->surface->leaf[n].busy) count++;
}
+
+ if (count == ob->surface->num_buff) ret = MODE_FULL;
+ else if (count == 0) ret = MODE_COPY;
+ else if (count == 1) ret = MODE_DOUBLE;
+ else if (count == 2) ret = MODE_TRIPLE;
+ else if (count == 3) ret = MODE_QUADRUPLE;
+ else ret = MODE_FULL;
+
+ /* DBG("SWAPMODE: %d (0=FULL, 1=COPY, 2=DOUBLE, 3=TRIPLE, 4=QUAD", ret); */
+ /* DBG("\tBusy: %d", count); */
+
+ return ret;
}
int
_evas_shm_surface_swap(Shm_Surface *surface, Eina_Rectangle *rects, unsigned int count)
{
Shm_Leaf *leaf = NULL;
- int i = 0;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
return;
}
- DBG("Current Leaf %d", (int)(leaf - &surface->leaf[0]));
+ /* DBG("Current Leaf %d", (int)(leaf - &surface->leaf[0])); */
+
+ surface->last_buff = surface->curr_buff;
wl_surface_attach(surface->surface, leaf->data->buffer, 0, 0);
surface->dx = 0;
surface->dy = 0;
surface->redraw = EINA_TRUE;
+ surface->mapped = EINA_TRUE;
}
void *
if (!leaf)
{
- WRN("All buffers held by server");
+ /* WRN("All buffers held by server"); */
return NULL;
}
if (w) *w = leaf->w;
if (h) *h = leaf->h;
- surface->last_buff = surface->curr_buff;
surface->curr_buff = (int)(leaf - &surface->leaf[0]);
return leaf->data->map;