1
0
Fork 0

cogl/xlib-renderer: Return refresh rate directly

Instead of a CoglOutput that is then only used to fetch the refresh
rate.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3792>
This commit is contained in:
Georges Basile Stavracas Neto 2024-05-31 19:14:55 +02:00 committed by Marge Bot
parent 653ba4a7a7
commit c9e22d9f79
3 changed files with 30 additions and 31 deletions

View file

@ -56,9 +56,9 @@ _cogl_xlib_renderer_disconnect (CoglRenderer *renderer);
CoglXlibRenderer * CoglXlibRenderer *
_cogl_xlib_renderer_get_data (CoglRenderer *renderer); _cogl_xlib_renderer_get_data (CoglRenderer *renderer);
CoglOutput * float
_cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer, _cogl_xlib_renderer_refresh_rate_for_rectangle (CoglRenderer *renderer,
int x, int x,
int y, int y,
int width, int width,
int height); int height);

View file

@ -529,12 +529,12 @@ cogl_xlib_renderer_remove_filter (CoglRenderer *renderer,
(CoglNativeFilterFunc)func, data); (CoglNativeFilterFunc)func, data);
} }
CoglOutput * float
_cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer, _cogl_xlib_renderer_refresh_rate_for_rectangle (CoglRenderer *renderer,
int x, int x,
int y, int y,
int width, int width,
int height) int height)
{ {
CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer); CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
int max_overlap = 0; 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;
} }

View file

@ -821,22 +821,22 @@ cogl_onscreen_glx_swap_region (CoglOnscreen *onscreen,
onscreen_glx->last_swap_vsync_counter = end_frame_vsync_counter; onscreen_glx->last_swap_vsync_counter = end_frame_vsync_counter;
{ {
CoglOutput *output; float refresh_rate;
x_min = CLAMP (x_min, 0, framebuffer_width); x_min = CLAMP (x_min, 0, framebuffer_width);
x_max = CLAMP (x_max, 0, framebuffer_width); x_max = CLAMP (x_max, 0, framebuffer_width);
y_min = CLAMP (y_min, 0, framebuffer_height); y_min = CLAMP (y_min, 0, framebuffer_height);
y_max = CLAMP (y_max, 0, framebuffer_height); y_max = CLAMP (y_max, 0, framebuffer_height);
output = refresh_rate =
_cogl_xlib_renderer_output_for_rectangle (context->display->renderer, _cogl_xlib_renderer_refresh_rate_for_rectangle (context->display->renderer,
onscreen_glx->x + x_min, onscreen_glx->x + x_min,
onscreen_glx->y + y_min, onscreen_glx->y + y_min,
x_max - x_min, x_max - x_min,
y_max - y_min); y_max - y_min);
if (output) if (refresh_rate != 0.0)
info->refresh_rate = output->refresh_rate; info->refresh_rate = refresh_rate;
} }
/* XXX: we don't get SwapComplete events based on how we implement /* 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); CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
CoglContext *context = cogl_framebuffer_get_context (framebuffer); CoglContext *context = cogl_framebuffer_get_context (framebuffer);
CoglDisplay *display = context->display; CoglDisplay *display = context->display;
CoglOutput *output;
int width, height; int width, height;
width = cogl_framebuffer_get_width (framebuffer); width = cogl_framebuffer_get_width (framebuffer);
height = cogl_framebuffer_get_height (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 =
onscreen_glx->refresh_rate = output->refresh_rate; _cogl_xlib_renderer_refresh_rate_for_rectangle (display->renderer,
else onscreen_glx->x,
onscreen_glx->refresh_rate = 0.0; onscreen_glx->y,
width, height);
} }
void void