Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/edje
Dir : e17/libs/edje/src/lib
Modified Files:
Edje_Edit.h Makefile.am edje_calc.c edje_load.c edje_program.c
Added Files:
edje_misc.c
Log Message:
faster lookups for programs & parts - saves a lot of list walking
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje_Edit.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- Edje_Edit.h 30 Mar 2004 10:30:35 -0000 1.6
+++ Edje_Edit.h 1 Apr 2004 15:32:17 -0000 1.7
@@ -425,6 +425,11 @@
int load_error;
int freeze;
Edje_Var_Pool *var_pool;
+ /* for faster lookups to avoid nth list walks */
+ int table_parts_size;
+ Edje_Real_Part **table_parts;
+ int table_programs_size;
+ Edje_Program **table_programs;
};
struct _Edje_Real_Part
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Makefile.am,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- Makefile.am 30 Mar 2004 10:30:35 -0000 1.13
+++ Makefile.am 1 Apr 2004 15:32:17 -0000 1.14
@@ -30,6 +30,7 @@
edje_embryo.c \
edje_load.c \
edje_main.c \
+edje_misc.c \
edje_program.c \
edje_smart.c \
edje_text.c \
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- edje_calc.c 26 Mar 2004 09:10:05 -0000 1.26
+++ edje_calc.c 1 Apr 2004 15:32:17 -0000 1.27
@@ -91,13 +91,13 @@
if (ep->param1.description)
{
if (ep->param1.description->rel1.id_x >= 0)
- ep->param1.rel1_to_x = evas_list_nth(ed->parts,
ep->param1.description->rel1.id_x);
+ ep->param1.rel1_to_x = ed->table_parts[ep->param1.description->rel1.id_x %
ed->table_parts_size];
if (ep->param1.description->rel1.id_y >= 0)
- ep->param1.rel1_to_y = evas_list_nth(ed->parts,
ep->param1.description->rel1.id_y);
+ ep->param1.rel1_to_y = ed->table_parts[ep->param1.description->rel1.id_y %
ed->table_parts_size];
if (ep->param1.description->rel2.id_x >= 0)
- ep->param1.rel2_to_x = evas_list_nth(ed->parts,
ep->param1.description->rel2.id_x);
+ ep->param1.rel2_to_x = ed->table_parts[ep->param1.description->rel2.id_x %
ed->table_parts_size];
if (ep->param1.description->rel2.id_y >= 0)
- ep->param1.rel2_to_y = evas_list_nth(ed->parts,
ep->param1.description->rel2.id_y);
+ ep->param1.rel2_to_y = ed->table_parts[ep->param1.description->rel2.id_y %
ed->table_parts_size];
}
if (!strcmp(d2, "default") && (v2 == 0.0))
@@ -150,13 +150,13 @@
if (ep->param1.description)
{
if (ep->param1.description->rel1.id_x >= 0)
- ep->param1.rel1_to_x = evas_list_nth(ed->parts,
ep->param1.description->rel1.id_x);
+ ep->param1.rel1_to_x = ed->table_parts[ep->param1.description->rel1.id_x %
ed->table_parts_size];
if (ep->param1.description->rel1.id_y >= 0)
- ep->param1.rel1_to_y = evas_list_nth(ed->parts,
ep->param1.description->rel1.id_y);
+ ep->param1.rel1_to_y = ed->table_parts[ep->param1.description->rel1.id_y %
ed->table_parts_size];
if (ep->param1.description->rel2.id_x >= 0)
- ep->param1.rel2_to_x = evas_list_nth(ed->parts,
ep->param1.description->rel2.id_x);
+ ep->param1.rel2_to_x = ed->table_parts[ep->param1.description->rel2.id_x %
ed->table_parts_size];
if (ep->param1.description->rel2.id_y >= 0)
- ep->param1.rel2_to_y = evas_list_nth(ed->parts,
ep->param1.description->rel2.id_y);
+ ep->param1.rel2_to_y = ed->table_parts[ep->param1.description->rel2.id_y %
ed->table_parts_size];
}
ep->param2.rel1_to_x = NULL;
ep->param2.rel1_to_y = NULL;
@@ -165,13 +165,13 @@
if (ep->param2.description)
{
if (ep->param2.description->rel1.id_x >= 0)
- ep->param2.rel1_to_x = evas_list_nth(ed->parts,
ep->param2.description->rel1.id_x);
+ ep->param2.rel1_to_x = ed->table_parts[ep->param2.description->rel1.id_x %
ed->table_parts_size];
if (ep->param2.description->rel1.id_y >= 0)
- ep->param2.rel1_to_y = evas_list_nth(ed->parts,
ep->param2.description->rel1.id_y);
+ ep->param2.rel1_to_y = ed->table_parts[ep->param2.description->rel1.id_y %
ed->table_parts_size];
if (ep->param2.description->rel2.id_x >= 0)
- ep->param2.rel2_to_x = evas_list_nth(ed->parts,
ep->param2.description->rel2.id_x);
+ ep->param2.rel2_to_x = ed->table_parts[ep->param2.description->rel2.id_x %
ed->table_parts_size];
if (ep->param2.description->rel2.id_y >= 0)
- ep->param2.rel2_to_y = evas_list_nth(ed->parts,
ep->param2.description->rel2.id_y);
+ ep->param2.rel2_to_y = ed->table_parts[ep->param2.description->rel2.id_y %
ed->table_parts_size];
}
ed->dirty = 1;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -3 -r1.39 -r1.40
--- edje_load.c 30 Mar 2004 10:30:35 -0000 1.39
+++ edje_load.c 1 Apr 2004 15:32:17 -0000 1.40
@@ -13,6 +13,7 @@
edje_object_file_set(Evas_Object *obj, const char *file, const char *part)
{
Edje *ed;
+ int n;
ed = _edje_fetch(obj);
if (!ed) return 0;
@@ -85,7 +86,7 @@
hist = NULL;
}
/* build real parts */
- for (l = ed->collection->parts; l; l = l->next)
+ for (n = 0, l = ed->collection->parts; l; l = l->next, n++)
{
Edje_Part *ep;
Edje_Real_Part *rp;
@@ -152,36 +153,61 @@
rp->drag.step.x = ep->dragable.step_x;
rp->drag.step.y = ep->dragable.step_y;
}
- for (l = ed->parts; l; l = l->next)
+ if (n > 0)
{
- Edje_Real_Part *rp;
-
- rp = l->data;
- if (rp->param1.description->rel1.id_x >= 0)
- rp->param1.rel1_to_x = evas_list_nth(ed->parts,
rp->param1.description->rel1.id_x);
- if (rp->param1.description->rel1.id_y >= 0)
- rp->param1.rel1_to_y = evas_list_nth(ed->parts,
rp->param1.description->rel1.id_y);
- if (rp->param1.description->rel2.id_x >= 0)
- rp->param1.rel2_to_x = evas_list_nth(ed->parts,
rp->param1.description->rel2.id_x);
- if (rp->param1.description->rel2.id_y >= 0)
- rp->param1.rel2_to_y = evas_list_nth(ed->parts,
rp->param1.description->rel2.id_y);
- _edje_text_part_on_add_clippers(ed, rp);
- if (rp->part->clip_to_id >= 0)
- {
- rp->clip_to = evas_list_nth(ed->parts, rp->part->clip_to_id);
- if (rp->clip_to)
+ ed->table_parts = malloc(sizeof(Edje_Real_Part *) * n);
+ ed->table_parts_size = n;
+ /* FIXME: check malloc return */
+ n = 0;
+ for (l = ed->parts; l; l = l->next)
+ {
+ Edje_Real_Part *rp;
+
+ rp = l->data;
+ ed->table_parts[n] = rp;
+ n++;
+ if (rp->param1.description->rel1.id_x >= 0)
+ rp->param1.rel1_to_x = evas_list_nth(ed->parts,
rp->param1.description->rel1.id_x);
+ if (rp->param1.description->rel1.id_y >= 0)
+ rp->param1.rel1_to_y = evas_list_nth(ed->parts,
rp->param1.description->rel1.id_y);
+ if (rp->param1.description->rel2.id_x >= 0)
+ rp->param1.rel2_to_x = evas_list_nth(ed->parts,
rp->param1.description->rel2.id_x);
+ if (rp->param1.description->rel2.id_y >= 0)
+ rp->param1.rel2_to_y = evas_list_nth(ed->parts,
rp->param1.description->rel2.id_y);
+ _edje_text_part_on_add_clippers(ed, rp);
+ if (rp->part->clip_to_id >= 0)
{
- evas_object_pass_events_set(rp->clip_to->object, 1);
- evas_object_clip_set(rp->object, rp->clip_to->object);
+ rp->clip_to = evas_list_nth(ed->parts, rp->part->clip_to_id);
+ if (rp->clip_to)
+ {
+ evas_object_pass_events_set(rp->clip_to->object, 1);
+ evas_object_clip_set(rp->object, rp->clip_to->object);
+ }
}
+ if (rp->part->dragable.confine_id >= 0)
+ rp->confine_to = evas_list_nth(ed->parts,
rp->part->dragable.confine_id);
+
+ rp->swallow_params.min.w = 0;
+ rp->swallow_params.min.w = 0;
+ rp->swallow_params.max.w = -1;
+ rp->swallow_params.max.h = -1;
+ }
+ }
+ n = evas_list_count(ed->collection->programs);
+ if (n > 0)
+ {
+ ed->table_programs = malloc(sizeof(Edje_Program *) * n);
+ ed->table_programs_size = n;
+ /* FIXME: check malloc return */
+ n = 0;
+ for (l = ed->collection->programs; l; l = l->next)
+ {
+ Edje_Program *pr;
+
+ pr = l->data;
+ ed->table_programs[n] = pr;
+ n++;
}
- if (rp->part->dragable.confine_id >= 0)
- rp->confine_to = evas_list_nth(ed->parts,
rp->part->dragable.confine_id);
-
- rp->swallow_params.min.w = 0;
- rp->swallow_params.min.w = 0;
- rp->swallow_params.max.w = -1;
- rp->swallow_params.max.h = -1;
}
_edje_ref(ed);
_edje_block(ed);
@@ -537,6 +563,12 @@
free(pp);
}
}
+ 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;
}
void
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_program.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -3 -r1.31 -r1.32
--- edje_program.c 28 Mar 2004 05:26:17 -0000 1.31
+++ edje_program.c 1 Apr 2004 15:32:17 -0000 1.32
@@ -228,9 +228,12 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(ed->parts, pt->id);
- if (rp) _edje_part_pos_set(ed, rp,
- runp->program->tween.mode, t);
+ if (pt->id >= 0)
+ {
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp) _edje_part_pos_set(ed, rp,
+ runp->program->tween.mode, t);
+ }
}
if (t >= 1.0)
{
@@ -240,17 +243,20 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(ed->parts, pt->id);
- if (rp)
+ if (pt->id >= 0)
{
- _edje_part_description_apply(ed, rp,
- runp->program->state,
- runp->program->value,
- NULL,
- 0.0);
- _edje_part_pos_set(ed, rp,
- runp->program->tween.mode, 0.0);
- rp->program = NULL;
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp)
+ {
+ _edje_part_description_apply(ed, rp,
+ runp->program->state,
+ runp->program->value,
+ NULL,
+ 0.0);
+ _edje_part_pos_set(ed, rp,
+ runp->program->tween.mode, 0.0);
+ rp->program = NULL;
+ }
}
}
_edje_recalc(ed);
@@ -275,7 +281,7 @@
if (pa->id >= 0)
{
- pr = evas_list_nth(ed->collection->programs, pa->id);
+ pr = ed->table_programs[pa->id % ed->table_programs_size];
if (pr) _edje_program_run(ed, pr, 0, "", "");
if (_edje_block_break(ed))
{
@@ -313,17 +319,20 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(ed->parts, pt->id);
- if (rp)
+ if (pt->id >= 0)
{
- _edje_part_description_apply(ed, rp,
- runp->program->state,
- runp->program->value,
- NULL,
- 0.0);
- _edje_part_pos_set(ed, rp,
- runp->program->tween.mode, 0.0);
- rp->program = NULL;
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp)
+ {
+ _edje_part_description_apply(ed, rp,
+ runp->program->state,
+ runp->program->value,
+ NULL,
+ 0.0);
+ _edje_part_pos_set(ed, rp,
+ runp->program->tween.mode, 0.0);
+ rp->program = NULL;
+ }
}
}
_edje_recalc(ed);
@@ -397,18 +406,21 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(ed->parts, pt->id);
- if (rp)
+ if (pt->id >= 0)
{
- if (rp->program)
- _edje_program_end(ed, rp->program);
- _edje_part_description_apply(ed, rp,
- rp->param1.description->state.name,
-
rp->param1.description->state.value,
- pr->state,
- pr->value);
- _edje_part_pos_set(ed, rp, pr->tween.mode, 0.0);
- rp->program = runp;
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp)
+ {
+ if (rp->program)
+ _edje_program_end(ed, rp->program);
+ _edje_part_description_apply(ed, rp,
+
rp->param1.description->state.name,
+
rp->param1.description->state.value,
+ pr->state,
+ pr->value);
+ _edje_part_pos_set(ed, rp, pr->tween.mode, 0.0);
+ rp->program = runp;
+ }
}
}
_edje_emit(ed, "program,start", pr->name);
@@ -435,17 +447,20 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(ed->parts, pt->id);
- if (rp)
+ if (pt->id >= 0)
{
- if (rp->program)
- _edje_program_end(ed, rp->program);
- _edje_part_description_apply(ed, rp,
- pr->state,
- pr->value,
- NULL,
- 0.0);
- _edje_part_pos_set(ed, rp, pr->tween.mode, 0.0);
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if (rp)
+ {
+ if (rp->program)
+ _edje_program_end(ed, rp->program);
+ _edje_part_description_apply(ed, rp,
+ pr->state,
+ pr->value,
+ NULL,
+ 0.0);
+ _edje_part_pos_set(ed, rp, pr->tween.mode, 0.0);
+ }
}
}
_edje_emit(ed, "program,start", pr->name);
@@ -460,7 +475,7 @@
if (pa->id >= 0)
{
- pr2 = evas_list_nth(ed->collection->programs, pa->id);
+ pr2 = ed->table_programs[pa->id % ed->table_programs_size];
if (pr2) _edje_program_run(ed, pr2, 0, "", "");
if (_edje_block_break(ed)) goto break_prog;
}
@@ -526,18 +541,21 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(ed->parts, pt->id);
- if ((rp) && (rp->drag.down.count == 0))
+ if (pt->id >= 0)
{
- rp->drag.val.x = pr->value;
- rp->drag.val.y = pr->value2;
- if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
- else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
- if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
- else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
- _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
- _edje_emit(ed, "drag,set", rp->part->name);
- if (_edje_block_break(ed)) goto break_prog;
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if ((rp) && (rp->drag.down.count == 0))
+ {
+ rp->drag.val.x = pr->value;
+ rp->drag.val.y = pr->value2;
+ if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
+ else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
+ if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
+ else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
+ _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
+ _edje_emit(ed, "drag,set", rp->part->name);
+ if (_edje_block_break(ed)) goto break_prog;
+ }
}
}
_edje_emit(ed, "program,stop", pr->name);
@@ -553,18 +571,21 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(ed->parts, pt->id);
- if ((rp) && (rp->drag.down.count == 0))
+ if (pt->id >= 0)
{
- rp->drag.val.x += pr->value * rp->drag.step.x * rp->part->dragable.x;
- rp->drag.val.y += pr->value2 * rp->drag.step.y *
rp->part->dragable.y;
- if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
- else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
- if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
- else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
- _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
- _edje_emit(ed, "drag,step", rp->part->name);
- if (_edje_block_break(ed)) goto break_prog;
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if ((rp) && (rp->drag.down.count == 0))
+ {
+ rp->drag.val.x += pr->value * rp->drag.step.x *
rp->part->dragable.x;
+ rp->drag.val.y += pr->value2 * rp->drag.step.y *
rp->part->dragable.y;
+ if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
+ else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
+ if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
+ else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
+ _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
+ _edje_emit(ed, "drag,step", rp->part->name);
+ if (_edje_block_break(ed)) goto break_prog;
+ }
}
}
_edje_emit(ed, "program,stop", pr->name);
@@ -580,18 +601,21 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(ed->parts, pt->id);
- if ((rp) && (rp->drag.down.count == 0))
+ if (pt->id >= 0)
{
- rp->drag.val.x += pr->value * rp->drag.page.x * rp->part->dragable.x;
- rp->drag.val.y += pr->value2 * rp->drag.step.y *
rp->part->dragable.y;
- if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
- else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
- if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
- else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
- _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
- _edje_emit(ed, "drag,page", rp->part->name);
- if (_edje_block_break(ed)) goto break_prog;
+ rp = ed->table_parts[pt->id % ed->table_parts_size];
+ if ((rp) && (rp->drag.down.count == 0))
+ {
+ rp->drag.val.x += pr->value * rp->drag.page.x *
rp->part->dragable.x;
+ rp->drag.val.y += pr->value2 * rp->drag.step.y *
rp->part->dragable.y;
+ if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
+ else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
+ if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
+ else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
+ _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
+ _edje_emit(ed, "drag,page", rp->part->name);
+ if (_edje_block_break(ed)) goto break_prog;
+ }
}
}
_edje_emit(ed, "program,stop", pr->name);
@@ -620,9 +644,9 @@
if (pa->id >= 0)
{
- pr2 = evas_list_nth(ed->collection->programs, pa->id);
- if (pr2) _edje_program_run(ed, pr2, 0, "", "");
- if (_edje_block_break(ed)) goto break_prog;
+ pr2 = ed->table_programs[pa->id % ed->table_programs_size];
+ if (pr2) _edje_program_run(ed, pr2, 0, "", "");
+ if (_edje_block_break(ed)) goto break_prog;
}
}
}
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs