From c9e22d9f7911724c387219357edb6b60f9fb1d77 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 31 May 2024 19:14:55 +0200 Subject: [PATCH] cogl/xlib-renderer: Return refresh rate directly Instead of a CoglOutput that is then only used to fetch the refresh rate. Part-of: --- cogl/cogl/cogl-xlib-renderer-private.h | 12 +++++----- cogl/cogl/cogl-xlib-renderer.c | 17 ++++++++------ cogl/cogl/winsys/cogl-onscreen-glx.c | 32 +++++++++++--------------- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/cogl/cogl/cogl-xlib-renderer-private.h b/cogl/cogl/cogl-xlib-renderer-private.h index 2d0b997bb..f56dba9cc 100644 --- a/cogl/cogl/cogl-xlib-renderer-private.h +++ b/cogl/cogl/cogl-xlib-renderer-private.h @@ -56,9 +56,9 @@ _cogl_xlib_renderer_disconnect (CoglRenderer *renderer); CoglXlibRenderer * _cogl_xlib_renderer_get_data (CoglRenderer *renderer); -CoglOutput * -_cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer, - int x, - int y, - int width, - int height); +float +_cogl_xlib_renderer_refresh_rate_for_rectangle (CoglRenderer *renderer, + int x, + int y, + int width, + int height); diff --git a/cogl/cogl/cogl-xlib-renderer.c b/cogl/cogl/cogl-xlib-renderer.c index 3923d925a..874ac1adf 100644 --- a/cogl/cogl/cogl-xlib-renderer.c +++ b/cogl/cogl/cogl-xlib-renderer.c @@ -529,12 +529,12 @@ cogl_xlib_renderer_remove_filter (CoglRenderer *renderer, (CoglNativeFilterFunc)func, data); } -CoglOutput * -_cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer, - int x, - int y, - int width, - int height) +float +_cogl_xlib_renderer_refresh_rate_for_rectangle (CoglRenderer *renderer, + int x, + int y, + int width, + int height) { CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer); int max_overlap = 0; @@ -563,5 +563,8 @@ _cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer, } } - return max_overlapped; + if (max_overlapped) + return max_overlapped->refresh_rate; + else + return 0.0; } diff --git a/cogl/cogl/winsys/cogl-onscreen-glx.c b/cogl/cogl/winsys/cogl-onscreen-glx.c index 755a3213f..acb511006 100644 --- a/cogl/cogl/winsys/cogl-onscreen-glx.c +++ b/cogl/cogl/winsys/cogl-onscreen-glx.c @@ -821,22 +821,22 @@ cogl_onscreen_glx_swap_region (CoglOnscreen *onscreen, onscreen_glx->last_swap_vsync_counter = end_frame_vsync_counter; { - CoglOutput *output; + float refresh_rate; x_min = CLAMP (x_min, 0, framebuffer_width); x_max = CLAMP (x_max, 0, framebuffer_width); y_min = CLAMP (y_min, 0, framebuffer_height); y_max = CLAMP (y_max, 0, framebuffer_height); - output = - _cogl_xlib_renderer_output_for_rectangle (context->display->renderer, - onscreen_glx->x + x_min, - onscreen_glx->y + y_min, - x_max - x_min, - y_max - y_min); + refresh_rate = + _cogl_xlib_renderer_refresh_rate_for_rectangle (context->display->renderer, + onscreen_glx->x + x_min, + onscreen_glx->y + y_min, + x_max - x_min, + y_max - y_min); - if (output) - info->refresh_rate = output->refresh_rate; + if (refresh_rate != 0.0) + info->refresh_rate = refresh_rate; } /* XXX: we don't get SwapComplete events based on how we implement @@ -982,20 +982,16 @@ cogl_onscreen_glx_update_output (CoglOnscreen *onscreen) CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen); CoglContext *context = cogl_framebuffer_get_context (framebuffer); CoglDisplay *display = context->display; - CoglOutput *output; int width, height; width = cogl_framebuffer_get_width (framebuffer); height = cogl_framebuffer_get_height (framebuffer); - output = _cogl_xlib_renderer_output_for_rectangle (display->renderer, - onscreen_glx->x, - onscreen_glx->y, - width, height); - if (output) - onscreen_glx->refresh_rate = output->refresh_rate; - else - onscreen_glx->refresh_rate = 0.0; + onscreen_glx->refresh_rate = + _cogl_xlib_renderer_refresh_rate_for_rectangle (display->renderer, + onscreen_glx->x, + onscreen_glx->y, + width, height); } void