evas: Assume object is valid and avoid call to efl_isa
authorJean-Philippe Andre <jp.andre@samsung.com>
Mon, 20 Feb 2017 09:07:00 +0000 (18:07 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Tue, 21 Feb 2017 01:52:39 +0000 (10:52 +0900)
In an internal function we should be able to safely assume an
object is indeed a smart object.

@optimization

src/lib/evas/canvas/evas_layer.c
src/lib/evas/canvas/evas_object_main.c
src/lib/evas/canvas/evas_object_smart.c
src/lib/evas/canvas/evas_render.c
src/lib/evas/canvas/render2/evas_render2_old.c
src/lib/evas/canvas/render2/evas_render2_th_main.c
src/lib/evas/canvas/render2/evas_render2_updates_old.c

index 11bbe03..a92f6d7 100644 (file)
@@ -252,7 +252,7 @@ _efl_canvas_object_efl_gfx_stack_layer_set(Eo *eo_obj, Evas_Object_Protected_Dat
                                                            1, 1, EINA_TRUE,
                                                            NULL);
      }
-   else
+   else if (obj->is_smart)
      {
         Eina_Inlist *contained;
         Evas_Object_Protected_Data *member;
index 77cc16b..a95db83 100644 (file)
@@ -2402,6 +2402,7 @@ _is_frame_flag_set(Evas_Object_Protected_Data *obj, Eina_Bool is_frame)
 
    obj->is_frame = is_frame;
 
+   if (!obj->is_smart) return;
    l = evas_object_smart_members_get_direct(obj->object);
 
    EINA_INLIST_FOREACH(l, child)
index 5279089..ca95b6e 100644 (file)
@@ -508,10 +508,6 @@ evas_object_smart_render_cache_set(Evas_Object *eo_obj, void *data)
 const Eina_Inlist *
 evas_object_smart_members_get_direct(const Evas_Object *eo_obj)
 {
-   MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
-   return NULL;
-   MAGIC_CHECK_END();
-   if (!efl_isa(eo_obj, MY_CLASS)) return NULL;
    Evas_Smart_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
    if (!o) return NULL;
    return o->contained;
@@ -1040,7 +1036,6 @@ Eina_Bool
 evas_object_smart_changed_get(Evas_Object *eo_obj)
 {
    Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
-   Evas_Object_Protected_Data *o2;
    Eina_Bool has_map = EINA_FALSE;
 
    /* If object is invisible, it's meaningless to figure out changed state
@@ -1072,8 +1067,13 @@ evas_object_smart_changed_get(Evas_Object *eo_obj)
           }
      }
 
-   EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), o2)
-      if (evas_object_smart_changed_get(o2->object)) return EINA_TRUE;
+   if (obj->is_smart)
+     {
+        Evas_Object_Protected_Data *o2;
+
+        EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), o2)
+          if (evas_object_smart_changed_get(o2->object)) return EINA_TRUE;
+     }
 
    return EINA_FALSE;
 }
index 65874e3..df7e8fc 100644 (file)
@@ -472,7 +472,7 @@ _evas_render_phase1_direct(Evas_Public_Data *e,
 
              RD(0, "      pre-render-done smart:%p|%p  [%p, %i] | [%p, %i] has_map:%i had_map:%i\n",
                 obj->smart.smart,
-                evas_object_smart_members_get_direct(eo_obj),
+                obj->is_smart ? evas_object_smart_members_get_direct(eo_obj) : NULL,
                 obj->map->cur.map, obj->map->cur.usemap,
                 obj->map->prev.map, obj->map->prev.usemap,
                 _evas_render_has_map(obj),
index b486bae..71eb730 100644 (file)
@@ -230,14 +230,12 @@ _evas_render2_object_render(Evas_Public_Data *e, Evas_Object_Protected_Data *obj
 {
    Evas_Object_Protected_Data *obj2;
    Evas_Object *eo_obj = obj->object;
-   const Eina_Inlist *il;
 
    if ((!evas_object_is_visible(eo_obj, obj)) ||
        (obj->clip.clipees) || (obj->cur->have_clipees)) return;
-   il = evas_object_smart_members_get_direct(eo_obj);
-   if (il)
+   if (obj->is_smart)
      {
-        EINA_INLIST_FOREACH(il, obj2)
+        EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), obj2)
           _evas_render2_object_render(e, obj2, uinf, l + 1);
      }
    else
index 1a7b3a4..e303977 100644 (file)
@@ -142,7 +142,7 @@ _evas_render2_th_main_obj_walk_process(Evas_Public_Data *e,
    Evas_Object *eo_obj = obj->object;
    const Eina_Inlist *il;
 
-   il = evas_object_smart_members_get_direct(eo_obj);
+   il = obj->is_smart ? evas_object_smart_members_get_direct(eo_obj) : NULL;
    if (il)
      {
         if (!_evas_render2_th_main_obj_del_handle(e, obj)) return;
index 5ab650b..58fa4a1 100644 (file)
@@ -32,7 +32,7 @@ _obj_process(Evas_Public_Data *e,
    const Eina_Inlist *il;
 
    if (!obj->changed) return;
-   il = evas_object_smart_members_get_direct(eo_obj);
+   il = obj->is_smart ? evas_object_smart_members_get_direct(eo_obj) : NULL;
    if (il)
      {
         obj->rect_del = EINA_FALSE;