From 04ca0cb31ea1d8300a41e8f971f6f603ad163af3 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 15 Feb 2010 06:40:58 +0000 Subject: [PATCH] fix freeze/thaw to use less ... cpu. SVN revision: 46181 --- legacy/edje/src/lib/edje_calc.c | 10 +++++++++- legacy/edje/src/lib/edje_load.c | 6 ++++++ legacy/edje/src/lib/edje_private.h | 32 ++++++++++++++++-------------- legacy/edje/src/lib/edje_util.c | 13 ++++++------ 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/legacy/edje/src/lib/edje_calc.c b/legacy/edje/src/lib/edje_calc.c index 05f4946a64..1402355db5 100644 --- a/legacy/edje/src/lib/edje_calc.c +++ b/legacy/edje/src/lib/edje_calc.c @@ -197,7 +197,15 @@ _edje_recalc(Edje *ed) ed->recalc = 1; if (!ed->calc_only) { - if (_edje_freeze_val > 0) _edje_freeze_calc_count++; + if (_edje_freeze_val > 0) + { + if (!ed->freeze_calc) + { + _edje_freeze_calc_count++; + _edje_freeze_calc_list = eina_list_append(_edje_freeze_calc_list, ed); + ed->freeze_calc = 1; + } + } return; } } diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index 3fdda4bf9a..6022b79e36 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -828,6 +828,12 @@ _edje_swallows_collect(Edje *ed) void _edje_file_del(Edje *ed) { + if (ed->freeze_calc) + { + _edje_freeze_calc_list = eina_list_remove(_edje_freeze_calc_list, ed); + ed->freeze_calc = 0; + _edje_freeze_calc_count--; + } _edje_message_del(ed); _edje_block_violate(ed); _edje_var_shutdown(ed); diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 137d9e38b0..2e6b414d04 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -778,22 +778,23 @@ struct _Edje int preload_count; - unsigned short dirty : 1; - unsigned short recalc : 1; - unsigned short walking_callbacks : 1; - unsigned short delete_callbacks : 1; - unsigned short just_added_callbacks : 1; - unsigned short have_objects : 1; - unsigned short paused : 1; - unsigned short no_anim : 1; - unsigned short calc_only : 1; - unsigned short walking_actions : 1; - unsigned short block_break : 1; - unsigned short delete_me : 1; - unsigned short postponed : 1; + unsigned int dirty : 1; + unsigned int recalc : 1; + unsigned int walking_callbacks : 1; + unsigned int delete_callbacks : 1; + unsigned int just_added_callbacks : 1; + unsigned int have_objects : 1; + unsigned int paused : 1; + unsigned int no_anim : 1; + unsigned int calc_only : 1; + unsigned int walking_actions : 1; + unsigned int block_break : 1; + unsigned int delete_me : 1; + unsigned int postponed : 1; + unsigned int freeze_calc : 1; #ifdef EDJE_CALC_CACHE - unsigned short text_part_change : 1; - unsigned short all_part_change : 1; + unsigned int text_part_change : 1; + unsigned int all_part_change : 1; #endif lua_State *L; }; @@ -1169,6 +1170,7 @@ extern char *_edje_fontset_append; extern FLOAT_T _edje_scale; extern int _edje_freeze_val; extern int _edje_freeze_calc_count; +extern Eina_List *_edje_freeze_calc_list; extern Eina_Mempool *_edje_real_part_mp; extern Eina_Mempool *_edje_real_part_state_mp; diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index d30ca6dfe2..5aa4578227 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -30,6 +30,7 @@ char *_edje_fontset_append = NULL; FLOAT_T _edje_scale = ZERO; int _edje_freeze_val = 0; int _edje_freeze_calc_count = 0; +Eina_List *_edje_freeze_calc_list = NULL; typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data; struct _Edje_List_Foreach_Data @@ -46,7 +47,7 @@ Edje_Real_Part *_edje_real_part_recursive_get_helper(Edje *ed, char **path); /************************** API Routines **************************/ -//#define FASTFREEZE 1 +#define FASTFREEZE 1 /** * @brief Freeze Edje objects. @@ -114,15 +115,13 @@ edje_thaw(void) INF("fr -- ->%i", _edje_freeze_val); if ((_edje_freeze_val <= 0) && (_edje_freeze_calc_count > 0)) { - Eina_List *l; + Edje *ed; _edje_freeze_calc_count = 0; - EINA_LIST_FOREACH(_edje_edjes, l, data) + EINA_LIST_FREE(_edje_freeze_calc_list, ed) { - Edje *ed; - - ed = _edje_fetch(data); - if (ed) _edje_thaw_edje(ed); + _edje_thaw_edje(ed); + ed->freeze_calc = 0; } } #else