Ok, so feeling a bit frustrated at not having a reliable way to test xinput response, I decided to build my own. Sakya's test is ingenious but I don't really know how the polling rate is obtainted, and whether it is valid for game controllers and not just mice.
I downloaded XinputDotNet (https://github.com/speps/XInputDotNet
), which is a C# wrapper library around XInput that's used in .Net and Unity games.
This library has a 'Dotnetdemo' application that simply shows the xinput controller status via console. I modified this console application to measure the time the 'A' button is registered as pressed. Code I wrote is really simple. So simple I'm copying it right here so we all know what it does:
static bool counting = false;
static Stopwatch sw = new Stopwatch();
/// <param name="args"></param>
static void Main(string args)
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnPoll);
aTimer.Interval = 1;
aTimer.Enabled = true;
private static void OnPoll(object source, ElapsedEventArgs e)
GamePadState state = GamePad.GetState(PlayerIndex.One);
counting = true;
Console.WriteLine("'A' button depress time:" + sw.ElapsedMilliseconds + " ms");
counting = false;
How does this work? I execute Xinputdemo and then I press A button for as short a time as I can. The lowest press interval detected is an upper bound
to the time between polls (the inverse of which would be a lower bound
to the polling rate).
On my desktop, with a xbone controller, the minimum depress time I could get consistently was 15 m
On my Win, with that same controller plugged in, the minimum depress time I could get consistently was also 15 ms
On my Win, with the Win's controller set to Xinput mode, the lowest depress time I could get was 46 ms
tl;dr: I do not think the firmware fixed the issue. Perhaps it's not the polling rate (riiight), but the thing is, it was not possible to time a button press for less than 3 frames, and still isn't.
If someone wants to test this on their Win, you can download XinputDotNet and the code above and build it or just get the executable from here (1 executable, 2 dll's): http://s000.tinyupload.com/?file_id=19924952393845576851
If someone sees a flaw in my code or my method I'll be very happy to know. I'm not an expert in game controller programming.