evas -> use mempool for many objects and things. but.. disable it for

now. use old calloc+free thing for 1.0 and enable mpool for 1.1. this
is just done in advance but disabled for some testing purposes looking
for some bugs.



SVN revision: 55006
This commit is contained in:
Carsten Haitzler 2010-11-26 10:01:18 +00:00
parent a636dab74d
commit c75b63a482
11 changed files with 167 additions and 50 deletions

View File

@ -5,6 +5,10 @@ static void evas_object_event_callback_clear(Evas_Object *obj);
static void evas_event_callback_clear(Evas *e); static void evas_event_callback_clear(Evas *e);
int _evas_event_counter = 0; int _evas_event_counter = 0;
EVAS_MEMPOOL(_mp_fn);
EVAS_MEMPOOL(_mp_cb);
EVAS_MEMPOOL(_mp_pc);
void void
_evas_post_event_callback_call(Evas *e) _evas_post_event_callback_call(Evas *e)
{ {
@ -19,7 +23,7 @@ _evas_post_event_callback_call(Evas *e)
{ {
if (!pc->func((void*)pc->data, e)) skip = 1; if (!pc->func((void*)pc->data, e)) skip = 1;
} }
free(pc); EVAS_MEMPOOL_FREE(_mp_pc, pc);
} }
_evas_unwalk(e); _evas_unwalk(e);
} }
@ -31,7 +35,7 @@ _evas_post_event_callback_free(Evas *e)
EINA_LIST_FREE(e->post_events, pc) EINA_LIST_FREE(e->post_events, pc)
{ {
free(pc); EVAS_MEMPOOL_FREE(_mp_pc, pc);
} }
_evas_unwalk(e); _evas_unwalk(e);
} }
@ -51,7 +55,7 @@ evas_event_callback_list_post_free(Eina_Inlist **list)
if (fn->delete_me) if (fn->delete_me)
{ {
*list = eina_inlist_remove(*list, EINA_INLIST_GET(fn)); *list = eina_inlist_remove(*list, EINA_INLIST_GET(fn));
free(fn); EVAS_MEMPOOL_FREE(_mp_fn, fn);
} }
} }
} }
@ -65,7 +69,7 @@ evas_object_event_callback_clear(Evas_Object *obj)
evas_event_callback_list_post_free(&obj->callbacks->callbacks); evas_event_callback_list_post_free(&obj->callbacks->callbacks);
if (!obj->callbacks->callbacks) if (!obj->callbacks->callbacks)
{ {
free(obj->callbacks); EVAS_MEMPOOL_FREE(_mp_cb, obj->callbacks);
obj->callbacks = NULL; obj->callbacks = NULL;
} }
} }
@ -79,7 +83,7 @@ evas_event_callback_clear(Evas *e)
evas_event_callback_list_post_free(&e->callbacks->callbacks); evas_event_callback_list_post_free(&e->callbacks->callbacks);
if (!e->callbacks->callbacks) if (!e->callbacks->callbacks)
{ {
free(e->callbacks); EVAS_MEMPOOL_FREE(_mp_cb, e->callbacks);
e->callbacks = NULL; e->callbacks = NULL;
} }
} }
@ -100,7 +104,7 @@ evas_object_event_callback_cleanup(Evas_Object *obj)
/* MEM OK */ /* MEM OK */
if (!obj->callbacks) return; if (!obj->callbacks) return;
evas_event_callback_list_post_free(&obj->callbacks->callbacks); evas_event_callback_list_post_free(&obj->callbacks->callbacks);
free(obj->callbacks); EVAS_MEMPOOL_FREE(_mp_cb, obj->callbacks);
obj->callbacks = NULL; obj->callbacks = NULL;
} }
@ -120,7 +124,7 @@ evas_event_callback_cleanup(Evas *e)
/* MEM OK */ /* MEM OK */
if (!e->callbacks) return; if (!e->callbacks) return;
evas_event_callback_list_post_free(&e->callbacks->callbacks); evas_event_callback_list_post_free(&e->callbacks->callbacks);
free(e->callbacks); EVAS_MEMPOOL_FREE(_mp_cb, e->callbacks);
e->callbacks = NULL; e->callbacks = NULL;
} }
@ -440,19 +444,22 @@ evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, Evas_O
if (!func) return; if (!func) return;
fn = evas_mem_calloc(sizeof(Evas_Func_Node)); if (!obj->callbacks)
{
EVAS_MEMPOOL_INIT(_mp_cb, "evas_callbacks", Evas_Callbacks, 512, );
obj->callbacks = EVAS_MEMPOOL_ALLOC(_mp_cb, Evas_Callbacks);
if (!obj->callbacks) return;
EVAS_MEMPOOL_PREP(_mp_cb, obj->callbacks, Evas_Callbacks);
}
EVAS_MEMPOOL_INIT(_mp_fn, "evas_func_node", Evas_Func_Node, 2048, );
fn = EVAS_MEMPOOL_ALLOC(_mp_fn, Evas_Func_Node);
if (!fn) return; if (!fn) return;
EVAS_MEMPOOL_PREP(_mp_fn, fn, Evas_Func_Node);
fn->func = func; fn->func = func;
fn->data = (void *)data; fn->data = (void *)data;
fn->type = type; fn->type = type;
if (!obj->callbacks)
obj->callbacks = evas_mem_calloc(sizeof(Evas_Callbacks));
if (!obj->callbacks)
{
free(fn);
return;
}
obj->callbacks->callbacks = obj->callbacks->callbacks =
eina_inlist_prepend(obj->callbacks->callbacks, EINA_INLIST_GET(fn)); eina_inlist_prepend(obj->callbacks->callbacks, EINA_INLIST_GET(fn));
} }
@ -648,19 +655,22 @@ evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, co
if (!func) return; if (!func) return;
fn = evas_mem_calloc(sizeof(Evas_Func_Node)); if (!e->callbacks)
{
EVAS_MEMPOOL_INIT(_mp_cb, "evas_callbacks", Evas_Callbacks, 512, );
e->callbacks = EVAS_MEMPOOL_ALLOC(_mp_cb, Evas_Callbacks);
if (!e->callbacks) return;
EVAS_MEMPOOL_PREP(_mp_cb, e->callbacks, Evas_Callbacks);
}
EVAS_MEMPOOL_INIT(_mp_fn, "evas_func_node", Evas_Func_Node, 2048, );
fn = EVAS_MEMPOOL_ALLOC(_mp_fn, Evas_Func_Node);
if (!fn) return; if (!fn) return;
EVAS_MEMPOOL_PREP(_mp_fn, fn, Evas_Func_Node);
fn->func = func; fn->func = func;
fn->data = (void *)data; fn->data = (void *)data;
fn->type = type; fn->type = type;
if (!e->callbacks)
e->callbacks = evas_mem_calloc(sizeof(Evas_Callbacks));
if (!e->callbacks)
{
free(fn);
return;
}
e->callbacks->callbacks = e->callbacks->callbacks =
eina_inlist_prepend(e->callbacks->callbacks, EINA_INLIST_GET(fn)); eina_inlist_prepend(e->callbacks->callbacks, EINA_INLIST_GET(fn));
} }
@ -809,8 +819,10 @@ evas_post_event_callback_push(Evas *e, Evas_Object_Event_Post_Cb func, const voi
return; return;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
pc = evas_mem_calloc(sizeof(Evas_Post_Callback)); EVAS_MEMPOOL_INIT(_mp_pc, "evas_post_callback", Evas_Post_Callback, 64, );
pc = EVAS_MEMPOOL_ALLOC(_mp_pc, Evas_Post_Callback);
if (!pc) return; if (!pc) return;
EVAS_MEMPOOL_PREP(_mp_pc, pc, Evas_Post_Callback);
if (e->delete_me) return; if (e->delete_me) return;
pc->func = func; pc->func = func;

View File

@ -123,6 +123,8 @@ static const Evas_Object_Func object_func =
* @{ * @{
*/ */
EVAS_MEMPOOL(_mp_obj);
/** /**
* Creates a new image object on the given evas. * Creates a new image object on the given evas.
* *
@ -2344,7 +2346,10 @@ evas_object_image_new(void)
Evas_Object_Image *o; Evas_Object_Image *o;
/* alloc obj private data */ /* alloc obj private data */
o = calloc(1, sizeof(Evas_Object_Image)); EVAS_MEMPOOL_INIT(_mp_obj, "evas_object_image", Evas_Object_Image, 256, NULL);
o = EVAS_MEMPOOL_ALLOC(_mp_obj, Evas_Object_Image);
if (!o) return NULL;
EVAS_MEMPOOL_PREP(_mp_obj, o, Evas_Object_Image);
o->magic = MAGIC_OBJ_IMAGE; o->magic = MAGIC_OBJ_IMAGE;
o->cur.fill.w = 0; o->cur.fill.w = 0;
o->cur.fill.h = 0; o->cur.fill.h = 0;
@ -2384,7 +2389,7 @@ evas_object_image_free(Evas_Object *obj)
o->magic = 0; o->magic = 0;
EINA_LIST_FREE(o->pixel_updates, r) EINA_LIST_FREE(o->pixel_updates, r)
eina_rectangle_free(r); eina_rectangle_free(r);
free(o); EVAS_MEMPOOL_FREE(_mp_obj, o);
} }
static void static void

View File

@ -78,6 +78,8 @@ static const Evas_Object_Func object_func =
* @{ * @{
*/ */
EVAS_MEMPOOL(_mp_obj);
/** /**
* Adds a new evas line object to the given evas. * Adds a new evas line object to the given evas.
* @param e The given evas. * @param e The given evas.
@ -253,7 +255,10 @@ evas_object_line_new(void)
Evas_Object_Line *o; Evas_Object_Line *o;
/* alloc obj private data */ /* alloc obj private data */
o = calloc(1, sizeof(Evas_Object_Line)); EVAS_MEMPOOL_INIT(_mp_obj, "evas_object_line", Evas_Object_Line, 16, NULL);
o = EVAS_MEMPOOL_ALLOC(_mp_obj, Evas_Object_Line);
if (!o) return NULL;
EVAS_MEMPOOL_PREP(_mp_obj, o, Evas_Object_Line);
o->magic = MAGIC_OBJ_LINE; o->magic = MAGIC_OBJ_LINE;
o->cur.x1 = 0; o->cur.x1 = 0;
o->cur.y1 = 0; o->cur.y1 = 0;

View File

@ -1,11 +1,13 @@
#include "evas_common.h" #include "evas_common.h"
#include "evas_private.h" #include "evas_private.h"
EVAS_MEMPOOL(_mp_obj);
EVAS_MEMPOOL(_mp_sh);
static Eina_Inlist * static Eina_Inlist *
get_layer_objects(Evas_Layer *l) get_layer_objects(Evas_Layer *l)
{ {
if( !l || !l->objects ) return NULL; if ((!l) || (!l->objects)) return NULL;
return (EINA_INLIST_GET(l->objects)); return (EINA_INLIST_GET(l->objects));
} }
@ -15,9 +17,11 @@ evas_object_new(Evas *e __UNUSED__)
{ {
Evas_Object *obj; Evas_Object *obj;
obj = calloc(1, sizeof(Evas_Object)); EVAS_MEMPOOL_INIT(_mp_obj, "evas_object", Evas_Object, 512, NULL);
obj = EVAS_MEMPOOL_ALLOC(_mp_obj, Evas_Object);
if (!obj) return NULL; if (!obj) return NULL;
EVAS_MEMPOOL_PREP(_mp_obj, obj, Evas_Object);
obj->magic = MAGIC_OBJ; obj->magic = MAGIC_OBJ;
obj->cur.scale = 1.0; obj->cur.scale = 1.0;
obj->prev.scale = 1.0; obj->prev.scale = 1.0;
@ -51,8 +55,11 @@ evas_object_free(Evas_Object *obj, int clean_layer)
free(node); free(node);
} }
obj->magic = 0; obj->magic = 0;
if (obj->size_hints) free(obj->size_hints); if (obj->size_hints)
free(obj); {
EVAS_MEMPOOL_FREE(_mp_sh, obj->size_hints);
}
EVAS_MEMPOOL_FREE(_mp_obj, obj);
} }
void void
@ -587,7 +594,10 @@ _evas_object_size_hint_alloc(Evas_Object *obj)
{ {
if (obj->size_hints) return; if (obj->size_hints) return;
obj->size_hints = calloc(1, sizeof(Evas_Size_Hints)); EVAS_MEMPOOL_INIT(_mp_sh, "evas_size_hints", Evas_Size_Hints, 512, );
obj->size_hints = EVAS_MEMPOOL_ALLOC(_mp_sh, Evas_Size_Hints);
if (!obj->size_hints) return;
EVAS_MEMPOOL_PREP(_mp_sh, obj->size_hints, Evas_Size_Hints);
obj->size_hints->max.w = -1; obj->size_hints->max.w = -1;
obj->size_hints->max.h = -1; obj->size_hints->max.h = -1;
obj->size_hints->align.x = 0.5; obj->size_hints->align.x = 0.5;

View File

@ -80,6 +80,8 @@ static const Evas_Object_Func object_func =
* @{ * @{
*/ */
EVAS_MEMPOOL(_mp_obj);
/** /**
* Adds a new evas polygon object to the given evas. * Adds a new evas polygon object to the given evas.
* @param e The given evas. * @param e The given evas.
@ -281,7 +283,10 @@ evas_object_polygon_new(void)
Evas_Object_Polygon *o; Evas_Object_Polygon *o;
/* alloc obj private data */ /* alloc obj private data */
o = calloc(1, sizeof(Evas_Object_Polygon)); EVAS_MEMPOOL_INIT(_mp_obj, "evas_object_polygon", Evas_Object_Polygon, 32, NULL);
o = EVAS_MEMPOOL_ALLOC(_mp_obj, Evas_Object_Polygon);
if (!o) return NULL;
EVAS_MEMPOOL_PREP(_mp_obj, o, Evas_Object_Polygon);
o->magic = MAGIC_OBJ_POLYGON; o->magic = MAGIC_OBJ_POLYGON;
return o; return o;
} }
@ -306,7 +311,7 @@ evas_object_polygon_free(Evas_Object *obj)
obj->layer->evas->engine.data.context, obj->layer->evas->engine.data.context,
o->engine_data); o->engine_data);
o->magic = 0; o->magic = 0;
free(o); EVAS_MEMPOOL_FREE(_mp_obj, o);
} }
static void static void

