discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=cea91b111c6b96438a29d0cc078d4a334b408119

commit cea91b111c6b96438a29d0cc078d4a334b408119
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Mon Nov 2 14:53:15 2015 -0500

    Revert "queue pending buffers for wayland shm clients"
    
    This reverts commit 1ee825d29c2ca6d35da5f0860838d57019bca3f2.
    
    this was fixing the wrong problem and was not functioning accurately
    in any case
---
 src/bin/e_pixmap.c | 89 ++++++++++++++----------------------------------------
 1 file changed, 22 insertions(+), 67 deletions(-)

diff --git a/src/bin/e_pixmap.c b/src/bin/e_pixmap.c
index 958bda0..178c00c 100644
--- a/src/bin/e_pixmap.c
+++ b/src/bin/e_pixmap.c
@@ -37,7 +37,6 @@ struct _E_Pixmap
 #ifdef HAVE_WAYLAND
    E_Comp_Wl_Buffer *buffer;
    E_Comp_Wl_Buffer_Ref buffer_ref;
-   Eina_List *buffers;
    struct wl_listener buffer_destroy_listener;
    void *data;
    Eina_Rectangle opaque;
@@ -50,13 +49,6 @@ struct _E_Pixmap
 };
 
 #ifdef HAVE_WAYLAND
-typedef struct E_Pixmap_Pending_Buffer
-{
-   E_Comp_Wl_Buffer *buffer;
-   E_Pixmap *cp;
-   struct wl_listener destroy_listener;
-} E_Pixmap_Pending_Buffer;
-
 static void 
 _e_pixmap_cb_buffer_destroy(struct wl_listener *listener, void *data 
EINA_UNUSED)
 {
@@ -66,42 +58,6 @@ _e_pixmap_cb_buffer_destroy(struct wl_listener *listener, 
void *data EINA_UNUSED
    cp->data = NULL;
    cp->buffer_destroy_listener.notify = NULL;
 }
-
-static void
-_e_pixmap_cb_pending_buffer_destroy(struct wl_listener *listener, void *data 
EINA_UNUSED)
-{
-   E_Pixmap_Pending_Buffer *ref;
-
-   ref = container_of(listener, E_Pixmap_Pending_Buffer, destroy_listener);
-   ref->cp->buffers = eina_list_remove(ref->cp->buffers, ref);
-   free(ref);
-}
-
-static Eina_Bool
-_e_pixmap_wl_image_refresh(E_Pixmap *cp, E_Comp_Wl_Buffer *buffer)
-{
-   struct wl_shm_buffer *shm_buffer;
-
-   shm_buffer = wl_shm_buffer_get(buffer->resource);
-   if (!shm_buffer)
-     {
-        WRN("Cannot get shm buffer from buffer resource");
-        return EINA_FALSE;
-     }
-   e_comp_wl_buffer_reference(&cp->buffer_ref, buffer);
-
-   if (cp->buffer_destroy_listener.notify)
-     {
-        wl_list_remove(&cp->buffer_destroy_listener.link);
-        cp->buffer_destroy_listener.notify = NULL;
-     }
-
-   cp->buffer_destroy_listener.notify = _e_pixmap_cb_buffer_destroy;
-   wl_signal_add(&buffer->destroy_signal, &cp->buffer_destroy_listener);
-   cp->data = wl_shm_buffer_get_data(shm_buffer);
-   return EINA_TRUE;
-}
-
 #endif
 
 static void
@@ -125,8 +81,6 @@ _e_pixmap_clear(E_Pixmap *cp, Eina_Bool cache)
       case E_PIXMAP_TYPE_WL:
 #ifdef HAVE_WAYLAND
         e_pixmap_image_clear(cp, cache);
-        while (cp->buffers)
-          e_pixmap_image_clear(cp, cache);
 #endif
         break;
       default: 
@@ -576,7 +530,7 @@ e_pixmap_resource_get(E_Pixmap *cp)
         return NULL;
      }
 #ifdef HAVE_WAYLAND
-   return cp->buffer_ref.buffer ?: cp->buffer;
+   return cp->buffer;
 #endif
    return NULL;
 }
@@ -696,16 +650,6 @@ e_pixmap_image_clear(E_Pixmap *cp, Eina_Bool cache)
           }
         e_comp_wl_buffer_reference(&cp->buffer_ref, NULL);
         cp->data = NULL;
-        if (!cp->buffers) break;
-        {
-           E_Pixmap_Pending_Buffer *ref;
-
-           ref = eina_list_data_get(cp->buffers);
-           cp->buffers = eina_list_remove_list(cp->buffers, cp->buffers);
-           wl_list_remove(&ref->destroy_listener.link);
-           _e_pixmap_wl_image_refresh(cp, ref->buffer);
-           free(ref);
-        }
 #endif
         break;
       default:
@@ -744,20 +688,31 @@ e_pixmap_image_refresh(E_Pixmap *cp)
 #ifdef HAVE_WAYLAND
         {
            E_Comp_Wl_Buffer *buffer = cp->buffer;
+           struct wl_shm_buffer *shm_buffer;
+
+           shm_buffer = wl_shm_buffer_get(buffer->resource);
+           if (!shm_buffer)
+             {
+                WRN("Cannot get shm buffer from buffer resource");
+                return EINA_FALSE;
+             }
            if (cp->buffer_ref.buffer && (cp->buffer_ref.buffer != buffer))
              {
-                E_Pixmap_Pending_Buffer *ref;
-
-                ref = calloc(1, sizeof(E_Pixmap_Pending_Buffer));
-                cp->buffers = eina_list_append(cp->buffers, ref);
-                ref->destroy_listener.notify = 
_e_pixmap_cb_pending_buffer_destroy;
-                wl_signal_add(&buffer->destroy_signal, &ref->destroy_listener);
-                ref->buffer = buffer;
-                ref->cp = cp;
-                return EINA_TRUE;
+                /* FIXME: wtf? */
              }
            else if (cp->buffer_ref.buffer) return EINA_TRUE;
-           return _e_pixmap_wl_image_refresh(cp, buffer);
+           e_comp_wl_buffer_reference(&cp->buffer_ref, buffer);
+
+           if (cp->buffer_destroy_listener.notify)
+             {
+                wl_list_remove(&cp->buffer_destroy_listener.link);
+                cp->buffer_destroy_listener.notify = NULL;
+             }
+
+           cp->buffer_destroy_listener.notify = _e_pixmap_cb_buffer_destroy;
+           wl_signal_add(&buffer->destroy_signal, 
&cp->buffer_destroy_listener);
+           cp->data = wl_shm_buffer_get_data(shm_buffer);
+           return EINA_TRUE;
         }
 #endif
         break;

-- 


Reply via email to