summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric BAIL <cedric@osg.samsung.com>2017-03-13 11:11:44 -0700
committerCedric BAIL <cedric@osg.samsung.com>2017-03-13 13:42:00 -0700
commitee866ca59904077d6e69723d4f996e6bf571db7f (patch)
tree99a5432406939aabc4c9a3f56b8e184abd96ef9a
parent3fa7570bdad6ac8593cdd0a9f6af83f0b1afe286 (diff)
downloadefl-ee866ca59904077d6e69723d4f996e6bf571db7f.tar.gz
Revert "ecore-evas reduce modifier modification on every event to cut cpu"
This reverts commit 3a9d54085b8751cbd0bca4698a8ff702d9bdc7b4. I got crash and a lot of valgrind warning with this patch. All in all, I think we can just wait for next release and do a proper cleanup of our API to not rely on strings at all. For references this is the first valgrind warning I get (Not going to past the 100 following one) : ==11860== Invalid write of size 4 ==11860== at 0xB10DDD1: _ecore_event_evas_modifier_lock_update (ecore_input_evas.c:432) ==11860== by 0xB10E3DD: ecore_event_evas_mouse_move (ecore_input_evas.c:725) ==11860== by 0x5D5115D: _ecore_call_handler_cb (ecore_private.h:317) ==11860== by 0x5D5115D: _ecore_event_call (ecore_events.c:518) ==11860== by 0x5D5CC47: _ecore_main_loop_iterate_internal (ecore_main.c:2381) ==11860== by 0x5D5D42E: ecore_main_loop_begin (ecore_main.c:1289) ==11860== by 0x5D5D490: _efl_loop_begin (ecore_main.c:2831) ==11860== by 0x5D59555: efl_loop_begin (efl_loop.eo.c:32) ==11860== by 0x14F275: main (test.c:1188) ==11860== Address 0x19a36828 is 7 bytes after a block of size 1 alloc'd ==11860== at 0x4C2AACE: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==11860== by 0x4C2CC81: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==11860== by 0xB10DDA8: _ecore_event_evas_modifier_lock_update (ecore_input_evas.c:425) ==11860== by 0xB10E3DD: ecore_event_evas_mouse_move (ecore_input_evas.c:725) ==11860== by 0x5D5115D: _ecore_call_handler_cb (ecore_private.h:317) ==11860== by 0x5D5115D: _ecore_event_call (ecore_events.c:518) ==11860== by 0x5D5CC47: _ecore_main_loop_iterate_internal (ecore_main.c:2381) ==11860== by 0x5D5D42E: ecore_main_loop_begin (ecore_main.c:1289) ==11860== by 0x5D5D490: _efl_loop_begin (ecore_main.c:2831) ==11860== by 0x5D59555: efl_loop_begin (efl_loop.eo.c:32) ==11860== by 0x14F275: main (test.c:1188)
-rw-r--r--src/lib/ecore_input_evas/ecore_input_evas.c163
1 files changed, 28 insertions, 135 deletions
diff --git a/src/lib/ecore_input_evas/ecore_input_evas.c b/src/lib/ecore_input_evas/ecore_input_evas.c
index 1748167289..7866bd5d9a 100644
--- a/src/lib/ecore_input_evas/ecore_input_evas.c
+++ b/src/lib/ecore_input_evas/ecore_input_evas.c
@@ -15,28 +15,17 @@
int _ecore_input_evas_log_dom = -1;
-typedef struct _Ecore_Input_Window Ecore_Input_Window;
-typedef struct _Ecore_Input_Seat_State Ecore_Input_Seat_State;
-
+typedef struct _Ecore_Input_Window Ecore_Input_Window;
struct _Ecore_Input_Window
{
- Evas *evas;
- void *window;
- Ecore_Input_Seat_State *device_states;
- Ecore_Event_Mouse_Move_Cb move_mouse;
- Ecore_Event_Multi_Move_Cb move_multi;
- Ecore_Event_Multi_Down_Cb down_multi;
- Ecore_Event_Multi_Up_Cb up_multi;
- Ecore_Event_Direct_Input_Cb direct;
- int device_states_num;
- int ignore_event;
-};
-
-struct _Ecore_Input_Seat_State
-{
- Evas_Device *seat;
- unsigned int modifiers;
- unsigned int invalid;
+ Evas *evas;
+ void *window;
+ Ecore_Event_Mouse_Move_Cb move_mouse;
+ Ecore_Event_Multi_Move_Cb move_multi;
+ Ecore_Event_Multi_Down_Cb down_multi;
+ Ecore_Event_Multi_Up_Cb up_multi;
+ Ecore_Event_Direct_Input_Cb direct;
+ int ignore_event;
};
typedef enum _Ecore_Input_State {
@@ -289,9 +278,9 @@ _ecore_event_evas_push_mouse_move(Ecore_Event_Mouse_Move *e)
}
}
-static void
-_ecore_event_evas_seat_modifier_lock_update(Evas *e, unsigned int modifiers,
- Evas_Device *seat)
+EAPI void
+ecore_event_evas_seat_modifier_lock_update(Evas *e, unsigned int modifiers,
+ Evas_Device *seat)
{
if (modifiers & ECORE_EVENT_MODIFIER_SHIFT)
evas_seat_key_modifier_on(e, "Shift", seat);
@@ -337,102 +326,10 @@ _ecore_event_evas_seat_modifier_lock_update(Evas *e, unsigned int modifiers,
else evas_seat_key_lock_off(e, "Shift_Lock", seat);
}
-static void
-_ecore_event_evas_modifier_lock_invalidate(Ecore_Input_Window *w)
-{
- int i;
-
- if (!w) return;
- for (i = 0; i < w->device_states_num; i++) w->device_states[i].invalid = 1;
-}
-
-typedef struct
-{
- const Evas *evas;
- Ecore_Input_Window *w;
-} Find_Foreach_Data;
-
-static Eina_Bool
-_ecore_event_evas_window_evas_find_foreach_cb(const Eina_Hash *hash EINA_UNUSED,
- const void *key EINA_UNUSED,
- void *data, void *fdata)
-{
- Ecore_Input_Window *w = data;
- Find_Foreach_Data *foreach_data = fdata;
-
- if (foreach_data->evas == w->evas)
- {
- foreach_data->w = w;
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-static Ecore_Input_Window *
-_ecore_event_evas_window_evas_find(const Evas *evas)
-{
- Find_Foreach_Data fdata;
-
- fdata.evas = evas;
- fdata.w = NULL;
- eina_hash_foreach(_window_hash,
- _ecore_event_evas_window_evas_find_foreach_cb,
- &fdata);
- return fdata.w;
-}
-
-EAPI void
-ecore_event_evas_seat_modifier_lock_update(Evas *e, unsigned int modifiers,
- Evas_Device *seat)
-{
- _ecore_event_evas_modifier_lock_invalidate
- (_ecore_event_evas_window_evas_find(e));
- _ecore_event_evas_seat_modifier_lock_update(e, modifiers, seat);
-}
-
EAPI void
ecore_event_evas_modifier_lock_update(Evas *e, unsigned int modifiers)
{
- _ecore_event_evas_modifier_lock_invalidate
- (_ecore_event_evas_window_evas_find(e));
- _ecore_event_evas_seat_modifier_lock_update(e, modifiers, NULL);
-}
-
-static void
-_ecore_event_evas_modifier_lock_update(Ecore_Input_Window *w,
- unsigned int modifiers,
- Evas_Device *seat)
-{
- Ecore_Input_Seat_State *states;
- int i;
-
- for (i = 0; i < w->device_states_num; i++)
- {
- if (w->device_states[i].seat == seat)
- {
- if ((w->device_states[i].invalid) ||
- (modifiers != w->device_states[i].modifiers))
- {
- w->device_states[i].invalid = 0;
- w->device_states[i].modifiers = modifiers;
- ecore_event_evas_seat_modifier_lock_update
- (w->evas, modifiers, seat);
- }
- return;
- }
- }
- w->device_states_num++;
- states = realloc(w->device_states, w->device_states_num);
- if (!states)
- {
- w->device_states_num--;
- return;
- }
- states[w->device_states_num - 1].seat = seat;
- states[w->device_states_num - 1].modifiers = modifiers;
- states[w->device_states_num - 1].invalid = 0;
- w->device_states = states;
- _ecore_event_evas_seat_modifier_lock_update(w->evas, modifiers, seat);
+ ecore_event_evas_seat_modifier_lock_update(e, modifiers, NULL);
}
EAPI void
@@ -469,14 +366,6 @@ ecore_event_window_register(Ecore_Window id, void *window, Evas *evas,
evas_key_lock_add(evas, "Scroll_Lock");
}
-static void
-_ecore_evas_input_win_free(void *data)
-{
- Ecore_Input_Window *w = data;
- free(w->device_states);
- free(w);
-}
-
EAPI void
ecore_event_window_unregister(Ecore_Window id)
{
@@ -531,8 +420,9 @@ _ecore_event_evas_key(Ecore_Event_Key *e, Ecore_Event_Press press)
lookup = _ecore_event_window_match(e->event_window);
if (!lookup) return ECORE_CALLBACK_PASS_ON;
- _ecore_event_evas_modifier_lock_update
- (lookup, e->modifiers, efl_input_device_seat_get(e->dev));
+ ecore_event_evas_seat_modifier_lock_update(lookup->evas,
+ e->modifiers,
+ efl_input_device_seat_get(e->dev));
if (press == ECORE_DOWN)
{
if (!lookup->direct ||
@@ -641,8 +531,9 @@ _ecore_event_evas_mouse_button(Ecore_Event_Mouse_Button *e, Ecore_Event_Press pr
if (e->multi.device == 0)
{
- _ecore_event_evas_modifier_lock_update
- (lookup, e->modifiers, efl_input_device_seat_get(e->dev));
+ ecore_event_evas_seat_modifier_lock_update(lookup->evas,
+ e->modifiers,
+ efl_input_device_seat_get(e->dev));
if (press == ECORE_DOWN)
{
if (!lookup->direct ||
@@ -722,8 +613,9 @@ ecore_event_evas_mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *
if (e->multi.device == 0)
{
_ecore_event_evas_push_mouse_move(e);
- _ecore_event_evas_modifier_lock_update
- (lookup, e->modifiers, efl_input_device_seat_get(e->dev));
+ ecore_event_evas_seat_modifier_lock_update(lookup->evas,
+ e->modifiers,
+ efl_input_device_seat_get(e->dev));
if (!lookup->direct ||
!lookup->direct(lookup->window, ECORE_EVENT_MOUSE_MOVE, e))
{
@@ -782,8 +674,9 @@ _ecore_event_evas_mouse_io(Ecore_Event_Mouse_IO *e, Ecore_Event_IO io)
lookup = _ecore_event_window_match(e->event_window);
if (!lookup) return ECORE_CALLBACK_PASS_ON;
- _ecore_event_evas_modifier_lock_update
- (lookup, e->modifiers, efl_input_device_seat_get(e->dev));
+ ecore_event_evas_seat_modifier_lock_update(lookup->evas,
+ e->modifiers,
+ efl_input_device_seat_get(e->dev));
switch (io)
{
case ECORE_IN:
@@ -829,8 +722,8 @@ ecore_event_evas_mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void
e = event;
lookup = _ecore_event_window_match(e->event_window);
if (!lookup) return ECORE_CALLBACK_PASS_ON;
- _ecore_event_evas_modifier_lock_update
- (lookup, e->modifiers, efl_input_device_seat_get(e->dev));
+ ecore_event_evas_seat_modifier_lock_update(lookup->evas, e->modifiers,
+ efl_input_device_seat_get(e->dev));
if (!lookup->direct ||
!lookup->direct(lookup->window, ECORE_EVENT_MOUSE_WHEEL, e))
{
@@ -927,7 +820,7 @@ ecore_event_evas_init(void)
ecore_event_evas_mouse_button_cancel,
NULL);
- _window_hash = eina_hash_pointer_new(_ecore_evas_input_win_free);
+ _window_hash = eina_hash_pointer_new(free);
if (getenv("ECORE_INPUT_FIX"))
{