View File

@ -72,6 +72,8 @@ static const Evas_Object_Func object_func =
* @{ * @{
*/ */
EVAS_MEMPOOL(_mp_obj);
/** /**
* Adds a rectangle to the given evas. * Adds a rectangle to the given evas.
* @param e The given evas. * @param e The given evas.
@ -125,7 +127,10 @@ evas_object_rectangle_new(void)
Evas_Object_Rectangle *o; Evas_Object_Rectangle *o;
/* alloc obj private data */ /* alloc obj private data */
o = calloc(1, sizeof(Evas_Object_Rectangle)); EVAS_MEMPOOL_INIT(_mp_obj, "evas_object_rectangle", Evas_Object_Rectangle, 256, NULL);
o = EVAS_MEMPOOL_ALLOC(_mp_obj, Evas_Object_Rectangle);
if (!o) return NULL;
EVAS_MEMPOOL_PREP(_mp_obj, o, Evas_Object_Rectangle);
o->magic = MAGIC_OBJ_RECTANGLE; o->magic = MAGIC_OBJ_RECTANGLE;
return o; return o;
} }
@ -142,7 +147,7 @@ evas_object_rectangle_free(Evas_Object *obj)
MAGIC_CHECK_END(); MAGIC_CHECK_END();
/* free obj */ /* free obj */
o->magic = 0; o->magic = 0;
free(o); EVAS_MEMPOOL_FREE(_mp_obj, o);
} }
static void static void

View File

@ -64,6 +64,9 @@ static const Evas_Object_Func object_func =
NULL NULL
}; };
EVAS_MEMPOOL(_mp_obj);
EVAS_MEMPOOL(_mp_cb);
/* public funcs */ /* public funcs */
/** /**
* Store a pointer to user data for a smart object. * Store a pointer to user data for a smart object.
@ -428,7 +431,10 @@ evas_object_smart_callback_add(Evas_Object *obj, const char *event, void (*func)
MAGIC_CHECK_END(); MAGIC_CHECK_END();
if (!event) return; if (!event) return;
if (!func) return; if (!func) return;
cb = calloc(1, sizeof(Evas_Smart_Callback)); EVAS_MEMPOOL_INIT(_mp_cb, "evas_smart_callback", Evas_Smart_Callback, 512, );
cb = EVAS_MEMPOOL_ALLOC(_mp_cb, Evas_Smart_Callback);
if (!cb) return;
EVAS_MEMPOOL_PREP(_mp_cb, cb, Evas_Smart_Callback);
cb->event = eina_stringshare_add(event); cb->event = eina_stringshare_add(event);
cb->func = func; cb->func = func;
cb->func_data = (void *)data; cb->func_data = (void *)data;
@ -887,7 +893,7 @@ evas_object_smart_callbacks_clear(Evas_Object *obj)
{ {
o->callbacks = eina_list_remove(o->callbacks, cb); o->callbacks = eina_list_remove(o->callbacks, cb);
if (cb->event) eina_stringshare_del(cb->event); if (cb->event) eina_stringshare_del(cb->event);
free(cb); EVAS_MEMPOOL_FREE(_mp_cb, cb);
} }
} }
} }
@ -925,7 +931,7 @@ evas_object_smart_cleanup(Evas_Object *obj)
cb = o->callbacks->data; cb = o->callbacks->data;
o->callbacks = eina_list_remove(o->callbacks, cb); o->callbacks = eina_list_remove(o->callbacks, cb);
if (cb->event) eina_stringshare_del(cb->event); if (cb->event) eina_stringshare_del(cb->event);
free(cb); EVAS_MEMPOOL_FREE(_mp_cb, cb);
} }
evas_smart_cb_descriptions_resize(&o->callbacks_descriptions, 0); evas_smart_cb_descriptions_resize(&o->callbacks_descriptions, 0);
@ -1022,7 +1028,10 @@ evas_object_smart_new(void)
Evas_Object_Smart *o; Evas_Object_Smart *o;
/* alloc obj private data */ /* alloc obj private data */
o = calloc(1, sizeof(Evas_Object_Smart)); EVAS_MEMPOOL_INIT(_mp_obj, "evas_object_smart", Evas_Object_Smart, 256, NULL);
o = EVAS_MEMPOOL_ALLOC(_mp_obj, Evas_Object_Smart);
if (!o) return NULL;
EVAS_MEMPOOL_PREP(_mp_obj, o, Evas_Object_Smart);
o->magic = MAGIC_OBJ_SMART; o->magic = MAGIC_OBJ_SMART;
return o; return o;
} }
@ -1039,7 +1048,7 @@ evas_object_smart_free(Evas_Object *obj)
MAGIC_CHECK_END(); MAGIC_CHECK_END();
/* free obj */ /* free obj */
o->magic = 0; o->magic = 0;
free(o); EVAS_MEMPOOL_FREE(_mp_obj, o);
} }
static void static void

