From 2098f55ba2665e007d5d888f2739f97658fac9ae Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 25 Oct 2018 00:29:48 +0100 Subject: [PATCH] evas - remove excess data scope lookup during render when getting changed getting smart changed meant another scope data get when we already had the protected data in the caller. don't do that and just pass down. saves a lot of overhead... @optimize --- src/lib/evas/canvas/evas_object_smart.c | 7 +++---- src/lib/evas/canvas/evas_render.c | 6 +++--- src/lib/evas/include/evas_private.h | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 11d8feb8cb..7f0daf7331 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -1225,9 +1225,8 @@ _efl_canvas_group_group_change(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED) } Eina_Bool -evas_object_smart_changed_get(Evas_Object *eo_obj) +evas_object_smart_changed_get(Evas_Object_Protected_Data *obj) { - Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); Eina_Bool has_map = EINA_FALSE; /* If object is invisible, it's meaningless to figure out changed state @@ -1263,8 +1262,8 @@ evas_object_smart_changed_get(Evas_Object *eo_obj) { 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; + EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(obj->object), o2) + if (evas_object_smart_changed_get(o2)) 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 cbd13d315b..e4d76ed710 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -407,7 +407,7 @@ static inline Eina_Bool _evas_render_object_changed_get(Evas_Object_Protected_Data *obj) { if (obj->smart.smart) - return evas_object_smart_changed_get(obj->object); + return evas_object_smart_changed_get(obj); else return obj->changed; } @@ -469,7 +469,7 @@ _evas_render_phase1_direct(Evas_Public_Data *e, if (obj->proxy->redraw || obj->mask->redraw) _evas_render_prev_cur_clip_cache_add(e, obj); - if (!obj->smart.smart || evas_object_smart_changed_get(eo_obj)) + if (!obj->smart.smart || evas_object_smart_changed_get(obj)) { /* proxy sources */ if (obj->proxy->proxies || obj->proxy->proxy_textures) @@ -1926,7 +1926,7 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj, changed = EINA_TRUE; } - if (!changed) changed = evas_object_smart_changed_get(eo_obj); + if (!changed) changed = evas_object_smart_changed_get(obj); /* mark the old map as invalid, so later we don't reuse it as a * cache. */ diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index cc927afef0..aad7c2f5c3 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1608,7 +1608,7 @@ void _evas_object_smart_clipped_smart_move_internal(Evas_Object *eo_obj, Evas_Co void evas_call_smarts_calculate(Evas *e); void evas_object_smart_bounding_box_update(Evas_Object_Protected_Data *obj); void evas_object_smart_need_bounding_box_update(Evas_Smart_Data *o, Evas_Object_Protected_Data *obj); -Eina_Bool evas_object_smart_changed_get(Evas_Object *eo_obj); +Eina_Bool evas_object_smart_changed_get(Evas_Object_Protected_Data *obj); void evas_object_smart_attach(Evas_Object *eo_obj, Evas_Smart *s); void _evas_post_event_callback_call_real(Evas *e, Evas_Public_Data* e_pd, int min_event_id); #define _evas_post_event_callback_call(e, pd, id) do { \