clutter/stage-cogl: Reschedule update on present

If an update (new frame) had been scheduled already before
`_clutter_stage_cogl_presented` was called then that means it was
scheduled for the wrong time. Because the `last_presentation_time` has
changed since then. And using an `update_time` based on an outdated
presentation time results in scheduling frames too early, filling the
buffer queue (triple buffering or worse) and high visual latency.

So if we do receive a presentation event when an update is already
scheduled, remember to reschedule the update based on the newer
`last_presentation_time`. This way we avoid overfilling the buffer queue
and limit ourselves to double buffering for less visible lag.

Closes: GNOME/mutter#334

Prerequisite: GNOME/mutter!520

GNOME/mutter!281
4 jobs for !281 with reschedule-on-present in 8 minutes and 49 seconds
detached
Status Job ID Name Coverage
  Review
passed #305225
check-commit-log

00:00:33

 
  Build
passed #305226
build-mutter

00:04:52

 
  Test
passed #305228
can-build-gnome-shell

00:02:03

passed #305227
test-mutter

00:03:23