jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=d150cdfd9d3ef32cceaf2db93a57f9b4a53aaf55
commit d150cdfd9d3ef32cceaf2db93a57f9b4a53aaf55 Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Mon Feb 20 18:07:00 2017 +0900 evas: Assume object is valid and avoid call to efl_isa 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 | 2 +- src/lib/evas/canvas/evas_object_main.c | 1 + src/lib/evas/canvas/evas_object_smart.c | 14 +++++++------- src/lib/evas/canvas/evas_render.c | 2 +- src/lib/evas/canvas/render2/evas_render2_old.c | 6 ++---- src/lib/evas/canvas/render2/evas_render2_th_main.c | 2 +- src/lib/evas/canvas/render2/evas_render2_updates_old.c | 2 +- 7 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/lib/evas/canvas/evas_layer.c b/src/lib/evas/canvas/evas_layer.c index 11bbe03..a92f6d7 100644 --- a/src/lib/evas/canvas/evas_layer.c +++ b/src/lib/evas/canvas/evas_layer.c @@ -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; diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index 77cc16b..a95db83 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -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) diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 5279089..ca95b6e 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -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; } diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 65874e3..df7e8fc 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -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), diff --git a/src/lib/evas/canvas/render2/evas_render2_old.c b/src/lib/evas/canvas/render2/evas_render2_old.c index b486bae..71eb730 100644 --- a/src/lib/evas/canvas/render2/evas_render2_old.c +++ b/src/lib/evas/canvas/render2/evas_render2_old.c @@ -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 diff --git a/src/lib/evas/canvas/render2/evas_render2_th_main.c b/src/lib/evas/canvas/render2/evas_render2_th_main.c index 1a7b3a4..e303977 100644 --- a/src/lib/evas/canvas/render2/evas_render2_th_main.c +++ b/src/lib/evas/canvas/render2/evas_render2_th_main.c @@ -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; diff --git a/src/lib/evas/canvas/render2/evas_render2_updates_old.c b/src/lib/evas/canvas/render2/evas_render2_updates_old.c index 5ab650bc..58fa4a1 100644 --- a/src/lib/evas/canvas/render2/evas_render2_updates_old.c +++ b/src/lib/evas/canvas/render2/evas_render2_updates_old.c @@ -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; --