xwayland: Drop xwl_window_buffers_recycle

Use xwl_window_buffers_dispose instead. The pixmaps will need to be
re-created anyway, so keeping around the xwl_window_buffers doesn't
buy much. And dropping this makes the next commit simpler.

Also fold xwl_window_buffer_destroy_pixmap into its only remaining
caller,  xwl_window_buffer_maybe_dispose.

v2: (Olivier Fourdan)
* Fix up indentation in xwl_window_set_window_pixmap
* Leave xwl_window_buffer_destroy_pixmap helper
This commit is contained in:
Michel Dänzer 2023-12-21 12:25:28 +01:00 committed by Michel Dänzer
parent 2879032ecc
commit 2b577c2e3b
4 changed files with 8 additions and 45 deletions

View File

@ -788,10 +788,10 @@ xwl_window_dmabuf_feedback_done(void *data,
xwl_window->window->drawable.id,
xwl_window->has_implicit_scanout_support ? "" : "not");
/* If the linux-dmabuf v4 per-surface feedback changed, recycle the
/* If the linux-dmabuf v4 per-surface feedback changed, dispose of the
* window buffers so that they get re-created with appropriate parameters.
*/
xwl_window_buffers_recycle(xwl_window);
xwl_window_buffers_dispose(xwl_window);
}
static void

View File

@ -39,7 +39,6 @@ struct xwl_window_buffer {
struct xwl_window *xwl_window;
PixmapPtr pixmap;
RegionPtr damage_region;
Bool recycle_on_release;
int refcnt;
uint32_t time;
struct xorg_list link_buffer;
@ -114,16 +113,6 @@ xwl_window_buffer_maybe_dispose(struct xwl_window_buffer *xwl_window_buffer)
return TRUE;
}
static void
xwl_window_buffer_recycle(struct xwl_window_buffer *xwl_window_buffer)
{
RegionEmpty(xwl_window_buffer->damage_region);
xwl_window_buffer->recycle_on_release = FALSE;
if (xwl_window_buffer->pixmap)
xwl_window_buffer_destroy_pixmap (xwl_window_buffer);
}
static void
xwl_window_buffer_add_damage_region(struct xwl_window *xwl_window,
RegionPtr damage_region)
@ -199,9 +188,6 @@ xwl_window_buffer_release_callback(void *data)
if (xwl_window_buffer_maybe_dispose(xwl_window_buffer))
return;
if (xwl_window_buffer->recycle_on_release)
xwl_window_buffer_recycle(xwl_window_buffer);
/* We append the buffers to the end of the list, as we pick the last
* entry again when looking for new available buffers, that means the
* least used buffers will remain at the beginning of the list so that
@ -234,29 +220,6 @@ xwl_window_buffers_init(struct xwl_window *xwl_window)
xorg_list_init(&xwl_window->window_buffers_unavailable);
}
void
xwl_window_buffers_recycle(struct xwl_window *xwl_window)
{
struct xwl_window_buffer *xwl_window_buffer, *tmp;
/* Dispose available buffers */
xorg_list_for_each_entry_safe(xwl_window_buffer, tmp,
&xwl_window->window_buffers_available,
link_buffer) {
xwl_window_buffer_maybe_dispose(xwl_window_buffer);
}
if (xwl_window->window_buffers_timer)
TimerCancel(xwl_window->window_buffers_timer);
/* Mark the others for recycle on release */
xorg_list_for_each_entry(xwl_window_buffer,
&xwl_window->window_buffers_unavailable,
link_buffer) {
xwl_window_buffer->recycle_on_release = TRUE;
}
}
void
xwl_window_buffers_dispose(struct xwl_window *xwl_window)
{
@ -280,10 +243,8 @@ xwl_window_buffers_dispose(struct xwl_window *xwl_window)
xwl_window_buffer_maybe_dispose(xwl_window_buffer);
}
if (xwl_window->window_buffers_timer) {
TimerFree(xwl_window->window_buffers_timer);
xwl_window->window_buffers_timer = 0;
}
if (xwl_window->window_buffers_timer)
TimerCancel(xwl_window->window_buffers_timer);
}
PixmapPtr

View File

@ -33,7 +33,6 @@
#include "regionstr.h"
void xwl_window_buffers_init(struct xwl_window *xwl_window);
void xwl_window_buffers_recycle(struct xwl_window *xwl_window);
void xwl_window_buffers_dispose(struct xwl_window *xwl_window);
PixmapPtr xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window,
RegionPtr damage_region);

View File

@ -1192,6 +1192,9 @@ xwl_unrealize_window(WindowPtr window)
xwl_window_buffers_dispose(xwl_window);
if (xwl_window->window_buffers_timer)
TimerFree(xwl_window->window_buffers_timer);
if (xwl_window->frame_callback)
wl_callback_destroy(xwl_window->frame_callback);
@ -1229,7 +1232,7 @@ xwl_window_set_window_pixmap(WindowPtr window,
xwl_window = xwl_window_get(window);
if (xwl_window)
xwl_window_buffers_recycle(xwl_window);
xwl_window_buffers_dispose(xwl_window);
}
Bool