e_focus_policy: use atomic operation instead of mutex 08/301808/2
authorJihoon Kim <jihoon48.kim@samsung.com>
Wed, 22 Nov 2023 11:22:20 +0000 (20:22 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Sun, 26 Nov 2023 05:40:49 +0000 (05:40 +0000)
Change-Id: I3416442aa5c5134b0c10a45655e68cb984dee9b8
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/e_focus_policy_history.c
src/bin/e_focus_policy_topmost.c
src/bin/e_input_event.h

index 0aa24cf6c7ed6b01f4c3bdd639ae8a078f384661..9f5e4c10d16ad6c90154dbfdf988b047923ca235 100644 (file)
@@ -11,8 +11,6 @@ struct _E_Focus_Policy_History_Impl
    E_Zone   *zone;
    E_Client *focused_ec;
 
-   GRecMutex focused_ec_mutex;
-
    Eina_List *focus_stack;
    Eina_List *defer_focus_stack;
 
@@ -527,6 +525,11 @@ _focus_policy_history_cb_client_mouse_down(struct wl_listener *listener, void *d
      }
 }
 
+static void set_focused_ec(E_Focus_Policy_History *history_policy, E_Client *ec)
+{
+   atomic_store(&history_policy->focused_ec, ec);
+}
+
 static void
 _focus_policy_history_cb_client_focus_set(struct wl_listener *listener, void *data)
 {
@@ -577,9 +580,7 @@ _focus_policy_history_cb_client_focus_set(struct wl_listener *listener, void *da
    _focus_policy_history_focus_stack_latest_set(history_policy, ec);
 
    // assign the focused_ec
-   g_rec_mutex_lock(&history_policy->focused_ec_mutex);
-   history_policy->focused_ec = ec;
-   g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
+   set_focused_ec(history_policy, ec);
 
    ELOGF("FOCUS_HISTORY", "focus_set | focused_ec SET", ec);
 }
@@ -637,9 +638,7 @@ _focus_policy_history_cb_client_focus_unset(struct wl_listener *listener, void *
    _e_focus_policy_history_focus_defer_unset(history_policy, ec);
 
    // assign the focused_ec
-   g_rec_mutex_lock(&history_policy->focused_ec_mutex);
-   history_policy->focused_ec = NULL;
-   g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
+   set_focused_ec(history_policy, NULL);
 
    ELOGF("FOCUS_HISTORY", "focus_set | focused_ec UNSET", ec);
 }
@@ -1085,9 +1084,7 @@ _focus_policy_history_cb_zone_client_remove(struct wl_listener *listener, void *
           {
              ELOGF("FOCUS_HISTORY", "CRITICAL. focused is deleted ec.", ec);
              ELOGF("FOCUS_HISTORY", "CLIENT FOCUS_SET", NULL);
-             g_rec_mutex_lock(&history_policy->focused_ec_mutex);
-             history_policy->focused_ec = NULL;
-             g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
+             set_focused_ec(history_policy, NULL);
          }
      }
 }
@@ -1106,9 +1103,7 @@ _focus_policy_history_cb_zone_focus_clear(struct wl_listener *listener, void *da
    EINA_SAFETY_ON_NULL_RETURN(zone);
 
    // make focused_ec be NULL
-   g_rec_mutex_lock(&history_policy->focused_ec_mutex);
-   history_policy->focused_ec = NULL;
-   g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
+   set_focused_ec(history_policy, NULL);
 
    ELOGF("FOCUS_HISTORY", "focus_clear | focused_ec UNSET", NULL);
 }
@@ -1171,8 +1166,6 @@ _focus_policy_history_del(E_Focus_Policy_Impl *impl)
    wl_list_remove(&history_policy->zone_client_remove.link);
    wl_list_remove(&history_policy->zone_client_add.link);
 
-   g_rec_mutex_clear(&history_policy->focused_ec_mutex);
-
    E_FREE(history_policy);
 }
 
@@ -1186,10 +1179,7 @@ _focus_policy_history_focused_ec_get(E_Focus_Policy_Impl *impl)
    EINA_SAFETY_ON_NULL_RETURN_VAL(history_policy, NULL);
 
    //E_FOCUS_HISTORY_TRACE(history_policy, NULL);
-
-   g_rec_mutex_lock(&history_policy->focused_ec_mutex);
-   focused_ec = history_policy->focused_ec;
-   g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
+   focused_ec = atomic_load(&history_policy->focused_ec);
 
    return focused_ec;
 }
@@ -1278,7 +1268,6 @@ e_focus_policy_iface_history_new(E_Zone* zone)
    EINA_SAFETY_ON_NULL_GOTO(history_policy, fail);
 
    history_policy->zone = zone;
