** Description changed: + [Impact] + When the user is in the `input` group and has access to the inodes under + `/dev/input/`, running a simple "SDL_Init(SDL_JOYSTICK)" takes + significantly longer in 2.30 than in earlier releases, on the order of + seconds compared with fractions of seconds. + + + [Test Case] + 1. Install `python3-sdl2` and `python3-uinput` packages with: + + $ sudo apt install -y python3-sdl2 python3-uinput + + 2. Download the script used by RetroPie, which uses SDL2 and uinput to + simulate a keyboard with: + + curl -o test.py https://pastebin.ubuntu.com/p/7SZ4Z7X9Sb/. + + 3. Run the repro script by executing: + sudo python3 test.py + + It will log two lines, before and after 'SDL_Init' is run so you can + measure the delay. It should be a fraction of a second. + + [Where Problems Could Occur] + + * Mis-detected input devices + * Issues during input detection + * Performance issues before / after this change + + [Other Info] + + The slowness is believed to be due to calls to SDL_UDEV_GetProductInfo() + for each input device starting with commit 3b1e0e1, rather than only + joystick devices as had been done previously. Specifically, IsJoystick + calls SDL_UDEV_GetProductInfo(), which then performs a walk of all + devices via udev_enumerate_scan_devices. The performance impact occurs + during the (synchronous) *closing* of the device file, which can take + 0.01 to 0.5 sec. For a system with 1 joystick but 20-ish other input + devices, this can represent a 20-fold increase in time consumed during + detection. + + The fix is to avoid opening device files by filtering out ones that are + not joystick or accelerometer classes, or if the vendor+product doesn't + indicate a Steam virtual game pad. + + [Original Report] + Hello, - the 2.30.0 SDL2 release included in 24.04 LTS (Noble) contains a regression [1] in regard to the initializaton of the Joystick/Gamepad detection. When the user is in the `input` group and has access to the inodes under `/dev/input/`, running a simple "SDL_Init(SDL_JOYSTICK)" takes about 0.5 sec per device node. - - In my/our case (https://retropie.org.uk), we're using a Python3 script that uses 'python3-sdl2' and 'python3-uinput' to create a virtual keyboard device from inputs received from a gamepad. When launching a game, the user has the opportunity to open a 'dialog' based menu and configure the game, but if the initialization takes a long time, the input from the gamepad is lost and the game configuration is not started. + the 2.30.0 SDL2 release included in 24.04 LTS (Noble) contains a + regression [1] in regard to the initializaton of the Joystick/Gamepad + detection. When the user is in the `input` group and has access to the + inodes under `/dev/input/`, running a simple "SDL_Init(SDL_JOYSTICK)" + takes about 0.5 sec per device node. - Please consider including the patch for the reported issue [1] - it's + In my/our case (https://retropie.org.uk), we're using a Python3 script + that uses 'python3-sdl2' and 'python3-uinput' to create a virtual + keyboard device from inputs received from a gamepad. When launching a + game, the user has the opportunity to open a 'dialog' based menu and + configure the game, but if the initialization takes a long time, the + input from the gamepad is lost and the game configuration is not + started. + + Please consider including the patch for the reported issue [1] - it's in [2] - or upgrade to 2.30.3 which contains the fix [3]. best regards, [1] https://github.com/libsdl-org/sdl/issues/9092/ [2] https://github.com/libsdl-org/SDL/pull/9450/files [3] https://github.com/libsdl-org/SDL/releases/tag/release-2.30.3
-- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2085140 Title: Patch Joystick subsystem regression To manage notifications about this bug go to: https://bugs.launchpad.net/libsdl/+bug/2085140/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs