tools: libinput-record: add support for printing libinput events
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 1 Mar 2018 00:04:11 +0000 (10:04 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 19 Mar 2018 04:24:15 +0000 (14:24 +1000)
commit6e4c83636a99acc6dedb413878bf535ca4f14f4a
treea59a67fb3d3960d14354cd4e0a5a9af0985ffab3
parentfd1cb049daf924de127de6039cb30e2b2a9d364a
tools: libinput-record: add support for printing libinput events

Collect libinput events together with the evdev events and print them to the
log. This makes it possible to debug the full behavior of a user's machine
rather than having to replay it with potential different race conditions/side
effects.

Example event output:
  - evdev:
    - [  2, 314443,   4,   4,    57] # EV_MSC / MSC_SCAN               57
    - [  2, 314443,   1,  57,     1] # EV_KEY / KEY_SPACE               1
    - [  2, 314443,   0,   0,     0] # ------------ SYN_REPORT (0) ---------- +87ms
    libinput:
    - {time: 2.314443, type: KEYBOARD_KEY, key: 57, state: pressed}
  - evdev:
    - [  2, 377203,   4,   4,    57] # EV_MSC / MSC_SCAN               57
    - [  2, 377203,   1,  57,     0] # EV_KEY / KEY_SPACE               0
    - [  2, 377203,   0,   0,     0] # ------------ SYN_REPORT (0) ---------- +63ms
    libinput:
    - {time: 2.377203, type: KEYBOARD_KEY, key: 57, state: released}

Note that the only way to know that events are within the same frame is to
check the timestamp. libinput keeps those intact which means we can tell that
if we just had an evdev frame with timestamp T and get a pointer motion with
timestamp T, that frame caused the motion event.

So far, only key, pointer and touch events are printed. We also
hardcode-enable tapping where available until we have options to enable this
on the commandline just because that's useful to have.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
tools/libinput-record-verify-yaml.py
tools/libinput-record.c
tools/libinput-record.man
tools/libinput-replay