Avoid useless huge implicit memcpy.

The "simple" block:

   p3 = p1;

was doing an implicity memcpy() responsible for about 1% of processing
time when no animation happens.

Patch by Cedric BAIL.


SVN revision: 33858
This commit is contained in:
Gustavo Sverzut Barbieri 2008-02-27 14:27:10 +00:00
parent 9abfa8f70a
commit 0d9ff479d2
1 changed files with 26 additions and 27 deletions

View File

@ -1288,7 +1288,7 @@ _edje_image_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edj
static void static void
_edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags) _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
{ {
Edje_Calc_Params p1, p2, p3; Edje_Calc_Params p1, p2, p3, *pf;
Edje_Part_Description *chosen_desc; Edje_Part_Description *chosen_desc;
double pos = 0.0; double pos = 0.0;
@ -1421,16 +1421,15 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
p3.gradient.id = pos > 0.5 ? p2.gradient.id : p1.gradient.id; p3.gradient.id = pos > 0.5 ? p2.gradient.id : p1.gradient.id;
p3.gradient.type = pos > 0.5 ? p2.gradient.type : p1.gradient.type; p3.gradient.type = pos > 0.5 ? p2.gradient.type : p1.gradient.type;
pf = &p3;
} }
else else
{ {
p3 = p1; pf = &p1;
} }
ep->req.x = p3.req.x; ep->req = pf->req;
ep->req.y = p3.req.y;
ep->req.w = p3.req.w;
ep->req.h = p3.req.h;
if (ep->drag.need_reset) if (ep->drag.need_reset)
{ {
@ -1455,18 +1454,18 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
case EDJE_PART_TYPE_TEXTBLOCK: case EDJE_PART_TYPE_TEXTBLOCK:
case EDJE_PART_TYPE_GRADIENT: case EDJE_PART_TYPE_GRADIENT:
evas_object_color_set(ep->object, evas_object_color_set(ep->object,
(p3.color.r * p3.color.a) / 255, (pf->color.r * pf->color.a) / 255,
(p3.color.g * p3.color.a) / 255, (pf->color.g * pf->color.a) / 255,
(p3.color.b * p3.color.a) / 255, (pf->color.b * pf->color.a) / 255,
p3.color.a); pf->color.a);
if (p3.visible) evas_object_show(ep->object); if (pf->visible) evas_object_show(ep->object);
else evas_object_hide(ep->object); else evas_object_hide(ep->object);
/* move and resize are needed for all previous object => no break here. */ /* move and resize are needed for all previous object => no break here. */
case EDJE_PART_TYPE_SWALLOW: case EDJE_PART_TYPE_SWALLOW:
case EDJE_PART_TYPE_GROUP: case EDJE_PART_TYPE_GROUP:
/* visibility and color have no meaning on SWALLOW and GROUP part. */ /* visibility and color have no meaning on SWALLOW and GROUP part. */
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); evas_object_move(ep->object, ed->x + pf->x, ed->y + pf->y);
evas_object_resize(ep->object, p3.w, p3.h); evas_object_resize(ep->object, pf->w, pf->h);
break; break;
case EDJE_PART_TYPE_TEXT: case EDJE_PART_TYPE_TEXT:
/* This is correctly handle in _edje_text_recalc_apply at the moment. */ /* This is correctly handle in _edje_text_recalc_apply at the moment. */
@ -1477,13 +1476,13 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
switch (ep->part->type) switch (ep->part->type)
{ {
case EDJE_PART_TYPE_TEXT: case EDJE_PART_TYPE_TEXT:
_edje_text_recalc_apply(ed, ep, &p3, chosen_desc); _edje_text_recalc_apply(ed, ep, pf, chosen_desc);
break; break;
case EDJE_PART_TYPE_IMAGE: case EDJE_PART_TYPE_IMAGE:
_edje_image_recalc_apply(ed, ep, &p3, chosen_desc, pos); _edje_image_recalc_apply(ed, ep, pf, chosen_desc, pos);
break; break;
case EDJE_PART_TYPE_GRADIENT: case EDJE_PART_TYPE_GRADIENT:
_edje_gradient_recalc_apply(ed, ep, &p3, chosen_desc); _edje_gradient_recalc_apply(ed, ep, pf, chosen_desc);
break; break;
case EDJE_PART_TYPE_RECTANGLE: case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_SWALLOW: case EDJE_PART_TYPE_SWALLOW:
@ -1500,21 +1499,21 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
//// done via the clipper anyway. this created bugs when objects had their //// done via the clipper anyway. this created bugs when objects had their
//// colro set and were swallowed - then had their color changed. //// colro set and were swallowed - then had their color changed.
// evas_object_color_set(ep->swallowed_object, // evas_object_color_set(ep->swallowed_object,
// (p3.color.r * p3.color.a) / 255, // (pf->color.r * pf->color.a) / 255,
// (p3.color.g * p3.color.a) / 255, // (pf->color.g * pf->color.a) / 255,
// (p3.color.b * p3.color.a) / 255, // (pf->color.b * pf->color.a) / 255,
// p3.color.a); // pf->color.a);
evas_object_move(ep->swallowed_object, ed->x + p3.x, ed->y + p3.y); evas_object_move(ep->swallowed_object, ed->x + pf->x, ed->y + pf->y);
evas_object_resize(ep->swallowed_object, p3.w, p3.h); evas_object_resize(ep->swallowed_object, pf->w, pf->h);
if (p3.visible) evas_object_show(ep->swallowed_object); if (pf->visible) evas_object_show(ep->swallowed_object);
else evas_object_hide(ep->swallowed_object); else evas_object_hide(ep->swallowed_object);
} }
} }
ep->x = p3.x; ep->x = pf->x;
ep->y = p3.y; ep->y = pf->y;
ep->w = p3.w; ep->w = pf->w;
ep->h = p3.h; ep->h = pf->h;
ep->calculated |= flags; ep->calculated |= flags;
ep->calculating = FLAG_NONE; ep->calculating = FLAG_NONE;