From eaadf415e0a4aefa760e2bd250e742fe43207454 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 24 Nov 2005 04:23:31 +0000 Subject: [PATCH] more cache controls and a flusher... :) SVN revision: 18627 --- TODO | 2 + src/bin/e_canvas.c | 26 +++++++ src/bin/e_config.c | 9 +++ src/bin/e_config.h | 8 ++- src/bin/e_ipc_handlers.h | 123 ++++++++++++++++++++++++++++++++++ src/bin/e_ipc_handlers_list.h | 12 ++++ 6 files changed, 178 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 8369b00dd..0f5bda491 100644 --- a/TODO +++ b/TODO @@ -8,6 +8,8 @@ Some of the things (in very short form) that need to be done to E17... BUGS / FIXES ------------------------------------------------------------------------------- +* BUG: in multihead dnd from pager to pager is pretty screwed especially at the + top of the screen (if the pager is there) * BUG: if iconified window quits qhile iconified and ibox is being used then e segv's * BUG: dnd to ibar is broken if u did an icon that isn't IN the ibar yet diff --git a/src/bin/e_canvas.c b/src/bin/e_canvas.c index bc7477572..fc382f84b 100644 --- a/src/bin/e_canvas.c +++ b/src/bin/e_canvas.c @@ -4,9 +4,11 @@ #include "e.h" /* local subsystem functions */ +static int _e_canvas_cb_flush(void *data); /* local subsystem globals */ static Evas_List *_e_canvases = NULL; +static Ecore_Timer *_e_canvas_cache_flush_timer = NULL; /* externally accessible functions */ void @@ -66,6 +68,19 @@ e_canvas_recache(void) evas_image_cache_set(e, e_config->image_cache * 1024); evas_font_cache_set(e, e_config->font_cache * 1024); } + edje_file_cache_set(e_config->edje_cache); + edje_collection_cache_set(e_config->edje_cache); + if (_e_canvas_cache_flush_timer) + { + ecore_timer_del(_e_canvas_cache_flush_timer); + _e_canvas_cache_flush_timer = NULL; + } + if (e_config->cache_flush_interval > 0.0) + { + _e_canvas_cache_flush_timer = + ecore_timer_add(e_config->cache_flush_interval, _e_canvas_cb_flush, + NULL); + } } void @@ -83,6 +98,8 @@ e_canvas_cache_flush(void) evas_image_cache_flush(e); evas_font_cache_flush(e); } + edje_file_cache_flush(); + edje_collection_cache_flush(); } void @@ -145,3 +162,12 @@ e_canvas_new(int engine_hint, Ecore_X_Window win, int x, int y, int w, int h, } return ee; } + +/* local subsystem functions */ +static int +_e_canvas_cb_flush(void *data) +{ + e_canvas_cache_flush(); + return 1; +} + diff --git a/src/bin/e_config.c b/src/bin/e_config.c index b54dd10c6..d0269aa7f 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -263,6 +263,9 @@ e_config_init(void) E_CONFIG_VAL(D, T, framerate, DOUBLE); /**/ E_CONFIG_VAL(D, T, image_cache, INT); /**/ E_CONFIG_VAL(D, T, font_cache, INT); /**/ + E_CONFIG_VAL(D, T, edje_cache, INT); /**/ + E_CONFIG_VAL(D, T, edje_collection_cache, INT); /**/ + E_CONFIG_VAL(D, T, cache_flush_interval, DOUBLE); /**/ E_CONFIG_VAL(D, T, zone_desks_x_count, INT); /**/ E_CONFIG_VAL(D, T, zone_desks_y_count, INT); /**/ E_CONFIG_VAL(D, T, use_virtual_roots, INT); /* should not make this a config option (for now) */ @@ -411,6 +414,9 @@ e_config_init(void) e_config->framerate = 30.0; e_config->image_cache = 4096; e_config->font_cache = 512; + e_config->edje_cache = 32; + e_config->edje_collection_cache = 64; + e_config->cache_flush_interval = 60.0; e_config->zone_desks_x_count = 4; e_config->zone_desks_y_count = 1; e_config->use_virtual_roots = 0; @@ -1395,6 +1401,9 @@ e_config_init(void) E_CONFIG_LIMIT(e_config->framerate, 1.0, 200.0); E_CONFIG_LIMIT(e_config->image_cache, 0, 256 * 1024); E_CONFIG_LIMIT(e_config->font_cache, 0, 32 * 1024); + E_CONFIG_LIMIT(e_config->edje_cache, 0, 256); + E_CONFIG_LIMIT(e_config->edje_collection_cache, 0, 512); + E_CONFIG_LIMIT(e_config->cache_flush_interval, 0.0, 600.0); E_CONFIG_LIMIT(e_config->zone_desks_x_count, 1, 64); E_CONFIG_LIMIT(e_config->zone_desks_y_count, 1, 64); E_CONFIG_LIMIT(e_config->use_edge_flip, 0, 1); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 22e55f19a..8ef6a5d72 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -48,9 +48,10 @@ typedef Eet_Data_Descriptor E_Config_DD; /* increment this whenever we change config enough that you need new * defaults for e to work - started at 100 when we introduced this config - * versioning feature + * versioning feature. the value of this is really irrelevant - just as + * long as it increases every time we change something */ -#define E_CONFIG_FILE_VERSION 129 +#define E_CONFIG_FILE_VERSION 132 #define E_EVAS_ENGINE_DEFAULT 0 #define E_EVAS_ENGINE_SOFTWARE_X11 1 @@ -87,6 +88,9 @@ struct _E_Config double framerate; int image_cache; int font_cache; + int edje_cache; + int edje_collection_cache; + double cache_flush_interval; int zone_desks_x_count; int zone_desks_y_count; int use_virtual_roots; diff --git a/src/bin/e_ipc_handlers.h b/src/bin/e_ipc_handlers.h index 8a76a7e63..107b5e9fc 100644 --- a/src/bin/e_ipc_handlers.h +++ b/src/bin/e_ipc_handlers.h @@ -1880,6 +1880,129 @@ break; #endif #undef HDL +/****************************************************************************/ +#define HDL E_IPC_OP_EDJE_CACHE_SET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-edje-cache-set", 1, "Set the edje cache size (items)", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_INT(atoi(params[0]), HDL) +#elif (TYPE == E_WM_IN) + START_INT(val, HDL); + e_config->edje_cache = val; + E_CONFIG_LIMIT(e_config->edje_cache, 0, 256); + e_canvas_recache(); + SAVE; + END_INT; +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_EDJE_CACHE_GET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-edje-cache-get", 0, "Get the speculative edje cache size (items)", 1, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_NULL(HDL) +#elif (TYPE == E_WM_IN) + SEND_INT(e_config->edje_cache, E_IPC_OP_EDJE_CACHE_GET_REPLY, HDL); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_EDJE_CACHE_GET_REPLY +#if (TYPE == E_REMOTE_OPTIONS) +#elif (TYPE == E_REMOTE_OUT) +#elif (TYPE == E_WM_IN) +#elif (TYPE == E_REMOTE_IN) + START_INT(val, HDL) + printf("REPLY: %i\n", val); + END_INT; +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_EDJE_COLLECTION_CACHE_SET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-edje-collection-cache-set", 1, "Set the edje collection cache size (items)", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_INT(atoi(params[0]), HDL) +#elif (TYPE == E_WM_IN) + START_INT(val, HDL); + e_config->edje_collection_cache = val; + E_CONFIG_LIMIT(e_config->edje_collection_cache, 0, 512); + e_canvas_recache(); + SAVE; + END_INT; +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_EDJE_COLLECTION_CACHE_GET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-edje-collection-cache-get", 0, "Get the speculative edje collection cache size (items)", 1, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_NULL(HDL) +#elif (TYPE == E_WM_IN) + SEND_INT(e_config->edje_collection_cache, E_IPC_OP_EDJE_COLLECTION_CACHE_GET_REPLY, HDL); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_EDJE_COLLECTION_CACHE_GET_REPLY +#if (TYPE == E_REMOTE_OPTIONS) +#elif (TYPE == E_REMOTE_OUT) +#elif (TYPE == E_WM_IN) +#elif (TYPE == E_REMOTE_IN) + START_INT(val, HDL) + printf("REPLY: %i\n", val); + END_INT; +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_SET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-cache-flush-interval-set", 1, "Set the cache flush interval (sec) (0.0 = off)", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_DOUBLE(atof(params[0]), HDL); +#elif (TYPE == E_WM_IN) + START_DOUBLE(dbl, HDL); + e_config->cache_flush_interval = dbl; + E_CONFIG_LIMIT(e_config->cache_flush_interval, 0.0, 600.0); + e_canvas_recache(); + SAVE; + END_DOUBLE; +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_GET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-cache-flush-interval-get", 0, "Get the interval between cache flushed (sec)", 1, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_NULL(HDL); +#elif (TYPE == E_WM_IN) + SEND_DOUBLE(e_config->cache_flush_interval, E_IPC_OP_CACHE_FLUSH_INTERVAL_GET_REPLY, HDL); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_GET_REPLY +#if (TYPE == E_REMOTE_OPTIONS) +#elif (TYPE == E_REMOTE_OUT) +#elif (TYPE == E_WM_IN) +#elif (TYPE == E_REMOTE_IN) + START_DOUBLE(fint, HDL); + printf("REPLY: %3.3f\n", fint); + END_DOUBLE; +#endif +#undef HDL + /****************************************************************************/ #define HDL E_IPC_OP_MENUS_FAST_MOVE_THRESHOLD_SET #if (TYPE == E_REMOTE_OPTIONS) diff --git a/src/bin/e_ipc_handlers_list.h b/src/bin/e_ipc_handlers_list.h index ba562e23b..f5f11409b 100644 --- a/src/bin/e_ipc_handlers_list.h +++ b/src/bin/e_ipc_handlers_list.h @@ -340,3 +340,15 @@ #define E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY 322 #define E_IPC_EFM_START 323 + +#define E_IPC_OP_EDJE_CACHE_SET 324 +#define E_IPC_OP_EDJE_CACHE_GET 325 +#define E_IPC_OP_EDJE_CACHE_GET_REPLY 326 + +#define E_IPC_OP_EDJE_COLLECTION_CACHE_SET 327 +#define E_IPC_OP_EDJE_COLLECTION_CACHE_GET 328 +#define E_IPC_OP_EDJE_COLLECTION_CACHE_GET_REPLY 329 + +#define E_IPC_OP_CACHE_FLUSH_INTERVAL_SET 330 +#define E_IPC_OP_CACHE_FLUSH_INTERVAL_GET 331 +#define E_IPC_OP_CACHE_FLUSH_INTERVAL_GET_REPLY 332