Reverting 80476 and 80479. This solution is flawed and causes some weird
authoretrunko <etrunko@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 14 Dec 2012 19:00:53 +0000 (19:00 +0000)
committeretrunko <etrunko@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 14 Dec 2012 19:00:53 +0000 (19:00 +0000)
collateral damages that need further investigation. All programs running with
wayland engines are consuming 100% CPU.

ecore-wayland: Fix monitoring ECORE_FD_WRITE defaultly on
   wayland display fd lead to 100% cpu usage

  In ecore_wl_init(), adding wayland display fd with ECORE_FD_WRITE
  flag make CPU usage 100%. The proper way to monitor the ECORE_FD_WRITE
  is when the wl_display_flush() return value < 0 and errno == EAGAIN.
  And if wl_display_flush() return, we remove ECORE_FD_WRITE flag from
  the display fd.

  Patch by: Alex Wu <zhiwen.wu@linux.intel.com>

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/branches/ecore-1.7@80981 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore_wayland/ecore_wl.c

index c135d72..4c3a26d 100644 (file)
@@ -33,7 +33,6 @@ void *alloca (size_t);
 
 /* local function prototypes */
 static Eina_Bool _ecore_wl_shutdown(Eina_Bool close);
-static Eina_Bool _ecore_wl_cb_idle_enterer(void *data);
 static Eina_Bool _ecore_wl_cb_handle_data(void *data, Ecore_Fd_Handler *hdl);
 static void _ecore_wl_cb_handle_global(void *data, struct wl_registry *registry, unsigned int id, const char *interface, unsigned int version __UNUSED__);
 static Eina_Bool _ecore_wl_xkb_init(Ecore_Wl_Display *ewd);
@@ -165,11 +164,10 @@ ecore_wl_init(const char *name)
 
    _ecore_wl_disp->fd_hdl = 
      ecore_main_fd_handler_add(_ecore_wl_disp->fd, 
-                               ECORE_FD_READ,
+                               ECORE_FD_READ | ECORE_FD_WRITE,
                                _ecore_wl_cb_handle_data, _ecore_wl_disp, 
                                NULL, NULL);
 
-   ecore_idle_enterer_add(_ecore_wl_cb_idle_enterer, _ecore_wl_disp);
    wl_list_init(&_ecore_wl_disp->inputs);
    wl_list_init(&_ecore_wl_disp->outputs);
 
@@ -424,32 +422,10 @@ _ecore_wl_shutdown(Eina_Bool close)
    return _ecore_wl_init_count;
 }
 
-static Eina_Bool
-_ecore_wl_cb_idle_enterer(void *data)
-{
-   Ecore_Wl_Display *ewd;
-   int ret;
-
-   if (!(ewd = data)) return ECORE_CALLBACK_RENEW;
-
-   ret = wl_display_flush(ewd->wl.display);
-   if (ret < 0 && errno == EAGAIN)
-     {
-        ecore_main_fd_handler_active_set(ewd->fd_hdl, ECORE_FD_READ | ECORE_FD_WRITE);
-     }
-   else if (ret < 0)
-     {
-      /* FIXME: need do error processing? */
-     }
-
-   return ECORE_CALLBACK_RENEW;
-}
-
 static Eina_Bool 
 _ecore_wl_cb_handle_data(void *data, Ecore_Fd_Handler *hdl)
 {
    Ecore_Wl_Display *ewd;
-   int ret;
 
    /* LOGFN(__FILE__, __LINE__, __FUNCTION__); */
 
@@ -462,15 +438,7 @@ _ecore_wl_cb_handle_data(void *data, Ecore_Fd_Handler *hdl)
    if (ecore_main_fd_handler_active_get(hdl, ECORE_FD_READ))
      wl_display_dispatch(ewd->wl.display);
    else if (ecore_main_fd_handler_active_get(hdl, ECORE_FD_WRITE))
-     {
-        ret = wl_display_flush(ewd->wl.display);
-        if (ret == 0)
-          ecore_main_fd_handler_active_set(hdl, ECORE_FD_READ);
-        else if (ret == -1 && errno != EAGAIN)
-          {
-            /* FIXME: need do error processing? */
-          }
-     }
+     wl_display_flush(ewd->wl.display);
 
    return ECORE_CALLBACK_RENEW;
 }