From 36586fbf9cd84bacf6568f5c2eb8ba131f1e1b11 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Tue, 16 Feb 2016 13:33:25 -0600 Subject: [PATCH] Remove wayland buffer reference This code is similar to code in weston, but doesn't really work properly for us in E, since this can blow up buffers behind the async renderer's back. The rest of the reference code has been pushed into e_pixmap, so we can kill this all now. --- src/bin/e_comp_wl.c | 35 ----------------------------------- src/bin/e_comp_wl.h | 10 ---------- 2 files changed, 45 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 47ff0bdcf..a9db71f32 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -728,16 +728,6 @@ _e_comp_wl_evas_cb_color_set(void *data, Evas_Object *obj, void *event EINA_UNUS ec->netwm.opacity_changed = EINA_TRUE; } -static void -_e_comp_wl_buffer_reference_cb_destroy(struct wl_listener *listener, void *data) -{ - E_Comp_Wl_Buffer_Ref *ref; - - ref = container_of(listener, E_Comp_Wl_Buffer_Ref, destroy_listener); - if ((E_Comp_Wl_Buffer *)data != ref->buffer) return; - ref->buffer = NULL; -} - static void _e_comp_wl_buffer_cb_destroy(struct wl_listener *listener, void *data EINA_UNUSED) { @@ -1984,7 +1974,6 @@ _e_comp_wl_subsurface_create(E_Client *ec, E_Client *epc, uint32_t id, struct wl _e_comp_wl_surface_state_init(&sdata->cached, ec->w, ec->h); /* set subsurface data properties */ - sdata->cached_buffer_ref.buffer = NULL; sdata->resource = res; sdata->synchronized = EINA_TRUE; sdata->parent = epc; @@ -2695,30 +2684,6 @@ e_comp_wl_subsurface_commit(E_Client *ec) return EINA_TRUE; } -EINTERN void -e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer) -{ - if ((ref->buffer) && (buffer != ref->buffer)) - { - ref->buffer->busy--; - if (ref->buffer->busy == 0) - { - if (!wl_resource_get_client(ref->buffer->resource)) return; - wl_resource_queue_event(ref->buffer->resource, WL_BUFFER_RELEASE); - } - wl_list_remove(&ref->destroy_listener.link); - } - - if ((buffer) && (buffer != ref->buffer)) - { - buffer->busy++; - wl_signal_add(&buffer->destroy_signal, &ref->destroy_listener); - } - - ref->buffer = buffer; - ref->destroy_listener.notify = _e_comp_wl_buffer_reference_cb_destroy; -} - /** * Get the buffer for a given resource. * diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h index d60bb63a3..e7df72ac9 100644 --- a/src/bin/e_comp_wl.h +++ b/src/bin/e_comp_wl.h @@ -43,7 +43,6 @@ }) typedef struct _E_Comp_Wl_Buffer E_Comp_Wl_Buffer; -typedef struct _E_Comp_Wl_Buffer_Ref E_Comp_Wl_Buffer_Ref; typedef struct _E_Comp_Wl_Subsurf_Data E_Comp_Wl_Subsurf_Data; typedef struct _E_Comp_Wl_Surface_State E_Comp_Wl_Surface_State; typedef struct _E_Comp_Wl_Client_Data E_Comp_Wl_Client_Data; @@ -64,12 +63,6 @@ struct _E_Comp_Wl_Buffer uint32_t busy; }; -struct _E_Comp_Wl_Buffer_Ref -{ - E_Comp_Wl_Buffer *buffer; - struct wl_listener destroy_listener; -}; - struct _E_Comp_Wl_Surface_State { int sx, sy; @@ -95,7 +88,6 @@ struct _E_Comp_Wl_Subsurf_Data } position; E_Comp_Wl_Surface_State cached; - E_Comp_Wl_Buffer_Ref cached_buffer_ref; Eina_Bool synchronized; }; @@ -287,7 +279,6 @@ struct _E_Comp_Wl_Client_Data E_Shell_Data *data; } shell; - E_Comp_Wl_Buffer_Ref buffer_ref; E_Comp_Wl_Surface_State pending; Eina_List *frames; @@ -336,7 +327,6 @@ EINTERN struct wl_resource *e_comp_wl_surface_create(struct wl_client *client, i EINTERN void e_comp_wl_surface_destroy(struct wl_resource *resource); EINTERN Eina_Bool e_comp_wl_surface_commit(E_Client *ec); EINTERN Eina_Bool e_comp_wl_subsurface_commit(E_Client *ec); -EINTERN void e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer); E_API E_Comp_Wl_Buffer *e_comp_wl_buffer_get(struct wl_resource *resource); E_API struct wl_signal e_comp_wl_surface_create_signal_get(void);