Skip to content

gdk3: Interpolate scroll events to screen refresh, part 3 of 4

Yariv requested to merge yarivb/gtk:gdk-3-event-interpolation-part-3 into gtk-3-24

TLDR

This is the third part in an MR series aimed at solving jitter in animation based on continuous input. See #2025 for details about the issue, and !1117 for a general description of the solution.

Depends on, and includes, !1560

Continued in !1117

What it does

From the commit message:

Add unit tests for the GdkEventHistory 'class'. This is done in a separate build of the gdk sources, since the symbols related to GdkEventHistory are not exported.

More details

The unit tests illustrate how GdkEventHistory is supposed to be used. The output binary is located at <build folder>/gdk/unit-tests/gdk-3-unit-tests.

It can be run with the following command: GDK_DEBUG=EVENTS ./gdk/unit-tests/gdk-3-unit-tests

Example output:

...
Gdk-Message: 19:11:25.299: Creating events for the test, event interval 10.00, total duration 60.00
Gdk-Message: 19:11:25.299: Uninterpolated Scroll time = 1000 delta_x = 4.00 delta_y = 8.00
Gdk-Message: 19:11:25.299: Uninterpolated Scroll time = 1010 delta_x = 4.00 delta_y = 8.00
Gdk-Message: 19:11:25.299: Uninterpolated Scroll time = 1020 delta_x = 4.00 delta_y = 8.00
Gdk-Message: 19:11:25.299: Uninterpolated Scroll time = 1030 delta_x = 4.00 delta_y = 8.00
Gdk-Message: 19:11:25.299: Uninterpolated Scroll time = 1040 delta_x = 4.00 delta_y = 8.00
Gdk-Message: 19:11:25.299: Uninterpolated Scroll time = 1050 delta_x = 4.00 delta_y = 8.00
Gdk-Message: 19:11:25.299: Uninterpolated Scroll time = 1060 delta_x = 4.00 delta_y = 8.00
Gdk-Message: 19:11:25.299: Testing constant speed input. Display interval = 15.00 Total duration = 60.00
Gdk-Message: 19:11:25.299: Interpolated Scroll time = 1000 delta_x = 4.00 delta_y = 8.00
Gdk-Message: 19:11:25.299: Interpolated Scroll time = 1015 delta_x = 6.00 delta_y = 12.00
Gdk-Message: 19:11:25.299: Interpolated Scroll time = 1030 delta_x = 6.00 delta_y = 12.00
Gdk-Message: 19:11:25.299: Interpolated Scroll time = 1045 delta_x = 6.00 delta_y = 12.00
Gdk-Message: 19:11:25.299: Interpolated Scroll time = 1060 delta_x = 6.00 delta_y = 12.00
Gdk-Message: 19:11:25.299: Test Teardown
ok 3 /interpolation/scroll_display_is_slower
...

In the snippet above, time and duration are in milliseconds, delta_x and delta_y are in pixel units. The timestamp of the log message (e.g. 19:11:25.299) is meaningless. The uninterpolated events are the "original" ones, while the interpolated events are the ones synthesized at the (fake) display time.

Edited by Yariv

Merge request reports