wayland_shm: Fix resize optimization

We're supposed to allocate a large pool at startup and use it for
resizing to save pool allocations.  However, this was broken and
we ended up allocating both a large pool and a proper sized pool
every resize.

This restores correct behaviour.
This commit is contained in:
Derek Foreman 2016-04-04 16:57:30 -05:00 committed by Mike Blumenkrantz
parent 3121ea07c2
commit 406c234346
1 changed files with 17 additions and 2 deletions

View File

@ -5,6 +5,7 @@
static Eina_Bool _shm_leaf_create(Shm_Surface *surface, Shm_Leaf *leaf, int w, int h);
static void _shm_leaf_release(Shm_Leaf *leaf);
static void _shm_leaf_destroy(Shm_Leaf *leaf);
static struct wl_shm_pool *
_shm_pool_make(struct wl_shm *shm, int size, void **data)
@ -301,11 +302,25 @@ static void
_shm_leaf_release(Shm_Leaf *leaf)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
Shm_Pool *resize_pool;
/* if we delete resize_pool here we blow away the clever optimization
* it provides (and end up doing two allocations per resize when we
* might have done none at all).
*/
resize_pool = leaf->resize_pool;
if (leaf->data) _shm_data_destroy(leaf->data);
if (leaf->resize_pool) _shm_pool_destroy(leaf->resize_pool);
memset(leaf, 0, sizeof(*leaf));
leaf->valid = EINA_FALSE;
leaf->resize_pool = resize_pool;
}
static void
_shm_leaf_destroy(Shm_Leaf *leaf)
{
_shm_leaf_release(leaf);
if (leaf->resize_pool) _shm_pool_destroy(leaf->resize_pool);
leaf->resize_pool = NULL;
}
Shm_Surface *
@ -355,7 +370,7 @@ _evas_shm_surface_destroy(Shm_Surface *surface)
LOGFN(__FILE__, __LINE__, __FUNCTION__);
for (; i < surface->num_buff; i++)
_shm_leaf_release(&surface->leaf[i]);
_shm_leaf_destroy(&surface->leaf[i]);
free(surface);
}