View File

@ -67,7 +67,7 @@ evas_object_smart_clipped_smart_add(Evas_Object *obj)
cso = evas_object_smart_data_get(obj); cso = evas_object_smart_data_get(obj);
if (!cso) if (!cso)
cso = malloc(sizeof(*cso)); /* users can provide it or realloc() later */ cso = calloc(1, sizeof(*cso)); /* users can provide it or realloc() later */
cso->evas = evas_object_evas_get(obj); cso->evas = evas_object_evas_get(obj);
clipper = evas_object_rectangle_add(cso->evas); clipper = evas_object_rectangle_add(cso->evas);

View File

@ -88,6 +88,8 @@ static const Evas_Object_Func object_func =
* @{ * @{
*/ */
EVAS_MEMPOOL(_mp_obj);
/** /**
* Creates a new text @c Evas_Object on the provided @c Evas canvas. * Creates a new text @c Evas_Object on the provided @c Evas canvas.
* *
@ -1510,7 +1512,10 @@ evas_object_text_new(void)
Evas_Object_Text *o; Evas_Object_Text *o;
/* alloc obj private data */ /* alloc obj private data */
o = calloc(1, sizeof(Evas_Object_Text)); EVAS_MEMPOOL_INIT(_mp_obj, "evas_object_text", Evas_Object_Text, 128, NULL);
o = EVAS_MEMPOOL_ALLOC(_mp_obj, Evas_Object_Text);
if (!o) return NULL;
EVAS_MEMPOOL_PREP(_mp_obj, o, Evas_Object_Text);
o->magic = MAGIC_OBJ_TEXT; o->magic = MAGIC_OBJ_TEXT;
o->prev = o->cur; o->prev = o->cur;
#ifdef BIDI_SUPPORT #ifdef BIDI_SUPPORT
@ -1539,7 +1544,7 @@ evas_object_text_free(Evas_Object *obj)
evas_bidi_props_clean(&o->cur.intl_props); evas_bidi_props_clean(&o->cur.intl_props);
#endif #endif
o->magic = 0; o->magic = 0;
free(o); EVAS_MEMPOOL_FREE(_mp_obj, o);
} }
static void static void