-   g_rec_mutex_init(&history_policy->focused_ec_mutex);
 
    E_FOCUS_HISTORY_TRACE(history_policy, NULL);
 
index 6239c68dee374bee93b7dae548a7e99fdc9162ec..7d87a57f50e9b979042672a5c81ff2460e91371a 100644 (file)
@@ -10,8 +10,6 @@ struct _E_Focus_Policy_Topmost_Impl
    E_Zone   *zone;
    E_Client *focused_ec;
 
-   GRecMutex focused_ec_mutex;
-
    struct wl_listener zone_client_add;
    struct wl_listener zone_client_remove;
    struct wl_listener zone_focus_clear;
@@ -266,6 +264,11 @@ _focus_policy_topmost_cb_client_mouse_down(struct wl_listener *listener, void *d
      }
 }
 
+static void set_focused_ec(E_Focus_Policy_Topmost *topmost_policy, E_Client *ec)
+{
+   atomic_store(&topmost_policy->focused_ec, ec);
+}
+
 static void
 _focus_policy_topmost_cb_client_focus_set(struct wl_listener *listener, void *data)
 {
@@ -314,9 +317,7 @@ _focus_policy_topmost_cb_client_focus_set(struct wl_listener *listener, void *da
      }
 
    // assign the focused_ec
-   g_rec_mutex_lock(&topmost_policy->focused_ec_mutex);
-   topmost_policy->focused_ec = ec;
-   g_rec_mutex_unlock(&topmost_policy->focused_ec_mutex);
+   set_focused_ec(topmost_policy, ec);
 
    ELOGF("FOCUS_TOPMOST", "focus_set | focused_ec SET", ec);
 }
@@ -372,9 +373,7 @@ _focus_policy_topmost_cb_client_focus_unset(struct wl_listener *listener, void *
       }
 
    // assign the focused_ec
-   g_rec_mutex_lock(&topmost_policy->focused_ec_mutex);
-   topmost_policy->focused_ec = NULL;
-   g_rec_mutex_unlock(&topmost_policy->focused_ec_mutex);
+   set_focused_ec(topmost_policy, NULL);
 
    ELOGF("FOCUS_TOPMOST", "focus_unset | focused_ec UNSET", NULL);
 }
@@ -529,9 +528,7 @@ _focus_policy_topmost_cb_zone_client_remove(struct wl_listener *listener, void *
           {
              ELOGF("FOCUS_TOPMOST", "CRITICAL. focused is deleted ec.", ec);
              ELOGF("FOCUS_TOPMOST", "CLIENT FOCUS_SET", NULL);
-             g_rec_mutex_lock(&topmost_policy->focused_ec_mutex);
-             topmost_policy->focused_ec = NULL;
-             g_rec_mutex_unlock(&topmost_policy->focused_ec_mutex);
+             set_focused_ec(topmost_policy, NULL);
           }
      }
 }
@@ -548,9 +545,7 @@ _focus_policy_topmost_cb_zone_focus_clear(struct wl_listener *listener, void *da
    if (topmost_policy->zone != zone) return;
 
    // make focused_ec be NULL
-   g_rec_mutex_lock(&topmost_policy->focused_ec_mutex);
-   topmost_policy->focused_ec = NULL;
-   g_rec_mutex_unlock(&topmost_policy->focused_ec_mutex);
+   set_focused_ec(topmost_policy, NULL);
 
    ELOGF("FOCUS_TOPMOST", "focus_clear | focused_ec UNSET", NULL);
 }
@@ -566,8 +561,6 @@ _focus_policy_topmost_del(E_Focus_Policy_Impl *impl)
    wl_list_remove(&topmost_policy->zone_client_remove.link);
    wl_list_remove(&topmost_policy->zone_client_add.link);
 
-   g_rec_mutex_clear(&topmost_policy->focused_ec_mutex);
-
    E_FREE(topmost_policy);
 }
 
@@ -635,7 +628,6 @@ e_focus_policy_iface_topmost_new(E_Zone* zone)
    EINA_SAFETY_ON_NULL_GOTO(topmost_policy, fail);
 
    topmost_policy->zone = zone;
-   g_rec_mutex_init(&topmost_policy->focused_ec_mutex);
 
    policy_iface->impl = (E_Focus_Policy_Impl *)topmost_policy;
    policy_iface->del = _focus_policy_topmost_del;
index a869c00b93fe54dc2e65a4503cd378ffa252b7c4..960ad30dd7c588c37154f2472eae347d1ba4bb76 100755 (executable)
@@ -31,7 +31,6 @@ struct _e_input_event_source {
     GList *ev_handler_list;
     GList *ev_filter_list;
     GQueue *ev_queue;
-    GMutex *thread_mutex;
 };
 
 struct _e_input_event {