diff --git a/gdk/gdkframeclock.c b/gdk/gdkframeclock.c index c77127f634..b8ab15c7a0 100644 --- a/gdk/gdkframeclock.c +++ b/gdk/gdkframeclock.c @@ -420,7 +420,7 @@ _gdk_frame_clock_begin_frame (GdkFrameClock *clock) gdk_frame_timings_unref(priv->timings[priv->current]); } - priv->timings[priv->current] = gdk_frame_timings_new (priv->frame_counter); + priv->timings[priv->current] = _gdk_frame_timings_new (priv->frame_counter); } GdkFrameTimings * @@ -471,7 +471,7 @@ gdk_frame_clock_get_last_complete (GdkFrameClock *clock) for (i = 0; i < priv->n_timings; i++) { gint pos = ((priv->current - i) + FRAME_HISTORY_MAX_LENGTH) % FRAME_HISTORY_MAX_LENGTH; - if (gdk_frame_timings_get_complete (priv->timings[pos])) + if (priv->timings[pos]->complete) return priv->timings[pos]; } @@ -483,40 +483,31 @@ void _gdk_frame_clock_debug_print_timings (GdkFrameClock *clock, GdkFrameTimings *timings) { - gint64 frame_counter = gdk_frame_timings_get_frame_counter (timings); - gint64 layout_start_time = _gdk_frame_timings_get_layout_start_time (timings); - gint64 paint_start_time = _gdk_frame_timings_get_paint_start_time (timings); - gint64 frame_end_time = _gdk_frame_timings_get_frame_end_time (timings); - gint64 frame_time = gdk_frame_timings_get_frame_time (timings); - gint64 presentation_time = gdk_frame_timings_get_presentation_time (timings); - gint64 predicted_presentation_time = gdk_frame_timings_get_predicted_presentation_time (timings); - gint64 refresh_interval = gdk_frame_timings_get_refresh_interval (timings); gint64 previous_frame_time = 0; - gboolean slept_before = gdk_frame_timings_get_slept_before (timings); GdkFrameTimings *previous_timings = gdk_frame_clock_get_timings (clock, - frame_counter - 1); + timings->frame_counter - 1); if (previous_timings != NULL) - previous_frame_time = gdk_frame_timings_get_frame_time (previous_timings); + previous_frame_time = previous_timings->frame_time; - g_print ("%5" G_GINT64_FORMAT ":", frame_counter); + g_print ("%5" G_GINT64_FORMAT ":", timings->frame_counter); if (previous_frame_time != 0) { - g_print (" interval=%-4.1f", (frame_time - previous_frame_time) / 1000.); - g_print (slept_before ? " (sleep)" : " "); + g_print (" interval=%-4.1f", (timings->frame_time - previous_frame_time) / 1000.); + g_print (timings->slept_before ? " (sleep)" : " "); } - if (layout_start_time != 0) - g_print (" layout_start=%-4.1f", (layout_start_time - frame_time) / 1000.); - if (paint_start_time != 0) - g_print (" paint_start=%-4.1f", (paint_start_time - frame_time) / 1000.); - if (frame_end_time != 0) - g_print (" frame_end=%-4.1f", (frame_end_time - frame_time) / 1000.); - if (presentation_time != 0) - g_print (" present=%-4.1f", (presentation_time - frame_time) / 1000.); - if (predicted_presentation_time != 0) - g_print (" predicted=%-4.1f", (predicted_presentation_time - frame_time) / 1000.); - if (refresh_interval != 0) - g_print (" refresh_interval=%-4.1f", refresh_interval / 1000.); + if (timings->layout_start_time != 0) + g_print (" layout_start=%-4.1f", (timings->layout_start_time - timings->frame_time) / 1000.); + if (timings->paint_start_time != 0) + g_print (" paint_start=%-4.1f", (timings->paint_start_time - timings->frame_time) / 1000.); + if (timings->frame_end_time != 0) + g_print (" frame_end=%-4.1f", (timings->frame_end_time - timings->frame_time) / 1000.); + if (timings->presentation_time != 0) + g_print (" present=%-4.1f", (timings->presentation_time - timings->frame_time) / 1000.); + if (timings->predicted_presentation_time != 0) + g_print (" predicted=%-4.1f", (timings->predicted_presentation_time - timings->frame_time) / 1000.); + if (timings->refresh_interval != 0) + g_print (" refresh_interval=%-4.1f", timings->refresh_interval / 1000.); g_print ("\n"); } #endif /* G_ENABLE_DEBUG */ @@ -550,8 +541,8 @@ gdk_frame_clock_get_refresh_info (GdkFrameClock *clock, if (timings == NULL) return; - refresh_interval = gdk_frame_timings_get_refresh_interval (timings); - presentation_time = gdk_frame_timings_get_presentation_time (timings); + refresh_interval = timings->refresh_interval; + presentation_time = timings->presentation_time; if (presentation_time != 0) { diff --git a/gdk/gdkframeclockidle.c b/gdk/gdkframeclockidle.c index da05a9698a..afb9430945 100644 --- a/gdk/gdkframeclockidle.c +++ b/gdk/gdkframeclockidle.c @@ -304,10 +304,8 @@ gdk_frame_clock_paint_idle (void *data) _gdk_frame_clock_begin_frame (clock); timings = gdk_frame_clock_get_current_frame_timings (clock); - gdk_frame_timings_set_frame_time (timings, priv->frame_time); - - gdk_frame_timings_set_slept_before (timings, - priv->sleep_serial != get_sleep_serial ()); + timings->frame_time = priv->frame_time; + timings->slept_before = priv->sleep_serial != get_sleep_serial (); priv->phase = GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT; @@ -336,7 +334,7 @@ gdk_frame_clock_paint_idle (void *data) { if (priv->phase != GDK_FRAME_CLOCK_PHASE_LAYOUT && (priv->requested & GDK_FRAME_CLOCK_PHASE_LAYOUT)) - _gdk_frame_timings_set_layout_start_time (timings, g_get_monotonic_time ()); + timings->layout_start_time = g_get_monotonic_time (); } #endif /* G_ENABLE_DEBUG */ @@ -355,7 +353,7 @@ gdk_frame_clock_paint_idle (void *data) { if (priv->phase != GDK_FRAME_CLOCK_PHASE_PAINT && (priv->requested & GDK_FRAME_CLOCK_PHASE_PAINT)) - _gdk_frame_timings_set_paint_start_time (timings, g_get_monotonic_time ()); + timings->paint_start_time = g_get_monotonic_time (); } #endif /* G_ENABLE_DEBUG */ @@ -377,7 +375,7 @@ gdk_frame_clock_paint_idle (void *data) #ifdef G_ENABLE_DEBUG if ((_gdk_debug_flags & GDK_DEBUG_FRAMES) != 0) - _gdk_frame_timings_set_frame_end_time (timings, g_get_monotonic_time ()); + timings->frame_end_time = g_get_monotonic_time (); #endif /* G_ENABLE_DEBUG */ } case GDK_FRAME_CLOCK_PHASE_RESUME_EVENTS: @@ -388,7 +386,7 @@ gdk_frame_clock_paint_idle (void *data) #ifdef G_ENABLE_DEBUG if ((_gdk_debug_flags & GDK_DEBUG_FRAMES) != 0) { - if (gdk_frame_timings_get_complete (timings)) + if (timings->complete) _gdk_frame_clock_debug_print_timings (clock, timings); } #endif /* G_ENABLE_DEBUG */ diff --git a/gdk/gdkframeclockprivate.h b/gdk/gdkframeclockprivate.h index 63e2d7ed99..c924550d6c 100644 --- a/gdk/gdkframeclockprivate.h +++ b/gdk/gdkframeclockprivate.h @@ -67,10 +67,34 @@ struct _GdkFrameClockClass /* void (* resume_events) (GdkFrameClock *clock); */ }; +struct _GdkFrameTimings +{ + guint ref_count; + + gint64 frame_counter; + guint64 cookie; + gint64 frame_time; + gint64 drawn_time; + gint64 presentation_time; + gint64 refresh_interval; + gint64 predicted_presentation_time; + +#ifdef G_ENABLE_DEBUG + gint64 layout_start_time; + gint64 paint_start_time; + gint64 frame_end_time; +#endif /* G_ENABLE_DEBUG */ + + guint complete : 1; + guint slept_before : 1; +}; + void _gdk_frame_clock_begin_frame (GdkFrameClock *clock); void _gdk_frame_clock_debug_print_timings (GdkFrameClock *clock, GdkFrameTimings *timings); +GdkFrameTimings *_gdk_frame_timings_new (gint64 frame_counter); + G_END_DECLS #endif /* __GDK_FRAME_CLOCK_PRIVATE_H__ */ diff --git a/gdk/gdkframetimings.c b/gdk/gdkframetimings.c index ad9ec2e527..deb2932ebe 100644 --- a/gdk/gdkframetimings.c +++ b/gdk/gdkframetimings.c @@ -17,36 +17,14 @@ #include "config.h" -#include "gdkframetimings.h" - -struct _GdkFrameTimings -{ - guint ref_count; - - gint64 frame_counter; - guint64 cookie; - gint64 frame_time; - gint64 drawn_time; - gint64 presentation_time; - gint64 refresh_interval; - gint64 predicted_presentation_time; - -#ifdef G_ENABLE_DEBUG - gint64 layout_start_time; - gint64 paint_start_time; - gint64 frame_end_time; -#endif /* G_ENABLE_DEBUG */ - - guint complete : 1; - guint slept_before : 1; -}; +#include "gdkframeclockprivate.h" G_DEFINE_BOXED_TYPE (GdkFrameTimings, gdk_frame_timings, gdk_frame_timings_ref, gdk_frame_timings_unref) GdkFrameTimings * -gdk_frame_timings_new (gint64 frame_counter) +_gdk_frame_timings_new (gint64 frame_counter) { GdkFrameTimings *timings; @@ -86,23 +64,6 @@ gdk_frame_timings_get_frame_counter (GdkFrameTimings *timings) return timings->frame_counter; } -guint64 -gdk_frame_timings_get_cookie (GdkFrameTimings *timings) -{ - g_return_val_if_fail (timings != NULL, 0); - - return timings->cookie; -} - -void -gdk_frame_timings_set_cookie (GdkFrameTimings *timings, - guint64 cookie) -{ - g_return_if_fail (timings != NULL); - - timings->cookie = cookie; -} - gboolean gdk_frame_timings_get_complete (GdkFrameTimings *timings) { @@ -111,32 +72,6 @@ gdk_frame_timings_get_complete (GdkFrameTimings *timings) return timings->complete; } -void -gdk_frame_timings_set_complete (GdkFrameTimings *timings, - gboolean complete) -{ - g_return_if_fail (timings != NULL); - - timings->complete = complete; -} - -gboolean -gdk_frame_timings_get_slept_before (GdkFrameTimings *timings) -{ - g_return_val_if_fail (timings != NULL, FALSE); - - return timings->slept_before; -} - -void -gdk_frame_timings_set_slept_before (GdkFrameTimings *timings, - gboolean slept_before) -{ - g_return_if_fail (timings != NULL); - - timings->slept_before = slept_before; -} - gint64 gdk_frame_timings_get_frame_time (GdkFrameTimings *timings) { @@ -145,32 +80,6 @@ gdk_frame_timings_get_frame_time (GdkFrameTimings *timings) return timings->frame_time; } -void -gdk_frame_timings_set_frame_time (GdkFrameTimings *timings, - gint64 frame_time) -{ - g_return_if_fail (timings != NULL); - - timings->frame_time = frame_time; -} - -gint64 -gdk_frame_timings_get_drawn_time (GdkFrameTimings *timings) -{ - g_return_val_if_fail (timings != NULL, 0); - - return timings->drawn_time; -} - -void -gdk_frame_timings_set_drawn_time (GdkFrameTimings *timings, - gint64 drawn_time) -{ - g_return_if_fail (timings != NULL); - - timings->drawn_time = drawn_time; -} - gint64 gdk_frame_timings_get_presentation_time (GdkFrameTimings *timings) { @@ -179,15 +88,6 @@ gdk_frame_timings_get_presentation_time (GdkFrameTimings *timings) return timings->presentation_time; } -void -gdk_frame_timings_set_presentation_time (GdkFrameTimings *timings, - gint64 presentation_time) -{ - g_return_if_fail (timings != NULL); - - timings->presentation_time = presentation_time; -} - gint64 gdk_frame_timings_get_predicted_presentation_time (GdkFrameTimings *timings) { @@ -196,15 +96,6 @@ gdk_frame_timings_get_predicted_presentation_time (GdkFrameTimings *timings) return timings->predicted_presentation_time; } -void -gdk_frame_timings_set_predicted_presentation_time (GdkFrameTimings *timings, - gint64 predicted_presentation_time) -{ - g_return_if_fail (timings != NULL); - - timings->predicted_presentation_time = predicted_presentation_time; -} - gint64 gdk_frame_timings_get_refresh_interval (GdkFrameTimings *timings) { @@ -212,66 +103,3 @@ gdk_frame_timings_get_refresh_interval (GdkFrameTimings *timings) return timings->refresh_interval; } - -void -gdk_frame_timings_set_refresh_interval (GdkFrameTimings *timings, - gint64 refresh_interval) -{ - g_return_if_fail (timings != NULL); - - timings->refresh_interval = refresh_interval; -} - -#ifdef G_ENABLE_DEBUG -gint64 -_gdk_frame_timings_get_layout_start_time (GdkFrameTimings *timings) -{ - g_return_val_if_fail (timings != NULL, 0); - - return timings->layout_start_time; -} - -void -_gdk_frame_timings_set_layout_start_time (GdkFrameTimings *timings, - gint64 layout_start_time) -{ - g_return_if_fail (timings != NULL); - - timings->layout_start_time = layout_start_time; -} - -gint64 -_gdk_frame_timings_get_paint_start_time (GdkFrameTimings *timings) -{ - g_return_val_if_fail (timings != NULL, 0); - - return timings->paint_start_time; -} - -void -_gdk_frame_timings_set_paint_start_time (GdkFrameTimings *timings, - gint64 paint_start_time) -{ - g_return_if_fail (timings != NULL); - - timings->paint_start_time = paint_start_time; -} - -gint64 -_gdk_frame_timings_get_frame_end_time (GdkFrameTimings *timings) -{ - g_return_val_if_fail (timings != NULL, 0); - - return timings->frame_end_time; -} - -void -_gdk_frame_timings_set_frame_end_time (GdkFrameTimings *timings, - gint64 frame_end_time) -{ - g_return_if_fail (timings != NULL); - - timings->frame_end_time = frame_end_time; -} - -#endif /* G_ENABLE_DEBUG */ diff --git a/gdk/gdkframetimings.h b/gdk/gdkframetimings.h index 8e86c6e69f..0fb1e20c8c 100644 --- a/gdk/gdkframetimings.h +++ b/gdk/gdkframetimings.h @@ -30,41 +30,16 @@ typedef struct _GdkFrameTimings GdkFrameTimings; GType gdk_frame_timings_get_type (void) G_GNUC_CONST; -GdkFrameTimings *gdk_frame_timings_new (gint64 frame_counter); - GdkFrameTimings *gdk_frame_timings_ref (GdkFrameTimings *timings); void gdk_frame_timings_unref (GdkFrameTimings *timings); gint64 gdk_frame_timings_get_frame_counter (GdkFrameTimings *timings); - -guint64 gdk_frame_timings_get_cookie (GdkFrameTimings *timings); -void gdk_frame_timings_set_cookie (GdkFrameTimings *timings, - guint64 cookie); - gboolean gdk_frame_timings_get_complete (GdkFrameTimings *timings); -void gdk_frame_timings_set_complete (GdkFrameTimings *timings, - gboolean complete); - -gboolean gdk_frame_timings_get_slept_before (GdkFrameTimings *timings); -void gdk_frame_timings_set_slept_before (GdkFrameTimings *timings, - gboolean slept_before); - gint64 gdk_frame_timings_get_frame_time (GdkFrameTimings *timings); -void gdk_frame_timings_set_frame_time (GdkFrameTimings *timings, - gint64 frame_time); -gint64 gdk_frame_timings_get_drawn_time (GdkFrameTimings *timings); -void gdk_frame_timings_set_drawn_time (GdkFrameTimings *timings, - gint64 frame_time); gint64 gdk_frame_timings_get_presentation_time (GdkFrameTimings *timings); -void gdk_frame_timings_set_presentation_time (GdkFrameTimings *timings, - gint64 presentation_time); gint64 gdk_frame_timings_get_refresh_interval (GdkFrameTimings *timings); -void gdk_frame_timings_set_refresh_interval (GdkFrameTimings *timings, - gint64 refresh_interval); gint64 gdk_frame_timings_get_predicted_presentation_time (GdkFrameTimings *timings); -void gdk_frame_timings_set_predicted_presentation_time (GdkFrameTimings *timings, - gint64 predicted_presentation_time); G_END_DECLS diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index 61ebc19c21..4a91b7709f 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -429,24 +429,6 @@ cairo_surface_t * _gdk_offscreen_window_create_surface (GdkWindow *window, gint width, gint height); -/******************************** - * Debug-only frame statistics * - ********************************/ - -#ifdef G_ENABLE_DEBUG - -gint64 _gdk_frame_timings_get_layout_start_time (GdkFrameTimings *timings); -void _gdk_frame_timings_set_layout_start_time (GdkFrameTimings *timings, - gint64 layout_start_time); -gint64 _gdk_frame_timings_get_paint_start_time (GdkFrameTimings *timings); -void _gdk_frame_timings_set_paint_start_time (GdkFrameTimings *timings, - gint64 paint_time); -gint64 _gdk_frame_timings_get_frame_end_time (GdkFrameTimings *timings); -void _gdk_frame_timings_set_frame_end_time (GdkFrameTimings *timings, - gint64 frame_end_time); - -#endif /* G_ENABLE_DEBUG */ - G_END_DECLS #endif /* __GDK_INTERNALS_H__ */ diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c index 8f6fe2bfc4..90a2eca921 100644 --- a/gdk/x11/gdkdisplay-x11.c +++ b/gdk/x11/gdkdisplay-x11.c @@ -1070,7 +1070,7 @@ find_frame_timings (GdkFrameClock *clock, { GdkFrameTimings *timings = gdk_frame_clock_get_timings (clock, i); - if (gdk_frame_timings_get_cookie (timings) == serial) + if (timings->cookie == serial) return timings; } @@ -1116,7 +1116,7 @@ _gdk_wm_protocols_filter (GdkXEvent *xev, GdkFrameTimings *timings = find_frame_timings (clock, serial); if (timings) - gdk_frame_timings_set_drawn_time (timings, frame_drawn_time); + timings->drawn_time = frame_drawn_time; if (window_impl->toplevel->frame_pending) { @@ -1153,18 +1153,16 @@ _gdk_wm_protocols_filter (GdkXEvent *xev, if (timings) { - gint64 drawn_time = gdk_frame_timings_get_drawn_time (timings); gint32 presentation_time_offset = (gint32)d2; gint32 refresh_interval = d3; - if (drawn_time && presentation_time_offset) - gdk_frame_timings_set_presentation_time (timings, - drawn_time + presentation_time_offset); + if (timings->drawn_time && presentation_time_offset) + timings->presentation_time = timings->drawn_time + presentation_time_offset; if (refresh_interval) - gdk_frame_timings_set_refresh_interval (timings, refresh_interval); + timings->refresh_interval = refresh_interval; - gdk_frame_timings_set_complete (timings, TRUE); + timings->complete = TRUE; #ifdef G_ENABLE_DEBUG if ((_gdk_debug_flags & GDK_DEBUG_FRAMES) != 0) _gdk_frame_clock_debug_print_timings (clock, timings); diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 6bb1ee2caa..edb8591710 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -32,6 +32,7 @@ #include "gdkvisualprivate.h" #include "gdkinternals.h" #include "gdkdeviceprivate.h" +#include "gdkframeclockprivate.h" #include "gdkasync.h" #include "gdkeventsource.h" #include "gdkdisplay-x11.h" @@ -282,10 +283,8 @@ gdk_x11_window_predict_presentation_time (GdkWindow *window) GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (window->impl); GdkFrameClock *clock; GdkFrameTimings *timings; - gint64 frame_time; gint64 presentation_time; gint64 refresh_interval; - gboolean slept_before; if (!WINDOW_IS_TOPLEVEL (window)) return; @@ -293,39 +292,35 @@ gdk_x11_window_predict_presentation_time (GdkWindow *window) clock = gdk_window_get_frame_clock (window); timings = gdk_frame_clock_get_current_frame_timings (clock); - frame_time = gdk_frame_timings_get_frame_time (timings); - slept_before = gdk_frame_timings_get_slept_before (timings); gdk_frame_clock_get_refresh_info (clock, - frame_time, + timings->frame_time, &refresh_interval, &presentation_time); if (presentation_time != 0) { - if (slept_before) + if (timings->slept_before) { presentation_time += refresh_interval; } else { - if (presentation_time < frame_time + refresh_interval / 2) + if (presentation_time < timings->frame_time + refresh_interval / 2) presentation_time += refresh_interval; } } else { - if (slept_before) - presentation_time = frame_time + refresh_interval + refresh_interval / 2; + if (timings->slept_before) + presentation_time = timings->frame_time + refresh_interval + refresh_interval / 2; else - presentation_time = frame_time + refresh_interval; + presentation_time = timings->frame_time + refresh_interval; } if (presentation_time < impl->toplevel->throttled_presentation_time) presentation_time = impl->toplevel->throttled_presentation_time; - gdk_frame_timings_set_predicted_presentation_time (timings, - presentation_time); - + timings->predicted_presentation_time = presentation_time; } static void @@ -399,7 +394,7 @@ gdk_x11_window_end_frame (GdkWindow *window) * but rather at a particular time. This can trigger different handling from * the compositor. */ - if (gdk_frame_timings_get_slept_before (timings)) + if (timings->slept_before) impl->toplevel->current_counter_value += 3; else impl->toplevel->current_counter_value += 1; @@ -413,8 +408,7 @@ gdk_x11_window_end_frame (GdkWindow *window) { impl->toplevel->frame_pending = TRUE; gdk_frame_clock_freeze (gdk_window_get_frame_clock (window)); - gdk_frame_timings_set_cookie (timings, - impl->toplevel->current_counter_value); + timings->cookie = impl->toplevel->current_counter_value; } } @@ -431,7 +425,7 @@ gdk_x11_window_end_frame (GdkWindow *window) } if (!impl->toplevel->frame_pending) - gdk_frame_timings_set_complete (timings, TRUE); + timings->complete = TRUE; } /*****************************************************