[cogl/wip/rib/frame-synchronization: 199/206] Adds cogl_swap_info_get_refresh_interval api back
- From: Robert Bragg <rbragg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl/wip/rib/frame-synchronization: 199/206] Adds cogl_swap_info_get_refresh_interval api back
- Date: Wed, 23 Jan 2013 17:26:01 +0000 (UTC)
commit 71a33bf6b584934b3951ab43b8984344e10900e1
Author: Robert Bragg <robert linux intel com>
Date: Wed Jan 9 19:54:41 2013 +0000
Adds cogl_swap_info_get_refresh_interval api back
After a discussion on IRC we discussed the fact that some window systems
won't allow us to associate a CoglOutput with a CoglSwapInfo object but
they can report a refresh_interval. This justifies being able to query
the refresh_interval without needing to use
cogl_output_get_refresh_rate().
XXX: One remaining issue here though is why can't we be more consistent
and return a _refresh_rate() instead of a _refresh_interval().
TODO: squash this back into owen's patch
cogl/cogl-swap-info-private.h | 1 +
cogl/cogl-swap-info.c | 6 ++++++
cogl/cogl-swap-info.h | 20 ++++++++++++++++++++
cogl/winsys/cogl-winsys-glx.c | 16 ++++++++++++++++
4 files changed, 43 insertions(+), 0 deletions(-)
---
diff --git a/cogl/cogl-swap-info-private.h b/cogl/cogl-swap-info-private.h
index 61953fa..2e67fb0 100644
--- a/cogl/cogl-swap-info-private.h
+++ b/cogl/cogl-swap-info-private.h
@@ -34,6 +34,7 @@ struct _CoglSwapInfo
int64_t frame_counter;
int64_t presentation_time;
+ int64_t refresh_interval;
CoglOutput *output;
};
diff --git a/cogl/cogl-swap-info.c b/cogl/cogl-swap-info.c
index e8f83bd..dfb0c13 100644
--- a/cogl/cogl-swap-info.c
+++ b/cogl/cogl-swap-info.c
@@ -59,6 +59,12 @@ cogl_swap_info_get_presentation_time (CoglSwapInfo *info)
return info->presentation_time;
}
+int64_t
+cogl_swap_info_get_refresh_interval (CoglSwapInfo *info)
+{
+ return info->refresh_interval;
+}
+
CoglOutput *
cogl_swap_info_get_output (CoglSwapInfo *info)
{
diff --git a/cogl/cogl-swap-info.h b/cogl/cogl-swap-info.h
index 62728b6..699c845 100644
--- a/cogl/cogl-swap-info.h
+++ b/cogl/cogl-swap-info.h
@@ -82,6 +82,26 @@ int64_t cogl_swap_info_get_frame_counter (CoglSwapInfo *info);
int64_t cogl_swap_info_get_presentation_time (CoglSwapInfo *info);
/**
+ * cogl_swap_info_get_refresh_interval:
+ * @info: a #CoglSwapInfo object
+ *
+ * Gets the refresh interval for the output that the frame was on at the
+ * time the frame was presented. This is the number of microseconds between
+ * refreshes of the screen, and is equal to 1000000 / refresh_rate.
+ *
+ * <note>Some platforms can't associate a #CoglOutput with a
+ * #CoglSwapInfo object but are able to report a refresh_interval via
+ * this api. Therefore if you need this information then this api is
+ * more reliable than using cogl_swap_info_get_output() followed by
+ * cogl_output_get_refresh_rate().</note>
+ *
+ * Return value: the refresh interval, in microsecoonds.
+ * Since: 2.0
+ * Stability: unstable
+ */
+int64_t cogl_swap_info_get_refresh_interval (CoglSwapInfo *info);
+
+/**
* cogl_swap_info_get_output:
* @info: a #CoglSwapInfo object
*
diff --git a/cogl/winsys/cogl-winsys-glx.c b/cogl/winsys/cogl-winsys-glx.c
index af9bb6b..7956711 100644
--- a/cogl/winsys/cogl-winsys-glx.c
+++ b/cogl/winsys/cogl-winsys-glx.c
@@ -1436,6 +1436,19 @@ _cogl_winsys_get_vsync_counter (CoglContext *ctx)
}
static void
+set_refresh_interval_from_output (CoglOnscreen *onscreen,
+ CoglOutput *output)
+{
+#warning "XXX: why not be consistent and also report a refresh_rate for the SwapInfo?"
+ float refresh_rate = cogl_output_get_refresh_rate (output);
+ if (refresh_rate != 0.0)
+ {
+ CoglSwapInfo *info = g_queue_peek_tail (&onscreen->pending_swap_infos);
+ info->refresh_interval = (int)(0.5 + (1000000. / refresh_rate));
+ }
+}
+
+static void
_cogl_winsys_onscreen_swap_region (CoglOnscreen *onscreen,
const int *user_rectangles,
int n_rectangles)
@@ -1634,6 +1647,9 @@ _cogl_winsys_onscreen_swap_region (CoglOnscreen *onscreen,
xlib_onscreen->y + y_min,
x_max - x_min,
y_max - y_min);
+
+ if (info->output)
+ set_refresh_interval_from_output (onscreen, info->output);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]