gesture_manager: Use private data getter to save some lookups
authorDerek Foreman <derek.foreman.samsung@gmail.com>
Thu, 24 Jan 2019 17:34:12 +0000 (11:34 -0600)
committerTaehyub Kim <taehyub.kim@samsung.com>
Thu, 31 Jan 2019 01:53:55 +0000 (10:53 +0900)
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 <derek.foreman.samsung@gmail.com>
src/lib/evas/canvas/evas_callbacks.c
src/lib/evas/gesture/efl_canvas_gesture_manager.c
src/lib/evas/include/evas_private.h

index 6db38e8..37e6297 100644 (file)
@@ -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)
           {
index 793c0db..cce00df 100644 (file)
@@ -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)
index e92789c..d7218f9 100755 (executable)
@@ -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);