edje: add fixed automatically for optimizing edje calc speed. 53/68253/3
authorHosang Kim <hosang12.kim@samsung.com>
Thu, 17 Mar 2016 18:12:34 +0000 (11:12 -0700)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Thu, 30 Jun 2016 06:57:08 +0000 (23:57 -0700)
Summary:
Applications usually use edje syntax like as,

```
 part { name :"bg";
     type: SWALLOW;
     description {
          state: "default" 0.0;
          rel1.relative: 0.0 0.0;
          rel2.relative: 0.0 0.0;
          align: 0.0 0.0;
          min: 100 100;
     }
 }

```
But edje does not calculate it exactly without "fixed: 1 1".
So edje calculation is repeated until 4000 x 4000, it is waste of time.

Reviewers: woohyun, raster, Hermet, id213sin, cedric

Reviewed By: cedric

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3801

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Change-Id: I36a0983fe5af1916d7b904c5c82d988f12c94784

src/lib/edje/edje_calc.c

index 864ee9b..9f407a2 100644 (file)
@@ -2722,6 +2722,7 @@ _edje_part_recalc_single(Edje *ed,
    Edje_Color_Class *cc = NULL;
    Edje_Internal_Aspect apref;
    int minw = 0, minh = 0, maxw = 0, maxh = 0;
+   Eina_Bool fixedw = EINA_FALSE, fixedh = EINA_FALSE;
    FLOAT_T sc;
 
    sc = DIV(ed->scale, ed->file->base_scale);
@@ -2739,6 +2740,26 @@ _edje_part_recalc_single(Edje *ed,
    /* size step */
    _edje_part_recalc_single_step(desc, params);
 
+   /* check whether this part has fixed value or not*/
+   if ((rel1_to_x == rel2_to_x) &&
+       (desc->rel1.relative_x == desc->rel2.relative_x) &&
+       (!chosen_desc->fixed.w))
+     {
+        chosen_desc->fixed.w = 1;
+        fixedw = EINA_TRUE;
+     }
+
+   if ((rel1_to_y == rel2_to_y) &&
+       (desc->rel1.relative_y == desc->rel2.relative_y) &&
+       (!chosen_desc->fixed.h))
+     {
+        chosen_desc->fixed.h = 1;
+        fixedh = EINA_TRUE;
+     }
+   if (fixedw || fixedh)
+     WRN("file %s, group %s has a non-fixed part '%s'. You should add 'fixed: %d %d'. But in order to optimize the edje calc, we add it automatically.",ed->path, ed->group, ep->part->name, fixedw, fixedh);
+
+
    /* colors */
    if (ep->part->type != EDJE_PART_TYPE_SPACER)
      {