View File

@ -784,6 +784,7 @@ static const char escape_strings[] =
"•\0" "\xe2\x80\xa2\0" "•\0" "\xe2\x80\xa2\0"
; ;
EVAS_MEMPOOL(_mp_obj);
/** /**
* @internal * @internal
@ -7170,7 +7171,10 @@ evas_object_textblock_new(void)
Evas_Object_Textblock *o; Evas_Object_Textblock *o;
/* alloc obj private data */ /* alloc obj private data */
o = calloc(1, sizeof(Evas_Object_Textblock)); EVAS_MEMPOOL_INIT(_mp_obj, "evas_object_textblock", Evas_Object_Textblock, 64, NULL);
o = EVAS_MEMPOOL_ALLOC(_mp_obj, Evas_Object_Textblock);
if (!o) return NULL;
EVAS_MEMPOOL_PREP(_mp_obj, o, Evas_Object_Textblock);
o->magic = MAGIC_OBJ_TEXTBLOCK; o->magic = MAGIC_OBJ_TEXTBLOCK;
o->cursor = calloc(1, sizeof(Evas_Textblock_Cursor)); o->cursor = calloc(1, sizeof(Evas_Textblock_Cursor));
_format_command_init(); _format_command_init();
@ -7196,8 +7200,8 @@ evas_object_textblock_free(Evas_Object *obj)
} }
if (o->repch) eina_stringshare_del(o->repch); if (o->repch) eina_stringshare_del(o->repch);
o->magic = 0; o->magic = 0;
free(o); EVAS_MEMPOOL_FREE(_mp_obj, o);
_format_command_shutdown(); _format_command_shutdown();
} }

