edje: improve callback count on Evas canvas.

Summary:
This reduce by 3 the amount of callback registered on the canvas. Another
potential improvement would be to only register those callback if someone
is listening for a 'seat,*' event or if the edje file define seat filters.

Depends on D10484

Reviewers: zmike, raster, bu5hm4n, Hermet

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T8321

Differential Revision: https://phab.enlightenment.org/D10486
This commit is contained in:
Cedric Bail 2019-10-31 09:17:40 -04:00 committed by Mike Blumenkrantz
parent 5d69afdc09
commit 27e1bf2fe3
1 changed files with 22 additions and 21 deletions

View File

@ -646,18 +646,28 @@ _edje_device_changed_cb(void *data, const Efl_Event *event)
_edje_seat_event_filter_apply(ed, seat);
}
static void _edje_device_canvas_del(void *data, const Efl_Event *event);
EFL_CALLBACKS_ARRAY_DEFINE(edje_device_callbacks,
{ EFL_CANVAS_SCENE_EVENT_DEVICE_ADDED, _edje_device_added_cb },
{ EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED, _edje_device_removed_cb },
{ EFL_EVENT_DEL, _edje_device_canvas_del });
EFL_CALLBACKS_ARRAY_DEFINE(edje_device_custom_callbacks,
{ EFL_CANVAS_SCENE_EVENT_DEVICE_CHANGED, _edje_device_changed_cb },
{ EFL_CANVAS_SCENE_EVENT_DEVICE_ADDED, _edje_device_added_cb },
{ EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED, _edje_device_removed_cb },
{ EFL_EVENT_DEL, _edje_device_canvas_del });
static void
_edje_device_canvas_del(void *data, const Efl_Event *event)
{
Edje *ed = data;
efl_event_callback_del(event->object, EFL_CANVAS_SCENE_EVENT_DEVICE_ADDED,
_edje_device_added_cb, ed);
efl_event_callback_del(event->object, EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED,
_edje_device_removed_cb, ed);
if (ed->collection && ed->collection->use_custom_seat_names)
efl_event_callback_del(event->object, EFL_CANVAS_SCENE_EVENT_DEVICE_CHANGED,
_edje_device_changed_cb, ed);
efl_event_callback_array_del(event->object, edje_device_custom_callbacks(), ed);
else
efl_event_callback_array_del(event->object, edje_device_callbacks(), ed);
}
static void
@ -672,16 +682,11 @@ _edje_devices_add(Edje *ed, Evas *tev)
if (efl_input_device_type_get(dev) == EFL_INPUT_DEVICE_TYPE_SEAT)
_edje_device_add(ed, dev);
}
efl_event_callback_add(tev, EFL_EVENT_DEL, _edje_device_canvas_del, ed);
efl_event_callback_add(tev, EFL_CANVAS_SCENE_EVENT_DEVICE_ADDED,
_edje_device_added_cb, ed);
efl_event_callback_add(tev, EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED,
_edje_device_removed_cb, ed);
if (ed->collection && ed->collection->use_custom_seat_names)
efl_event_callback_add(tev, EFL_CANVAS_SCENE_EVENT_DEVICE_CHANGED,
_edje_device_changed_cb, ed);
efl_event_callback_array_add(tev, edje_device_custom_callbacks(), ed);
else
efl_event_callback_array_add(tev, edje_device_callbacks(), ed);
}
static inline void
@ -1880,14 +1885,10 @@ _edje_file_callbacks_del(Edje *ed, Evas *e)
Evas *tev = e;
if (!tev) tev = evas_object_evas_get(ed->obj);
efl_event_callback_del(tev, EFL_EVENT_DEL, _edje_device_canvas_del, ed);
efl_event_callback_del(tev, EFL_CANVAS_SCENE_EVENT_DEVICE_ADDED,
_edje_device_added_cb, ed);
efl_event_callback_del(tev, EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED,
_edje_device_removed_cb, ed);
if (ed->collection && ed->collection->use_custom_seat_names)
efl_event_callback_del(tev, EFL_CANVAS_SCENE_EVENT_DEVICE_CHANGED,
_edje_device_changed_cb, ed);
efl_event_callback_array_del(tev, edje_device_custom_callbacks(), ed);
else
efl_event_callback_array_del(tev, edje_device_callbacks(), ed);
}
void