On Tue, Aug 03, 2021 at 01:25:16PM +0200, Rémi Bernon wrote:
On 8/3/21 12:59 PM, Arkadiusz Hiler wrote:
On Windows dinput sometimes ignores injected input events, so let's make sure that the event was registered by checking buffered data for the device.
Signed-off-by: Arkadiusz Hiler ahiler@codeweavers.com
This series supersedes 210326, 210148, 210147 and 210146.
In this revision I use the _DX3 variant of structure for old dinput tests. Thanks Rémi!
Are the injected events really ignored? This seems more like a timing problem, where Acquire operates asynchronously and misses some events when they are injected quickly after?
As far as I can tell, Wine's implementation is synchronous when acquiring a device, and we wait for the background thread to complete the hooking (or rawinput device registration), but maybe native isn't.
According to my testing we may receive a few events after acquire but then miss some of them a bit later on.
src: https://hiler.eu/p/34ddbfbdb0ba.txt res: https://testbot.winehq.org/JobDetails.pl?Key=94912&f101=exe64.report#k10...
Wouldn't it be better to wait for injected events to be received after acquiring the device instead of skipping the tests completely?
I don't think it's related to Acquire() being async. Yes, we can continue firing events until we get one or a timeout happens, hoping that at least one will reach us, but we can still be extremely unlucky.