cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=47df4439721f1ba3fb9610f3192c760c06f8e1df

commit 47df4439721f1ba3fb9610f3192c760c06f8e1df
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Thu Jun 23 10:11:39 2016 -0700

    edje: replace 4000x4000 min size limitarion with loop count restriction.
    
    Summary:
    4000x4000 min size limitation was added to prevent infinite
    calculation loop. But, it can ruin calculation of some proper Edjes.
    Normally, properly generated Edje runs the calculation loop below 10 times.
    So, "255" could be proper limitation for calculation loop.
    It also make better performance for broken Edje.
    
    Test Plan: N/A
    
    Reviewers: raster, Hermet, woohyun, cedric
    
    Reviewed By: cedric
    
    Subscribers: jpeg, z-wony, Blackmole
    
    Differential Revision: https://phab.enlightenment.org/D4075
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/edje/edje_util.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index fead840..970e2d8 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -4058,10 +4058,11 @@ _edje_object_parts_extends_calc(Eo *obj EINA_UNUSED, 
Edje *ed, Evas_Coord *x, Ev
 EOLIAN void
 _edje_object_size_min_restricted_calc(Eo *obj EINA_UNUSED, Edje *ed, 
Evas_Coord *minw, Evas_Coord *minh, Evas_Coord restrictedw, Evas_Coord 
restrictedh)
 {
-   const int MIN_LIMIT = 4000;
+   const int CALC_COUNT_LIMIT = 255;
 
    Evas_Coord orig_w, orig_h; //original edje size
    int max_over_w, max_over_h;  //maximum over-calculated size.
+   int calc_count = 0;
    Eina_Bool repeat_w, repeat_h;
    Eina_Bool reset_max = EINA_TRUE;
    Edje_Real_Part *pep = NULL;
@@ -4092,6 +4093,8 @@ again:
      {
         unsigned int i;
 
+        calc_count++;
+
         repeat_w = EINA_FALSE;
         repeat_h = EINA_FALSE;
         ed->dirty = EINA_TRUE;
@@ -4181,7 +4184,7 @@ again:
              if (ed->h < restrictedh) ed->h = restrictedh;
           }
 
-        if ((ed->w > MIN_LIMIT) || (ed->h > MIN_LIMIT))
+        if (reset_max && (calc_count > CALC_COUNT_LIMIT))
           {
              /* Only print it if we have a non-fixed textblock.
               * We should possibly avoid all of this if in this case, but in
@@ -4192,16 +4195,12 @@ again:
                     ERR("file %s, group %s has a non-fixed part '%s'. Adding 
'fixed: 1 1;' to source EDC may help. Continuing discarding faulty part.",
                         ed->path, ed->group, pep->part->name);
                   else
-                    ERR("file %s, group %s overflowed %dx%d with minimum size 
of %dx%d. Continuing discarding faulty parts.",
-                        ed->path, ed->group, MIN_LIMIT, MIN_LIMIT,
-                        ed->w, ed->h);
+                    ERR("file %s, group %s runs infinite minimum calculation 
loops.Continuing discarding faulty parts.",
+                        ed->path, ed->group);
                }
 
-             if (reset_max)
-               {
-                  reset_max = EINA_FALSE;
-                  goto again;
-               }
+             reset_max = EINA_FALSE;
+             goto again;
           }
      }
    while (repeat_w || repeat_h);

-- 


Reply via email to