From 63f16ce3859a11739321628ab7c5da6ee207623b Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Thu, 24 Jan 2019 11:34:12 -0600 Subject: [PATCH] gesture_manager: Use private data getter to save some lookups We frequently process an array of several events at once, so we can now look up the gesture manager private data once for the entire array. Differential Revision: https://phab.enlightenment.org/D7763 Signed-off-by: Derek Foreman --- src/lib/evas/canvas/evas_callbacks.c | 14 ++++++++++++-- src/lib/evas/gesture/efl_canvas_gesture_manager.c | 8 ++++---- src/lib/evas/include/evas_private.h | 4 ++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/lib/evas/canvas/evas_callbacks.c b/src/lib/evas/canvas/evas_callbacks.c index 6db38e8..37e6297 100644 --- a/src/lib/evas/canvas/evas_callbacks.c +++ b/src/lib/evas/canvas/evas_callbacks.c @@ -792,12 +792,17 @@ _check_event_catcher_add(void *data, const Efl_Event *event) const Efl_Callback_Array_Item_Full *array = event->info; Evas_Object_Protected_Data *obj = data; Evas_Callback_Type type = EVAS_CALLBACK_LAST; + void *gd = NULL; int i; for (i = 0; array[i].desc != NULL; i++) { if (obj->layer->evas->gesture_manager) - _efl_canvas_gesture_manager_callback_add_hook(obj->layer->evas->gesture_manager, obj->object, array[i].desc); + { + if (!gd) gd = _efl_canvas_gesture_manager_private_data_get(obj->layer->evas->gesture_manager); + + _efl_canvas_gesture_manager_callback_add_hook(gd, obj->object, array[i].desc); + } if (array[i].desc == EFL_EVENT_ANIMATOR_TICK) { @@ -819,6 +824,7 @@ _check_event_catcher_del(void *data, const Efl_Event *event) { const Efl_Callback_Array_Item_Full *array = event->info; Evas_Object_Protected_Data *obj = data; + void *gd = NULL; int i; if (!obj->layer || @@ -828,7 +834,11 @@ _check_event_catcher_del(void *data, const Efl_Event *event) for (i = 0; array[i].desc != NULL; i++) { if (obj->layer->evas->gesture_manager) - _efl_canvas_gesture_manager_callback_del_hook(obj->layer->evas->gesture_manager, obj->object, array[i].desc); + { + if (!gd) gd = _efl_canvas_gesture_manager_private_data_get(obj->layer->evas->gesture_manager); + + _efl_canvas_gesture_manager_callback_del_hook(gd, obj->object, array[i].desc); + } if (array[i].desc == EFL_EVENT_ANIMATOR_TICK) { diff --git a/src/lib/evas/gesture/efl_canvas_gesture_manager.c b/src/lib/evas/gesture/efl_canvas_gesture_manager.c index 793c0db..cce00df 100644 --- a/src/lib/evas/gesture/efl_canvas_gesture_manager.c +++ b/src/lib/evas/gesture/efl_canvas_gesture_manager.c @@ -106,9 +106,9 @@ _efl_canvas_gesture_manager_private_data_get(Eo *obj) } void -_efl_canvas_gesture_manager_callback_add_hook(Eo *obj, Eo *target, const Efl_Event_Description *type) +_efl_canvas_gesture_manager_callback_add_hook(void *data, Eo *target, const Efl_Event_Description *type) { - Efl_Canvas_Gesture_Manager_Data *pd = efl_data_scope_get(obj, MY_CLASS); + Efl_Canvas_Gesture_Manager_Data *pd = data; // if there is a recognizer registered for that event then add it to the gesture context Efl_Canvas_Gesture_Recognizer *recognizer = eina_hash_find (pd->m_recognizers, &type); if (recognizer) @@ -119,9 +119,9 @@ _efl_canvas_gesture_manager_callback_add_hook(Eo *obj, Eo *target, const Efl_Eve } void -_efl_canvas_gesture_manager_callback_del_hook(Eo *obj, Eo *target, const Efl_Event_Description *type) +_efl_canvas_gesture_manager_callback_del_hook(void *data, Eo *target, const Efl_Event_Description *type) { - Efl_Canvas_Gesture_Manager_Data *pd = efl_data_scope_get(obj, MY_CLASS); + Efl_Canvas_Gesture_Manager_Data *pd = data; // if there is a recognizer registered for that event then add it to the gesture context Efl_Canvas_Gesture_Recognizer *recognizer = eina_hash_find (pd->m_recognizers, &type); if (recognizer) diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index e92789c..d7218f9 100755 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1918,8 +1918,8 @@ void evas_object_pixels_get_force(Evas_Object *eo_obj, Evas_Object_Protected_Dat // Gesture Manager void *_efl_canvas_gesture_manager_private_data_get(Eo *obj); void _efl_canvas_gesture_manager_filter_event(Eo *gesture_manager, Eo *target, void *event); -void _efl_canvas_gesture_manager_callback_del_hook(Eo *gesture_manager, Eo *target, const Efl_Event_Description *type); -void _efl_canvas_gesture_manager_callback_add_hook(Eo *gesture_manager, Eo *target, const Efl_Event_Description *type); +void _efl_canvas_gesture_manager_callback_del_hook(void *data, Eo *target, const Efl_Event_Description *type); +void _efl_canvas_gesture_manager_callback_add_hook(void *data, Eo *target, const Efl_Event_Description *type); //evas focus functions void evas_focus_init(void); -- 2.7.4