tools: add libinput analyze buttons for button state analysis
This tool helps with tracking button states and time deltas between button events. Example output for a mouse with LMR buttons recorded (the mouse also has BTN_SIDE and BTN_EXTRA):
Timestamp │ Delta │ L │ R │ M │ S │ E
0.596112 │ 142ms │ ┬ │ │ │ │
0.689096 │ 92ms │ ┴ │ │ │ │
1.129056 │ 439ms │ ┬ │ │ │ │
1.308178 │ 179ms │ ┴ │ │ │ │
1.469149 │ 136ms │ ┬ │ │ │ │
1.598096 │ 128ms │ ┴ │ │ │ │
1.862125 │ 264ms │ ┬ │ │ │ │
2.084234 │ 222ms │ │ │ ┬ │ │ │
2.415224 │ 330ms │ │ │ ┴ │ │ │
2.831227 │ 416ms │ │ │ ┬ │ │ │
3.215067 │ 383ms │ ┴ │ │ │ │ │
3.525230 │ 310ms │ ┬ │ │ │ │ │
3.629006 │ 103ms │ ┴ │ │ │ │ │
3.813078 │ 184ms │ ┬ │ │ │ │ │
3.909170 │ 96ms │ ┴ │ │ │ │ │
4.093180 │ 184ms │ ┬ │ │ │ │ │
4.317036 │ 223ms │ ┴ │ │ │ │ │
4.507175 │ 190ms │ ┬ │ │ │ │ │
4.587105 │ 79ms │ │ │ ┴ │ │ │
4.779211 │ 192ms │ ┴ │ │ │ │
5.075239 │ 296ms │ │ │ ┬ │ │
5.259097 │ 183ms │ │ │ ┴ │ │
5.379082 │ 119ms │ │ │ ┬ │ │
5.483044 │ 103ms │ │ │ ┴ │ │
The default behavior is to highlight time deltas below 25ms in red. 25ms is our higher debounce timeout.
Motivated by #1003 (closed), cc @stef204