libweston: store format modifier name in weston_buffer

This should cut the cost of debug_scene_view_print_buffer() in half on
ARM A55 CPU. Debug printing is quite expensive on such platform.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
Pekka Paalanen 2026-03-05 15:00:50 +02:00 committed by Pekka Paalanen
parent d993f783b0
commit 9b177e381a
3 changed files with 7 additions and 12 deletions

View file

@ -1596,6 +1596,7 @@ struct weston_buffer {
const struct pixel_format_info *pixel_format;
uint64_t format_modifier;
char *format_modifier_name;
};
enum weston_buffer_reference_type {

View file

@ -2823,6 +2823,7 @@ weston_buffer_destroy(struct weston_buffer *buffer)
assert(buffer->passive_count == 0);
wl_signal_emit_mutable(&buffer->destroy_signal, buffer);
free(buffer->format_modifier_name);
free(buffer);
}
@ -2937,6 +2938,8 @@ weston_buffer_from_resource(struct weston_compositor *ec,
buffer->type = WESTON_BUFFER_RENDERER_OPAQUE;
}
buffer->format_modifier_name = pixel_format_get_modifier(buffer->format_modifier);
if (ec->renderer->buffer_init)
ec->renderer->buffer_init(ec, buffer);
@ -3103,6 +3106,7 @@ weston_buffer_create_solid_rgba(struct weston_compositor *compositor,
pixel_format_get_info_shm(WL_SHM_FORMAT_ARGB8888);
}
buffer->format_modifier = DRM_FORMAT_MOD_LINEAR;
buffer->format_modifier_name = pixel_format_get_modifier(buffer->format_modifier);
weston_buffer_reference(ret, buffer, BUFFER_MAY_BE_ACCESSED);
@ -9503,7 +9507,6 @@ static void
debug_scene_view_print_buffer(FILE *fp, struct weston_view *view)
{
struct weston_buffer *buffer = view->surface->buffer_ref.buffer;
char *modifier_name;
if (!buffer) {
fputs("\t\t[buffer not available]\n", fp);
@ -9543,12 +9546,7 @@ debug_scene_view_print_buffer(FILE *fp, struct weston_view *view)
} else {
fputs("\t\t\t[unknown format]\n", fp);
}
modifier_name = pixel_format_get_modifier(buffer->format_modifier);
fprintf(fp, "\t\t\tmodifier: %s\n",
modifier_name ?
modifier_name : "Failed to convert to a modifier name");
free(modifier_name);
fprintf(fp, "\t\t\tmodifier: %s\n", buffer->format_modifier_name);
fprintf(fp, "\t\t\twidth: %d, height: %d\n",
buffer->width, buffer->height);

View file

@ -367,7 +367,6 @@ gl_log_paint_node_start(struct gl_renderer *gr, struct weston_paint_node *pnode)
struct weston_surface *surface;
struct weston_buffer *buffer;
pid_t pid = 0;
char *modifier_name;
if (!weston_log_scope_is_enabled(gr->paint_node_scope))
return;
@ -398,11 +397,8 @@ gl_log_paint_node_start(struct gl_renderer *gr, struct weston_paint_node *pnode)
else
weston_log_scope_printf(gr->paint_node_scope, "\t\t[unknown buffer format]\n");
modifier_name = pixel_format_get_modifier(buffer->format_modifier);
weston_log_scope_printf(gr->paint_node_scope, "\t\tbuffer modifier: %s\n",
modifier_name ? modifier_name :
"Failed to convert to a modifier name");
free(modifier_name);
buffer->format_modifier_name);
}
static void