derekf pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=41a9e1c8737c5167c7974c0f51aa1a531aad4b62

commit 41a9e1c8737c5167c7974c0f51aa1a531aad4b62
Author: Derek Foreman <[email protected]>
Date:   Thu Jan 24 11:34:12 2019 -0600

    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 <[email protected]>
---
 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 6db38e81f4..37e62976ff 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 793c0dbf67..cce00dfe19 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 ba1d21651c..8599369ae9 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1898,8 +1898,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);

-- 


Reply via email to