fix freeze/thaw to use less ... cpu.

SVN revision: 46181
This commit is contained in:
Carsten Haitzler 2010-02-15 06:40:58 +00:00
parent 830a7c89ee
commit 04ca0cb31e
4 changed files with 38 additions and 23 deletions

View File

@ -197,7 +197,15 @@ _edje_recalc(Edje *ed)
ed->recalc = 1; ed->recalc = 1;
if (!ed->calc_only) 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; return;
} }
} }

View File

@ -828,6 +828,12 @@ _edje_swallows_collect(Edje *ed)
void void
_edje_file_del(Edje *ed) _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_message_del(ed);
_edje_block_violate(ed); _edje_block_violate(ed);
_edje_var_shutdown(ed); _edje_var_shutdown(ed);

View File

@ -778,22 +778,23 @@ struct _Edje
int preload_count; int preload_count;
unsigned short dirty : 1; unsigned int dirty : 1;
unsigned short recalc : 1; unsigned int recalc : 1;
unsigned short walking_callbacks : 1; unsigned int walking_callbacks : 1;
unsigned short delete_callbacks : 1; unsigned int delete_callbacks : 1;
unsigned short just_added_callbacks : 1; unsigned int just_added_callbacks : 1;
unsigned short have_objects : 1; unsigned int have_objects : 1;
unsigned short paused : 1; unsigned int paused : 1;
unsigned short no_anim : 1; unsigned int no_anim : 1;
unsigned short calc_only : 1; unsigned int calc_only : 1;
unsigned short walking_actions : 1; unsigned int walking_actions : 1;
unsigned short block_break : 1; unsigned int block_break : 1;
unsigned short delete_me : 1; unsigned int delete_me : 1;
unsigned short postponed : 1; unsigned int postponed : 1;
unsigned int freeze_calc : 1;
#ifdef EDJE_CALC_CACHE #ifdef EDJE_CALC_CACHE
unsigned short text_part_change : 1; unsigned int text_part_change : 1;
unsigned short all_part_change : 1; unsigned int all_part_change : 1;
#endif #endif
lua_State *L; lua_State *L;
}; };
@ -1169,6 +1170,7 @@ extern char *_edje_fontset_append;
extern FLOAT_T _edje_scale; extern FLOAT_T _edje_scale;
extern int _edje_freeze_val; extern int _edje_freeze_val;
extern int _edje_freeze_calc_count; 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_mp;
extern Eina_Mempool *_edje_real_part_state_mp; extern Eina_Mempool *_edje_real_part_state_mp;

View File

@ -30,6 +30,7 @@ char *_edje_fontset_append = NULL;
FLOAT_T _edje_scale = ZERO; FLOAT_T _edje_scale = ZERO;
int _edje_freeze_val = 0; int _edje_freeze_val = 0;
int _edje_freeze_calc_count = 0; int _edje_freeze_calc_count = 0;
Eina_List *_edje_freeze_calc_list = NULL;
typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data; typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data;
struct _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 **************************/ /************************** API Routines **************************/
//#define FASTFREEZE 1 #define FASTFREEZE 1
/** /**
* @brief Freeze Edje objects. * @brief Freeze Edje objects.
@ -114,15 +115,13 @@ edje_thaw(void)
INF("fr -- ->%i", _edje_freeze_val); INF("fr -- ->%i", _edje_freeze_val);
if ((_edje_freeze_val <= 0) && (_edje_freeze_calc_count > 0)) if ((_edje_freeze_val <= 0) && (_edje_freeze_calc_count > 0))
{ {
Eina_List *l; Edje *ed;
_edje_freeze_calc_count = 0; _edje_freeze_calc_count = 0;
EINA_LIST_FOREACH(_edje_edjes, l, data) EINA_LIST_FREE(_edje_freeze_calc_list, ed)
{ {
Edje *ed; _edje_thaw_edje(ed);
ed->freeze_calc = 0;
ed = _edje_fetch(data);
if (ed) _edje_thaw_edje(ed);
} }
} }
#else #else