From d065dd4750987e5bbefeca34c8fb9b278a99bee4 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 14 Feb 2013 03:36:13 +0000 Subject: [PATCH] efl/edje: edje program are static for all object of the same edje collection. This reduce our waste of memory by 300K in most elementary application. There is another 400K to win by merging edje signal callback automat. SVN revision: 83879 --- ChangeLog | 4 ++ NEWS | 1 + src/lib/edje/edje_cache.c | 90 +++++++++++++++++++++++++++++++++++++ src/lib/edje/edje_edit.c | 62 +++++++++++++------------- src/lib/edje/edje_embryo.c | 6 +-- src/lib/edje/edje_load.c | 106 +++++--------------------------------------- src/lib/edje/edje_private.h | 56 ++++++++++++----------- src/lib/edje/edje_program.c | 18 ++++---- 8 files changed, 179 insertions(+), 164 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6ce012d..7d02b33 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-02-14 Cedric Bail + + * Reduce memory consumption of Edje program handler. + 2013-02-14 Jihoon Kim (jihoon) * edje entry : fix bug not to display preedit string with PREEDIT_TYPE_NONE style diff --git a/NEWS b/NEWS index ed2c794..5c06cf4 100644 --- a/NEWS +++ b/NEWS @@ -106,6 +106,7 @@ Improvements: - french. * edje entry : Support &, < and > in preedit string * eina: Eina_Tiler now take tile size into account. + * edje: reduce memory consumption of Edje program handler. Fixes: * Fix a memory leak in ecore_con_dns when using ecore_con_server_connect diff --git a/src/lib/edje/edje_cache.c b/src/lib/edje/edje_cache.c index 6b891df..3f93e5c 100644 --- a/src/lib/edje/edje_cache.c +++ b/src/lib/edje/edje_cache.c @@ -69,12 +69,69 @@ edje_cache_emp_free(Edje_Part_Collection_Directory_Entry *ce) ce->ref = NULL; } + +void +_edje_programs_patterns_init(Edje_Part_Collection *edc) +{ + Edje_Signals_Sources_Patterns *ssp = &edc->patterns.programs; + Edje_Program **all; + unsigned int i, j; + + if (ssp->signals_patterns) + return; + + if (getenv("EDJE_DUMP_PROGRAMS")) + { + INF("Group '%s' programs:", edc->part); +#define EDJE_DUMP_PROGRAM(Section) \ + for (i = 0; i < edc->programs.Section##_count; i++) \ + INF(#Section" for ('%s', '%s')", edc->programs.Section[i]->signal, edc->programs.Section[i]->source); + + EDJE_DUMP_PROGRAM(strcmp); + EDJE_DUMP_PROGRAM(strncmp); + EDJE_DUMP_PROGRAM(strrncmp); + EDJE_DUMP_PROGRAM(fnmatch); + EDJE_DUMP_PROGRAM(nocmp); + } + + edje_match_program_hash_build(edc->programs.strcmp, + edc->programs.strcmp_count, + &ssp->exact_match); + + j = edc->programs.strncmp_count + + edc->programs.strrncmp_count + + edc->programs.fnmatch_count + + edc->programs.nocmp_count; + if (j == 0) return ; + + all = malloc(sizeof (Edje_Program *) * j); + if (!all) return ; + j = 0; + + /* FIXME: Build specialized data type for each case */ +#define EDJE_LOAD_PROGRAMS_ADD(Array, Edc, It, Git, All) \ + for (It = 0; It < Edc->programs.Array##_count; ++It, ++Git) \ + All[Git] = Edc->programs.Array[It]; + + EDJE_LOAD_PROGRAMS_ADD(fnmatch, edc, i, j, all); + EDJE_LOAD_PROGRAMS_ADD(strncmp, edc, i, j, all); + EDJE_LOAD_PROGRAMS_ADD(strrncmp, edc, i, j, all); + /* FIXME: Do a special pass for that one */ + EDJE_LOAD_PROGRAMS_ADD(nocmp, edc, i, j, all); + + ssp->u.programs.globing = all; + ssp->u.programs.count = j; + ssp->signals_patterns = edje_match_programs_signal_init(all, j); + ssp->sources_patterns = edje_match_programs_source_init(all, j); +} + static Edje_Part_Collection * _edje_file_coll_open(Edje_File *edf, const char *coll) { Edje_Part_Collection *edc = NULL; Edje_Part_Collection_Directory_Entry *ce; int id = -1, size = 0; + unsigned int n; Eina_List *l; char buf[256]; void *data; @@ -163,6 +220,39 @@ _edje_file_coll_open(Edje_File *edf, const char *coll) ce->ref = edc; + _edje_programs_patterns_init(edc); + + n = edc->programs.fnmatch_count + + edc->programs.strcmp_count + + edc->programs.strncmp_count + + edc->programs.strrncmp_count + + edc->programs.nocmp_count; + + if (n > 0) + { + Edje_Program *pr; + unsigned int i; + + edc->patterns.table_programs = malloc(sizeof(Edje_Program *) * n); + if (edc->patterns.table_programs) + { + edc->patterns.table_programs_size = n; + +#define EDJE_LOAD_BUILD_TABLE(Array, Edc, It, Tmp) \ + for (It = 0; It < Edc->programs.Array##_count; ++It) \ + { \ + Tmp = Edc->programs.Array[It]; \ + Edc->patterns.table_programs[Tmp->id] = Tmp; \ + } + + EDJE_LOAD_BUILD_TABLE(fnmatch, edc, i, pr); + EDJE_LOAD_BUILD_TABLE(strcmp, edc, i, pr); + EDJE_LOAD_BUILD_TABLE(strncmp, edc, i, pr); + EDJE_LOAD_BUILD_TABLE(strrncmp, edc, i, pr); + EDJE_LOAD_BUILD_TABLE(nocmp, edc, i, pr); + } + } + return edc; } diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c index 9361f23..8641dae 100644 --- a/src/lib/edje/edje_edit.c +++ b/src/lib/edje/edje_edit.c @@ -2860,9 +2860,9 @@ edje_edit_state_name_set(Evas_Object *obj, const char *part, const char *state, /* update the 'state' field in all programs. update only if program has a single target */ part_id = _edje_part_id_find(ed, part); - for (i = 0; i < ed->table_programs_size; i++) + for (i = 0; i < ed->collection->patterns.table_programs_size; i++) { - Edje_Program *epr = ed->table_programs[i]; + Edje_Program *epr = ed->collection->patterns.table_programs[i]; if (eina_list_count(epr->targets) == 1) { @@ -5087,9 +5087,9 @@ _edje_program_id_find(Edje_Edit *eed, const char *program) Edje_Program *epr; int i; - for (i = 0; i < eed->base->table_programs_size; i++) + for (i = 0; i < eed->base->collection->patterns.table_programs_size; i++) { - epr = eed->base->table_programs[i]; + epr = eed->base->collection->patterns.table_programs[i]; if (epr->name && !strcmp(epr->name, program)) return epr->id; } @@ -5106,9 +5106,9 @@ _edje_program_get_byname(Evas_Object *obj, const char *prog_name) if (!prog_name) return NULL; - for (i = 0; i < ed->table_programs_size; i++) + for (i = 0; i < ed->collection->patterns.table_programs_size; i++) { - epr = ed->table_programs[i]; + epr = ed->collection->patterns.table_programs[i]; if ((epr->name) && (strcmp(epr->name, prog_name) == 0)) return epr; } @@ -5127,11 +5127,11 @@ edje_edit_programs_list_get(Evas_Object *obj) //printf("EE: Found %d programs\n", ed->table_programs_size); - for (i = 0; i < ed->table_programs_size; i++) + for (i = 0; i < ed->collection->patterns.table_programs_size; i++) { Edje_Program *epr; - epr = ed->table_programs[i]; + epr = ed->collection->patterns.table_programs[i]; /* XXX: bad, we miss programs this way, but since you can't access * them in any way without a name, better ignore them. */ if (!epr->name) continue; @@ -5169,7 +5169,7 @@ edje_edit_program_add(Evas_Object *obj, const char *name) ed->collection->programs.nocmp[ed->collection->programs.nocmp_count++] = epr; //Init Edje_Program - epr->id = ed->table_programs_size; + epr->id = ed->collection->patterns.table_programs_size; epr->name = eina_stringshare_add(name); epr->signal = NULL; epr->source = NULL; @@ -5189,14 +5189,14 @@ edje_edit_program_add(Evas_Object *obj, const char *name) //Update table_programs - ed->table_programs_size++; - ed->table_programs = realloc(ed->table_programs, - sizeof(Edje_Program *) * ed->table_programs_size); - ed->table_programs[epr->id % ed->table_programs_size] = epr; + ed->collection->patterns.table_programs_size++; + ed->collection->patterns.table_programs = realloc(ed->collection->patterns.table_programs, + sizeof(Edje_Program *) * ed->collection->patterns.table_programs_size); + ed->collection->patterns.table_programs[epr->id % ed->collection->patterns.table_programs_size] = epr; //Update patterns - _edje_programs_patterns_clean(ed); - _edje_programs_patterns_init(ed); + _edje_programs_patterns_clean(ed->collection); + _edje_programs_patterns_init(ed->collection); return EINA_TRUE; } @@ -5225,13 +5225,13 @@ edje_edit_program_del(Evas_Object *obj, const char *prog) _edje_program_remove(ed->collection, epr); /* fix table program */ - if (epr->id != ed->table_programs_size - 1) + if (epr->id != ed->collection->patterns.table_programs_size - 1) { /* If the removed program is not the last in the list/table, * put the last one in its place and update references to it later */ - ed->table_programs[epr->id] = ed->table_programs[ed->table_programs_size - 1]; - old_id = ed->table_programs_size - 1; - ed->table_programs[epr->id]->id = epr->id; + ed->collection->patterns.table_programs[epr->id] = ed->collection->patterns.table_programs[ed->collection->patterns.table_programs_size - 1]; + old_id = ed->collection->patterns.table_programs_size - 1; + ed->collection->patterns.table_programs[epr->id]->id = epr->id; } ps = eina_hash_find(eed->program_scripts, &id); @@ -5280,14 +5280,14 @@ edje_edit_program_del(Evas_Object *obj, const char *prog) free(pa); free(epr); - ed->table_programs_size--; - ed->table_programs = realloc(ed->table_programs, - sizeof(Edje_Program *) * ed->table_programs_size); + ed->collection->patterns.table_programs_size--; + ed->collection->patterns.table_programs = realloc(ed->collection->patterns.table_programs, + sizeof(Edje_Program *) * ed->collection->patterns.table_programs_size); //We also update all other programs that point to old_id and id - for (i = 0; i < ed->table_programs_size; i++) + for (i = 0; i < ed->collection->patterns.table_programs_size; i++) { - p = ed->table_programs[i]; + p = ed->collection->patterns.table_programs[i]; /* check in afters */ EINA_LIST_FOREACH_SAFE(p->after, l, l_next, pa) @@ -5399,8 +5399,8 @@ edje_edit_program_source_set(Evas_Object *obj, const char *prog, const char *sou _edje_program_insert(ed->collection, epr); //Update patterns - _edje_programs_patterns_clean(ed); - _edje_programs_patterns_init(ed); + _edje_programs_patterns_clean(ed->collection); + _edje_programs_patterns_init(ed->collection); return EINA_TRUE; } @@ -5490,8 +5490,8 @@ edje_edit_program_signal_set(Evas_Object *obj, const char *prog, const char *sig _edje_program_insert(ed->collection, epr); //Update patterns - _edje_programs_patterns_clean(ed); - _edje_programs_patterns_init(ed); + _edje_programs_patterns_clean(ed->collection); + _edje_programs_patterns_init(ed->collection); return EINA_TRUE; } @@ -5780,7 +5780,7 @@ edje_edit_program_targets_get(Evas_Object *obj, const char *prog) /* the target is a program */ Edje_Program *p; - p = ed->table_programs[t->id % ed->table_programs_size]; + p = ed->collection->patterns.table_programs[t->id % ed->collection->patterns.table_programs_size]; if (p && p->name) targets = eina_list_append(targets, eina_stringshare_add(p->name)); @@ -5907,7 +5907,7 @@ edje_edit_program_afters_get(Evas_Object *obj, const char *prog) { Edje_Program *p = NULL; - p = ed->table_programs[a->id % ed->table_programs_size]; + p = ed->collection->patterns.table_programs[a->id % ed->collection->patterns.table_programs_size]; if (p && p->name) { //printf(" a: %d name: %s\n", a->id, p->name); @@ -6466,7 +6466,7 @@ _edje_edit_embryo_rebuild(Edje_Edit *eed) free(ps->processed); ps->processed = NULL; } - epr = eed->base->table_programs[ps->id]; + epr = eed->base->collection->patterns.table_programs[ps->id]; if (!ps->processed) ps->processed = _edje_edit_script_process(eed, epr->name, ps->code); if (!ps->processed) diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c index ff5a4a9..38d194a 100644 --- a/src/lib/edje/edje_embryo.c +++ b/src/lib/edje/edje_embryo.c @@ -883,9 +883,9 @@ _edje_embryo_fn_get_program_id(Embryo_Program *ep, Embryo_Cell *params) ed = embryo_program_data_get(ep); GETSTR(p, params[1]); if (!p) return -1; - prog = ed->table_programs; + prog = ed->collection->patterns.table_programs; if (!prog) return -1; - for (i = 0; i < ed->table_programs_size; i++, prog++) + for (i = 0; i < ed->collection->patterns.table_programs_size; i++, prog++) { if (!(*prog)->name) continue; if (!strcmp((*prog)->name, p)) return (*prog)->id; @@ -1055,7 +1055,7 @@ _edje_embryo_fn_run_program(Embryo_Program *ep, Embryo_Cell *params) ed = embryo_program_data_get(ep); program_id = params[1]; if (program_id < 0) return 0; - pr = ed->table_programs[program_id % ed->table_programs_size]; + pr = ed->collection->patterns.table_programs[program_id % ed->collection->patterns.table_programs_size]; if (pr) { _edje_program_run(ed, pr, 0, "", ""); diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c index d852777..7798b12 100644 --- a/src/lib/edje/edje_load.c +++ b/src/lib/edje/edje_load.c @@ -268,72 +268,17 @@ edje_file_data_get(const char *file, const char *key) } void -_edje_programs_patterns_clean(Edje *ed) +_edje_programs_patterns_clean(Edje_Part_Collection *edc) { - _edje_signals_sources_patterns_clean(&ed->patterns.programs); + _edje_signals_sources_patterns_clean(&edc->patterns.programs); - eina_rbtree_delete(ed->patterns.programs.exact_match, + eina_rbtree_delete(edc->patterns.programs.exact_match, EINA_RBTREE_FREE_CB(edje_match_signal_source_free), NULL); - ed->patterns.programs.exact_match = NULL; + edc->patterns.programs.exact_match = NULL; - free(ed->patterns.programs.u.programs.globing); - ed->patterns.programs.u.programs.globing = NULL; -} - -void -_edje_programs_patterns_init(Edje *ed) -{ - Edje_Signals_Sources_Patterns *ssp = &ed->patterns.programs; - Edje_Program **all; - unsigned int i, j; - - if (ssp->signals_patterns) - return; - - if (getenv("EDJE_DUMP_PROGRAMS")) - { - INF("Group '%s' programs:", ed->group); -#define EDJE_DUMP_PROGRAM(Section) \ - for (i = 0; i < ed->collection->programs.Section##_count; i++) \ - INF(#Section" for ('%s', '%s')", ed->collection->programs.Section[i]->signal, ed->collection->programs.Section[i]->source); - - EDJE_DUMP_PROGRAM(strcmp); - EDJE_DUMP_PROGRAM(strncmp); - EDJE_DUMP_PROGRAM(strrncmp); - EDJE_DUMP_PROGRAM(fnmatch); - EDJE_DUMP_PROGRAM(nocmp); - } - - edje_match_program_hash_build(ed->collection->programs.strcmp, - ed->collection->programs.strcmp_count, - &ssp->exact_match); - - j = ed->collection->programs.strncmp_count - + ed->collection->programs.strrncmp_count - + ed->collection->programs.fnmatch_count - + ed->collection->programs.nocmp_count; - if (j == 0) return ; - - all = malloc(sizeof (Edje_Program *) * j); - if (!all) return ; - j = 0; - - /* FIXME: Build specialized data type for each case */ -#define EDJE_LOAD_PROGRAMS_ADD(Array, Ed, It, Git, All) \ - for (It = 0; It < Ed->collection->programs.Array##_count; ++It, ++Git) \ - All[Git] = Ed->collection->programs.Array[It]; - - EDJE_LOAD_PROGRAMS_ADD(fnmatch, ed, i, j, all); - EDJE_LOAD_PROGRAMS_ADD(strncmp, ed, i, j, all); - EDJE_LOAD_PROGRAMS_ADD(strrncmp, ed, i, j, all); - /* FIXME: Do a special pass for that one */ - EDJE_LOAD_PROGRAMS_ADD(nocmp, ed, i, j, all); - - ssp->u.programs.globing = all; - ssp->u.programs.count = j; - ssp->signals_patterns = edje_match_programs_signal_init(all, j); - ssp->sources_patterns = edje_match_programs_source_init(all, j); + free(edc->patterns.programs.u.programs.globing); + edc->patterns.programs.u.programs.globing = NULL; } #ifdef HAVE_EPHYSICS @@ -791,36 +736,6 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g } } - _edje_programs_patterns_init(ed); - - n = ed->collection->programs.fnmatch_count + - ed->collection->programs.strcmp_count + - ed->collection->programs.strncmp_count + - ed->collection->programs.strrncmp_count + - ed->collection->programs.nocmp_count; - if (n > 0) - { - Edje_Program *pr; - - ed->table_programs = malloc(sizeof(Edje_Program *) * n); - if (ed->table_programs) - { - ed->table_programs_size = n; - -#define EDJE_LOAD_BUILD_TABLE(Array, Ed, It, Tmp) \ - for (It = 0; It < Ed->collection->programs.Array##_count; ++It) \ - { \ - Tmp = Ed->collection->programs.Array[It]; \ - Ed->table_programs[Tmp->id] = Tmp; \ - } - - EDJE_LOAD_BUILD_TABLE(fnmatch, ed, i, pr); - EDJE_LOAD_BUILD_TABLE(strcmp, ed, i, pr); - EDJE_LOAD_BUILD_TABLE(strncmp, ed, i, pr); - EDJE_LOAD_BUILD_TABLE(strrncmp, ed, i, pr); - EDJE_LOAD_BUILD_TABLE(nocmp, ed, i, pr); - } - } _edje_ref(ed); _edje_block(ed); _edje_freeze(ed); @@ -1273,7 +1188,6 @@ _edje_file_del(Edje *ed) _edje_message_del(ed); _edje_block_violate(ed); _edje_var_shutdown(ed); - _edje_programs_patterns_clean(ed); // if (ed->collection) // { // if (ed->collection->script) _edje_embryo_script_shutdown(ed); @@ -1448,9 +1362,6 @@ _edje_file_del(Edje *ed) if (ed->table_parts) free(ed->table_parts); ed->table_parts = NULL; ed->table_parts_size = 0; - if (ed->table_programs) free(ed->table_programs); - ed->table_programs = NULL; - ed->table_programs_size = 0; ed->focused_part = NULL; if (tev) { @@ -1644,6 +1555,11 @@ _edje_collection_free(Edje_File *edf, Edje_Part_Collection *ec, Edje_Part_Collec eina_hash_free(ec->prog_cache.matches); } #endif + _edje_programs_patterns_clean(ec); + if (ec->patterns.table_programs) free(ec->patterns.table_programs); + ec->patterns.table_programs = NULL; + ec->patterns.table_programs_size = 0; + if (ec->script) embryo_program_free(ec->script); _edje_lua2_script_unload(ec); diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 9bc4c78..ace43ff 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -320,6 +320,7 @@ typedef struct _Edje_Var_Pool Edje_Var_Pool; typedef struct _Edje_Signal_Source_Char Edje_Signal_Source_Char; typedef struct _Edje_Text_Insert_Filter_Callback Edje_Text_Insert_Filter_Callback; typedef struct _Edje_Markup_Filter_Callback Edje_Markup_Filter_Callback; +typedef struct _Edje_Signals_Sources_Patterns Edje_Signals_Sources_Patterns; #define EDJE_INF_MAX_W 100000 #define EDJE_INF_MAX_H 100000 @@ -767,6 +768,24 @@ struct _Edje_Part_Limit Edje_Part_Limit_State height; /* -1, 0, or 1 */ }; +struct _Edje_Signals_Sources_Patterns +{ + Edje_Patterns *signals_patterns; + Edje_Patterns *sources_patterns; + + Eina_Rbtree *exact_match; + + union { + struct { + Edje_Program **globing; + unsigned int count; + } programs; + struct { + Eina_List *globing; + } callbacks; + } u; +}; + /*----------*/ struct _Edje_Part_Collection @@ -841,6 +860,15 @@ struct _Edje_Part_Collection Embryo_Program *script; /* all the embryo script code for this group */ const char *part; + /* *** generated at runtime *** */ + struct { + Edje_Signals_Sources_Patterns programs; + + Edje_Program **table_programs; + int table_programs_size; + } patterns; + /* *** *** */ + unsigned char script_only; unsigned char lua_script_only; @@ -1162,27 +1190,6 @@ struct _Edje_Signal_Source_Char Eina_Array list; }; -struct _Edje_Signals_Sources_Patterns - -{ - Edje_Patterns *signals_patterns; - Edje_Patterns *sources_patterns; - - Eina_Rbtree *exact_match; - - union { - struct { - Edje_Program **globing; - unsigned int count; - } programs; - struct { - Eina_List *globing; - } callbacks; - } u; -}; - -typedef struct _Edje_Signals_Sources_Patterns Edje_Signals_Sources_Patterns; - struct _Edje { Evas_Object_Smart_Clipped_Data *base; @@ -1209,14 +1216,12 @@ struct _Edje Edje_Var_Pool *var_pool; /* for faster lookups to avoid nth list walks */ Edje_Real_Part **table_parts; - Edje_Program **table_programs; Edje_Real_Part *focused_part; Eina_List *subobjs; Eina_List *text_insert_filter_callbacks; Eina_List *markup_filter_callbacks; void *script_only_data; - int table_programs_size; unsigned int table_parts_size; Eina_List *groups; @@ -1230,7 +1235,6 @@ struct _Edje struct { Edje_Signals_Sources_Patterns callbacks; - Edje_Signals_Sources_Patterns programs; } patterns; int references; @@ -1896,8 +1900,8 @@ void _edje_unref(Edje *ed); Eina_Bool _edje_program_run_iterate(Edje_Running_Program *runp, double tim); void _edje_program_end(Edje *ed, Edje_Running_Program *runp); void _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig, const char *ssrc); -void _edje_programs_patterns_clean(Edje *ed); -void _edje_programs_patterns_init(Edje *ed); +void _edje_programs_patterns_clean(Edje_Part_Collection *ed); +void _edje_programs_patterns_init(Edje_Part_Collection *ed); void _edje_emit(Edje *ed, const char *sig, const char *src); void _edje_emit_full(Edje *ed, const char *sig, const char *src, void *data, void (*free_func)(void *)); void _edje_emit_handle(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Data *data, Eina_Bool prop); diff --git a/src/lib/edje/edje_program.c b/src/lib/edje/edje_program.c index 30b2ae5..a9ab0b1 100644 --- a/src/lib/edje/edje_program.c +++ b/src/lib/edje/edje_program.c @@ -463,7 +463,7 @@ _edje_program_run_iterate(Edje_Running_Program *runp, double tim) if (pa->id >= 0) { - pr = ed->table_programs[pa->id % ed->table_programs_size]; + pr = ed->collection->patterns.table_programs[pa->id % ed->collection->patterns.table_programs_size]; if (pr) _edje_program_run(ed, pr, 0, "", ""); if (_edje_block_break(ed)) { @@ -709,7 +709,7 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig, { if (pa->id >= 0) { - pr2 = ed->table_programs[pa->id % ed->table_programs_size]; + pr2 = ed->collection->patterns.table_programs[pa->id % ed->collection->patterns.table_programs_size]; if (pr2) _edje_program_run(ed, pr2, 0, "", ""); if (_edje_block_break(ed)) goto break_prog; } @@ -1049,7 +1049,7 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig, { if (pa->id >= 0) { - pr2 = ed->table_programs[pa->id % ed->table_programs_size]; + pr2 = ed->collection->patterns.table_programs[pa->id % ed->collection->patterns.table_programs_size]; if (pr2) _edje_program_run(ed, pr2, 0, "", ""); if (_edje_block_break(ed)) goto break_prog; } @@ -1401,7 +1401,7 @@ _edje_emit_handle(Edje *ed, const char *sig, const char *src, data.source = src; data.matches = NULL; - if (ed->table_programs_size > 0) + if (ed->collection->patterns.table_programs_size > 0) { const Eina_Array *match; #ifdef EDJE_PROGRAM_CACHE @@ -1411,19 +1411,19 @@ _edje_emit_handle(Edje *ed, const char *sig, const char *src, Eina_Array_Iterator iterator; unsigned int i; - if (ed->patterns.programs.u.programs.globing) - if (edje_match_programs_exec(ed->patterns.programs.signals_patterns, - ed->patterns.programs.sources_patterns, + if (ed->collection->patterns.programs.u.programs.globing) + if (edje_match_programs_exec(ed->collection->patterns.programs.signals_patterns, + ed->collection->patterns.programs.sources_patterns, sig, src, - ed->patterns.programs.u.programs.globing, + ed->collection->patterns.programs.u.programs.globing, _edje_glob_callback, &data, prop) == 0) goto break_prog; match = edje_match_signal_source_hash_get(sig, src, - ed->patterns.programs.exact_match); + ed->collection->patterns.programs.exact_match); if (match) EINA_ARRAY_ITER_NEXT(match, i, pr, iterator) _edje_glob_callback(pr, &data); -- 2.7.4