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;
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;
}
}

View File

@ -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);

View File

@ -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;

View File

@ -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