Hyprland/src
staticssleever668 d679d20029
seat: avoid sending pointless 'keymap' and 'repeat_info' events (#8276)
#### Describe your PR, what does it fix/add?

Fix lag spikes when pressing more than 6 keys at the same time.

 #### Is there anything you want to mention? (unchecked code, possible bugs, found problems, breaking compatibility, etc.)

Debugging process:
<details>
This is triggered by typing some applications, like CopyQ or XWayland.
Typing in Firefox doesn't lead to lag, however it itself does lag
handling these events.

Profiling CopyQ shows that paths leading to
`QtWaylandClient::QWaylandInputDevice::Keyboard::keyboard` take over
80% of processing time of an otherwise idle program.

Looking at output of 'wev' even when it's not focused shows same events
received over and over again.

```
[14:     wl_keyboard] repeat_info: rate: 25 keys/sec; delay: 300 ms
[14:     wl_keyboard] keymap: format: 1 (xkb v1), size: 64754
```

Looking at what passes through CInputManager::onKeyboardKey() ->
CSeatManager::setKeyboard() shows Hyprland 'switching' between endpoints
of the same keyboard, one of them being named like the other but with
'-1' suffix.
</details>

Tested changing layouts in Fcitx5 and with following config.

```
input:kb_layout = us,cz
input:kb_variant = ,qwerty
input:kb_options = grp:alt_shift_toggle
```

Also tested changing 'input:repeat_delay' while running.

Curiously, now these events appear in the output of 'wev' only once.
Changing layouts still seems to work fine though.

 #### Is it ready for merging, or does it need work?

Ready for merging.
2024-10-28 19:25:27 +00:00
..
config misc: Fix bad links to wiki (#8240) 2024-10-26 16:50:31 +01:00
debug hyprctl: move setprop into dispatchers (#8275) 2024-10-28 18:18:58 +00:00
desktop internal: few more marginal optimisations from profiling (#8271) 2024-10-28 18:02:52 +00:00
devices internal: Remove some unused lambda captures (#8218) 2024-10-24 13:12:41 +01:00
events core: move internal structures to monitor pointers (#8266) 2024-10-27 18:45:38 +00:00
helpers core: move internal structures to monitor pointers (#8266) 2024-10-27 18:45:38 +00:00
hyprerror internal: Move CMonitor to SP (#8178) 2024-10-19 23:03:29 +01:00
init style/ci: apply clang-format and verify it in ci (#4039) 2023-12-06 22:54:56 +00:00
layout layout: slight adjustments to snapping logic (#8273) 2024-10-28 13:39:05 +00:00
managers hyprctl: move setprop into dispatchers (#8275) 2024-10-28 18:18:58 +00:00
pch pch: add format 2023-09-06 14:59:34 +02:00
plugins misc: constify the remaining for loops (#7534) 2024-08-26 20:24:30 +02:00
protocols seat: avoid sending pointless 'keymap' and 'repeat_info' events (#8276) 2024-10-28 19:25:27 +00:00
render internal: few more marginal optimisations from profiling (#8271) 2024-10-28 18:02:52 +00:00
xwayland xwm: avoid infinite parent lookup loop in lookupParentExists 2024-10-14 00:24:32 +01:00
Compositor.cpp core: move internal structures to monitor pointers (#8266) 2024-10-27 18:45:38 +00:00
Compositor.hpp internal: cleanup CMonitor usage and fix a few ref hogs 2024-10-26 02:06:13 +01:00
defines.hpp internal: nuke wlsignal and related 2024-09-24 00:47:34 +01:00
includes.hpp Core: Move to aquamarine (#6608) 2024-07-21 13:09:54 +02:00
macros.hpp internal: introduce new types to avoid unsigned int rollover and signed int overflow (#7216) 2024-08-08 21:01:50 +02:00
main.cpp hyprland: convert std::cout and std::cerr to std::println() 2024-10-13 14:13:56 +01:00
meson.build Meson: add tracy dependency 2024-09-27 00:07:52 +03:00
SharedDefs.hpp internal: introduce new types to avoid unsigned int rollover and signed int overflow (#7216) 2024-08-08 21:01:50 +02:00
signal-safe.cpp internal: introduce new types to avoid unsigned int rollover and signed int overflow (#7216) 2024-08-08 21:01:50 +02:00
signal-safe.hpp internal: introduce new types to avoid unsigned int rollover and signed int overflow (#7216) 2024-08-08 21:01:50 +02:00
version.h.in hyprpm: add support for minimum versions 2024-04-05 00:46:37 +01:00