return EINA_TRUE;
}
-E_API void
-e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
+static void
+_e_comp_wl_buffer_ref(E_Comp_Wl_Buffer *buffer)
{
- if ((ref->buffer) && (buffer != ref->buffer))
+ buffer->busy++;
+}
+
+static void
+_e_comp_wl_buffer_unref(E_Comp_Wl_Buffer *buffer)
+{
+ buffer->busy--;
+ if (buffer->busy != 0)
+ return;
+
+ if (buffer->buffer_release)
{
- ref->buffer->busy--;
- if (ref->buffer->busy == 0)
- {
- if (ref->buffer->buffer_release)
- {
- e_explicit_sync_buffer_release_destroy(ref->buffer->buffer_release);
- ref->buffer->buffer_release = NULL;
- }
+ e_explicit_sync_buffer_release_destroy(buffer->buffer_release);
+ buffer->buffer_release = NULL;
+ }
- if (ref->buffer->resource)
- {
- if (!wl_resource_get_client(ref->buffer->resource)) return;
+ if (buffer->resource)
+ {
+ if (!wl_resource_get_client(buffer->resource)) return;
- wl_buffer_send_release(ref->buffer->resource);
+ wl_buffer_send_release(buffer->resource);
#ifdef HAVE_WAYLAND_TBM
- wayland_tbm_server_increase_buffer_sync_timeline(e_comp_wl->tbm.server,
- ref->buffer->resource, 1);
+ wayland_tbm_server_increase_buffer_sync_timeline(e_comp_wl->tbm.server,
+ buffer->resource, 1);
#endif
- }
- else
- {
- if (ref->buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)
- e_comp_wl_tbm_buffer_destroy(ref->buffer);
- }
- }
+ }
+ else
+ {
+ if (buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)
+ e_comp_wl_tbm_buffer_destroy(buffer);
+ }
+}
+
+E_API void
+e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
+{
+ if (ref->buffer == buffer)
+ return;
+
+ if (ref->buffer)
+ {
+ _e_comp_wl_buffer_unref(ref->buffer);
if (ref->destroy_listener_usable)
{
}
}
- if ((buffer) && (buffer != ref->buffer))
+ if (buffer)
{
- buffer->busy++;
+ _e_comp_wl_buffer_ref(buffer);
+
+ ref->destroy_listener.notify = _e_comp_wl_buffer_reference_cb_destroy;
wl_signal_add(&buffer->destroy_signal, &ref->destroy_listener);
+
ref->destroy_listener_usable = EINA_TRUE;
}
ref->buffer = buffer;
- ref->destroy_listener.notify = _e_comp_wl_buffer_reference_cb_destroy;
}
static Eina_Bool