View File

@ -821,7 +821,64 @@ void evas_render_object_recalc(Evas_Object *obj);
Eina_Bool evas_map_inside_get(const Evas_Map *m, Evas_Coord x, Evas_Coord y); Eina_Bool evas_map_inside_get(const Evas_Map *m, Evas_Coord x, Evas_Coord y);
Eina_Bool evas_map_coords_get(const Evas_Map *m, Evas_Coord x, Evas_Coord y, Evas_Coord *mx, Evas_Coord *my, int grab); Eina_Bool evas_map_coords_get(const Evas_Map *m, Evas_Coord x, Evas_Coord y, Evas_Coord *mx, Evas_Coord *my, int grab);
/****************************************************************************/
/*****************************************/
/********************/
//#define MPOOL 1
#ifdef MPOOL
typedef struct _Evas_Mempool Evas_Mempool;
struct _Evas_Mempool
{
int count;
int num_allocs;
int num_frees;
Eina_Mempool *mp;
};
# define EVAS_MEMPOOL(x) \
static Evas_Mempool x = {0, 0, 0, NULL}
# define EVAS_MEMPOOL_INIT(x, nam, siz, cnt, ret) \
do { \
if (!x.mp) { \
x.mp = eina_mempool_add("chained_mempool", nam, NULL, sizeof(siz), cnt); \
if (!x.mp) { \
return ret; \
} \
} \
} while (0)
# define EVAS_MEMPOOL_ALLOC(x, siz) \
eina_mempool_malloc(x.mp, sizeof(siz))
# define EVAS_MEMPOOL_PREP(x, p, siz) \
do { \
x.count++; \
x.num_allocs++; \
memset(p, 0, sizeof(siz)); \
} while (0)
# define EVAS_MEMPOOL_FREE(x, p) \
do { \
eina_mempool_free(x.mp, p); \
x.count--; \
x.num_frees++; \
if (x.count <= 0) { \
eina_mempool_del(x.mp); \
x.mp = NULL; \
x.count = 0; \
} \
} while (0)
#else
# define EVAS_MEMPOOL(x)
# define EVAS_MEMPOOL_INIT(x, nam, siz, cnt, ret)
# define EVAS_MEMPOOL_PREP(x, p, siz)
# define EVAS_MEMPOOL_ALLOC(x, siz) \
calloc(1, sizeof(siz))
# define EVAS_MEMPOOL_FREE(x, p) \
free(p)
#endif
/********************/
/*****************************************/
/****************************************************************************/
#define EVAS_API_OVERRIDE(func, api, prefix) \ #define EVAS_API_OVERRIDE(func, api, prefix) \
(api)->func = prefix##func (api)->func = prefix##func