[PATCH weston v2 4/6] libweston: Implement keyboard timestamps for input_timestamps_unstable_v1

Pekka Paalanen ppaalanen at gmail.com
Tue Feb 20 10:07:01 UTC 2018


On Fri, 16 Feb 2018 18:44:17 +0200
Alexandros Frantzis <alexandros.frantzis at collabora.com> wrote:

> Implement the zwp_input_timestamps_manager_v1.get_keyboard_timestamps
> request to subscribe to timestamp events for wl_keyboard resources.
> Ensure that the request handling code can gracefully handle inert
> keyboard resources.
> 
> This commit introduces a few internal helper functions which will also
> be useful in the implementation of the remaining
> zwp_input_timestamps_manager_v1 requests.
> 
> Signed-off-by: Alexandros Frantzis <alexandros.frantzis at collabora.com>
> ---
> Changes in v2:
>  - Merge helper functions from v1 3/6 commit in this one to avoid
>    warnings in 3/6 commit.
>  - Remove the head of timestamps_list in weston_keyboard_destroy.
>  - Gracefully handle inert keyboard resources in destroy_keyboard_resource
>    and input_timestamps_manager_get_keyboard_timestamps.
> 
>  libweston/compositor.h |  2 ++
>  libweston/input.c      | 95 ++++++++++++++++++++++++++++++++++++++++++++++++--
>  tests/keyboard-test.c  | 45 ++++++++++++++++++++++++
>  3 files changed, 139 insertions(+), 3 deletions(-)
> 

Hi Alf,

the below pattern repeats in all patches 4-6.

> +TEST(keyboard_timestamps_stop_after_client_releases_wl_keyboard)
> +{
> +	struct client *client = create_client_with_keyboard_focus();
> +	struct keyboard *keyboard = client->input->keyboard;
> +	struct input_timestamps *input_ts =
> +		input_timestamps_create_for_keyboard(client);
> +
> +	send_key(client, &t1, 1, WL_KEYBOARD_KEY_STATE_PRESSED);
> +	assert(keyboard->key_time_msec == timespec_to_msec(&t1));
> +	assert(timespec_eq(&keyboard->key_time_timespec, &t1));
> +
> +	wl_keyboard_release(client->input->keyboard->wl_keyboard);

This destroys the wl_keyboard, meaning that we no longer get events on
it.

> +
> +	send_key(client, &t2, 1, WL_KEYBOARD_KEY_STATE_RELEASED);
> +	assert(keyboard->key_time_msec == timespec_to_msec(&t1));
> +	assert(timespec_eq(&keyboard->key_time_timespec, &t1));

This tests key_time_timespec, however, even if the server erroneously
sent a timestamp, we would not run the wl_keyboard.key event handler
which would modify key_time_timespec. To me it looks like this test
doesn't actually test the server as is.

Should it be checking keyboard->input_timestamp instead?

> +
> +	input_timestamps_destroy(input_ts);
>  }

Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20180220/cf1ed75f/attachment.sig>


More information about the wayland-devel mailing list