diff options
author | Christian Hergert <chergert@redhat.com> | 2016-04-26 03:08:11 -0700 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-04-26 09:06:07 -0400 |
commit | f27dd214267b5b907411cefb85350acfbb26ac77 (patch) | |
tree | 483d25fff5f17218f2699f125b8c5c152ff11b28 /gdk/gdkframeclock.c | |
parent | 8f64e4a8e3443eb887614e981b4a0f7b6ae3ac96 (diff) | |
download | gtk+-f27dd214267b5b907411cefb85350acfbb26ac77.tar.gz |
frametimings: reuse previous frame timing in common case
Typically, there won't be any references on old frame timings except for
the most recent timing. So instead of discarding these and re-entering
gslice twice, just steal the old frame timing and reuse it.
https://bugzilla.gnome.org/show_bug.cgi?id=765592
Diffstat (limited to 'gdk/gdkframeclock.c')
-rw-r--r-- | gdk/gdkframeclock.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gdk/gdkframeclock.c b/gdk/gdkframeclock.c index f84aee77bb..6f6d1a1d42 100644 --- a/gdk/gdkframeclock.c +++ b/gdk/gdkframeclock.c @@ -416,12 +416,18 @@ _gdk_frame_clock_begin_frame (GdkFrameClock *frame_clock) priv->frame_counter++; priv->current = (priv->current + 1) % FRAME_HISTORY_MAX_LENGTH; + /* Try to steal the previous frame timing instead of discarding + * and allocating a new one. + */ + if G_LIKELY (priv->n_timings == FRAME_HISTORY_MAX_LENGTH && + _gdk_frame_timings_steal (priv->timings[priv->current], + priv->frame_counter)) + return; + if (priv->n_timings < FRAME_HISTORY_MAX_LENGTH) priv->n_timings++; else - { - gdk_frame_timings_unref(priv->timings[priv->current]); - } + gdk_frame_timings_unref(priv->timings[priv->current]); priv->timings[priv->current] = _gdk_frame_timings_new (priv->frame_counter); } |