cedric pushed a commit to branch master.

commit 0cee296fa7e09a52593e4575d1d1f3036c552d34
Author: Cedric Bail <[email protected]>
Date:   Sun Apr 7 11:39:20 2013 +0900

    edje: don't use 30K of pointers for an indirection in some event path.
---
 src/lib/edje/edje_cache.c     |  1 +
 src/lib/edje/edje_callbacks.c | 13 ++++++++-----
 src/lib/edje/edje_edit.c      | 20 ++++++++++----------
 src/lib/edje/edje_load.c      | 25 ++++++++-----------------
 src/lib/edje/edje_private.h   |  2 --
 src/lib/edje/edje_util.c      |  9 +++++++--
 6 files changed, 34 insertions(+), 36 deletions(-)

diff --git a/src/lib/edje/edje_cache.c b/src/lib/edje/edje_cache.c
index 7e5506f..e81cc9e 100644
--- a/src/lib/edje/edje_cache.c
+++ b/src/lib/edje/edje_cache.c
@@ -523,6 +523,7 @@ open:
                       prev = ep2;
 
                       ep2 = edc->parts[ep2->dragable.event_id];
+                      /* events_to may be used only with dragable */
                       if (!ep2->dragable.x && !ep2->dragable.y)
                         {
                            prev->dragable.event_id = -1;
diff --git a/src/lib/edje/edje_callbacks.c b/src/lib/edje/edje_callbacks.c
index b61da46..4b3fe3d 100644
--- a/src/lib/edje/edje_callbacks.c
+++ b/src/lib/edje/edje_callbacks.c
@@ -107,9 +107,9 @@ _edje_mouse_down_signal_cb(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj, vo
        _edje_emit(ed, buf, rp->part->name);
      }
 
-   if (rp->events_to)
+   if (rp->part->dragable.event_id >= 0)
      {
-        rp = rp->events_to;
+        rp = ed->table_parts[rp->part->dragable.event_id % 
ed->table_parts_size];
         if (!ignored)
           {
              snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
@@ -167,9 +167,9 @@ _edje_mouse_up_signal_cb(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj, void
        _edje_emit(ed, buf, rp->part->name);
      }
 
-   if (rp->events_to)
+   if (rp->part->dragable.event_id >= 0)
      {
-       rp = rp->events_to;
+       rp = ed->table_parts[rp->part->dragable.event_id % 
ed->table_parts_size];
        if (!ignored)
          {
             snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button);
@@ -221,7 +221,10 @@ _edje_mouse_move_signal_cb(void *data, Evas *e 
EINA_UNUSED, Evas_Object *obj, vo
    ed = data;
    rp = evas_object_data_get(obj, "real_part");
    if (!rp) return;
-   if (rp->events_to) rp = rp->events_to;
+   if (rp->part->dragable.event_id >= 0)
+     {
+        rp = ed->table_parts[rp->part->dragable.event_id % 
ed->table_parts_size];
+     }
 
    ignored = rp->part->ignore_flags & ev->event_flags;
 
diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c
index a0bc3b3..a1c7e4d 100644
--- a/src/lib/edje/edje_edit.c
+++ b/src/lib/edje/edje_edit.c
@@ -2226,10 +2226,10 @@ edje_edit_part_del(Evas_Object *obj, const char* part)
             if (real->custom->rel2_to_y == rp) real->custom->rel2_to_y = NULL;
          }
 
-       if (real->clip_to == rp)
+       if (real->part->clip_to_id == rp->part->id)
          {
             evas_object_clip_set(real->object, ed->base->clipper);
-            real->clip_to = NULL;
+            real->part->clip_to_id = -1;
          }
        if (real->drag && real->drag->confine_to == rp)
          real->drag->confine_to = NULL;
@@ -2472,9 +2472,11 @@ edje_edit_part_clip_to_set(Evas_Object *obj, const char 
*part, const char *clip_
      {
        //printf("UnSet clip_to for part: %s\n", part);
 
-       if (rp->clip_to && rp->clip_to->object)
+       if (rp->part->clip_to_id >= 0)
          {
-            evas_object_pointer_mode_set(rp->clip_to->object,
+            clip = ed->table_parts[rp->part->clip_to_id % 
ed->table_parts_size];
+
+            evas_object_pointer_mode_set(clip->object,
                                          EVAS_OBJECT_POINTER_MODE_AUTOGRAB);
             evas_object_clip_unset(rp->object);
          }
@@ -2484,7 +2486,6 @@ edje_edit_part_clip_to_set(Evas_Object *obj, const char 
*part, const char *clip_
          evas_object_clip_set(rp->typedata.swallow->swallowed_object, 
ed->base->clipper);
 
        rp->part->clip_to_id = -1;
-       rp->clip_to = NULL;
 
        edje_object_calc_force(obj);
 
@@ -2504,13 +2505,12 @@ edje_edit_part_clip_to_set(Evas_Object *obj, const char 
*part, const char *clip_
      }
 
    rp->part->clip_to_id = clip->part->id;
-   rp->clip_to = clip;
 
-   evas_object_pass_events_set(rp->clip_to->object, 1);
-   evas_object_pointer_mode_set(rp->clip_to->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
-   evas_object_clip_set(rp->object, rp->clip_to->object);
+   evas_object_pass_events_set(clip->object, 1);
+   evas_object_pointer_mode_set(clip->object, EVAS_OBJECT_POINTER_MODE_NOGRAB);
+   evas_object_clip_set(rp->object, clip->object);
    if (rp->typedata.swallow->swallowed_object)
-     evas_object_clip_set(rp->typedata.swallow->swallowed_object, 
rp->clip_to->object);
+     evas_object_clip_set(rp->typedata.swallow->swallowed_object, 
clip->object);
 
    edje_object_calc_force(obj);
 
diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index b759e44..2d38d48 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -672,14 +672,16 @@ _edje_object_file_set_internal(Evas_Object *obj, const 
char *file, const char *g
                         }
                       if (rp->part->clip_to_id >= 0)
                         {
-                           rp->clip_to = ed->table_parts[rp->part->clip_to_id 
% ed->table_parts_size];
-                           if (rp->clip_to &&
-                                rp->clip_to->object &&
+                           Edje_Real_Part *clip_to;
+
+                           clip_to = ed->table_parts[rp->part->clip_to_id % 
ed->table_parts_size];
+                           if (clip_to &&
+                                clip_to->object &&
                                 rp->object)
                              {
-                                
evas_object_pass_events_set(rp->clip_to->object, 1);
-                                
evas_object_pointer_mode_set(rp->clip_to->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
-                                evas_object_clip_set(rp->object, 
rp->clip_to->object);
+                                evas_object_pass_events_set(clip_to->object, 
1);
+                                evas_object_pointer_mode_set(clip_to->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
+                                evas_object_clip_set(rp->object, 
clip_to->object);
                              }
                         }
                       if (rp->drag)
@@ -688,17 +690,6 @@ _edje_object_file_set_internal(Evas_Object *obj, const 
char *file, const char *g
                              rp->drag->confine_to = 
ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size];
                         }
 
-                      /* replay events for dragable */
-                      if (rp->part->dragable.event_id >= 0)
-                        {
-                           rp->events_to =
-                             ed->table_parts[rp->part->dragable.event_id % 
ed->table_parts_size];
-                           /* events_to may be used only with dragable */
-                           if (!rp->events_to->part->dragable.x &&
-                               !rp->events_to->part->dragable.y)
-                             rp->events_to = NULL;
-                        }
-
                        if ((rp->type == EDJE_RP_TYPE_SWALLOW) &&
                            (rp->typedata.swallow))
                          {
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index 3e4605b..e16e25e 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -1527,8 +1527,6 @@ struct _Edje_Real_Part
    // WITH EDJE_CALC_CACHE: 307
    Edje_Running_Program     *program; // 4
    Edje_Calc_Params         *current; // 4
-   Edje_Real_Part          *events_to; // 4
-   Edje_Real_Part           *clip_to; // 4
 #ifdef HAVE_EPHYSICS
    Edje_Part_Description_Common *prev_description; // 4
    EPhysics_Body            *body; // 4
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index d401bf1..f61f159 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -6418,8 +6418,13 @@ _edje_real_part_swallow(Edje *ed,
    if (!obj_swallow) return;
    rp->typedata.swallow->swallowed_object = obj_swallow;
    evas_object_smart_member_add(rp->typedata.swallow->swallowed_object, 
ed->obj);
-   if (rp->clip_to)
-     evas_object_clip_set(rp->typedata.swallow->swallowed_object, 
rp->clip_to->object);
+   if (rp->part->clip_to_id >= 0)
+     {
+       Edje_Real_Part *clip_to;
+
+       clip_to = ed->table_parts[rp->part->clip_to_id % ed->table_parts_size];
+       evas_object_clip_set(rp->typedata.swallow->swallowed_object, 
clip_to->object);
+     }
    else evas_object_clip_set(rp->typedata.swallow->swallowed_object, 
ed->base->clipper);
    evas_object_stack_above(rp->typedata.swallow->swallowed_object, rp->object);
    evas_object_event_callback_add(rp->typedata.swallow->swallowed_object,

-- 

------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire 
the most talented Cisco Certified professionals. Visit the 
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html

Reply via email to