elementary/perf: reduce number of efl_isa() call. in elementary test application efl_isa() shows up as hotsport during profiling so refactored the code to reduce redundant efl_isa() calls.

in genlist testcase the number of calls reduced by 30000.

Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Reviewed-by: Hermet Park <<hermetpark@gmail.com>>
Reviewed-by: Youngbok Shin <youngb.shin@samsung.com>
Differential Revision: https://phab.enlightenment.org/D11984
This commit is contained in:
Subhransu Mohanty 2020-06-17 06:28:44 +00:00 committed by Marcel Hollerbach
parent 95eb621c15
commit 18b0abf62f
1 changed files with 13 additions and 23 deletions

View File

@ -186,8 +186,6 @@ _on_sub_obj_del(void *data, const Efl_Event *event);
static void _propagate_event(void *data, const Efl_Event *eo_event);
static void _elm_widget_shadow_update(Efl_Ui_Widget *obj);
EFL_CALLBACKS_ARRAY_DEFINE(elm_widget_subitems_callbacks,
{ EFL_EVENT_DEL, _on_sub_obj_del });
EFL_CALLBACKS_ARRAY_DEFINE(efl_subitems_callbacks,
{ EFL_EVENT_DEL, _on_sub_obj_del });
EFL_CALLBACKS_ARRAY_DEFINE(focus_callbacks,
@ -198,27 +196,13 @@ EFL_CALLBACKS_ARRAY_DEFINE(focus_callbacks,
static inline void
_callbacks_add(Eo *widget, void *data)
{
if (_elm_widget_is(widget))
{
efl_event_callback_array_add(widget, elm_widget_subitems_callbacks(), data);
}
else
{
efl_event_callback_array_add(widget, efl_subitems_callbacks(), data);
}
efl_event_callback_array_add(widget, efl_subitems_callbacks(), data);
}
static inline void
_callbacks_del(Eo *widget, void *data)
{
if (_elm_widget_is(widget))
{
efl_event_callback_array_del(widget, elm_widget_subitems_callbacks(), data);
}
else
{
efl_event_callback_array_del(widget, efl_subitems_callbacks(), data);
}
efl_event_callback_array_del(widget, efl_subitems_callbacks(), data);
}
void
@ -1532,12 +1516,14 @@ EOLIAN static Eina_Bool
_efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
{
Efl_Ui_Widget *parent;
Eina_Bool is_widget;
EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_isa(sobj, EFL_GFX_ENTITY_INTERFACE), EINA_FALSE);
EINA_SAFETY_ON_TRUE_RETURN_VAL(obj == sobj, EINA_FALSE);
is_widget = elm_widget_is(sobj);
//first make sure that we unregister the sobj from the parent
if (elm_widget_is(sobj))
if (is_widget)
parent = efl_ui_widget_parent_get(sobj);
else
parent = evas_object_data_get(sobj, "elm-parent");
@ -1560,7 +1546,7 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
//and if it is a widget, please set the correct parent on the widget itself
//the parent set method will take care of the property syncing etc.
if (elm_widget_is(sobj))
if (is_widget)
efl_ui_widget_parent_set(sobj, obj);
return EINA_TRUE;
@ -1569,13 +1555,17 @@ _efl_ui_widget_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
EOLIAN static Eina_Bool
_efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj)
{
Evas_Object *sobj_parent;
Evas_Object *sobj_parent = NULL;
Eina_Bool is_widget;
if (!sobj) return EINA_FALSE;
EINA_SAFETY_ON_TRUE_RETURN_VAL(obj == sobj, EINA_FALSE);
sobj_parent = evas_object_data_del(sobj, "elm-parent");
is_widget = _elm_widget_is(sobj);
if (!is_widget) sobj_parent = evas_object_data_del(sobj, "elm-parent");
if (sobj_parent && sobj_parent != obj)
{
static int abort_on_warn = -1;
@ -1595,7 +1585,7 @@ _efl_ui_widget_widget_sub_object_del(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Ob
return EINA_FALSE;
}
if (_elm_widget_is(sobj))
if (is_widget)
{
if (_is_focused(sobj))
{