Alright, I tested with the "which one registers first" method, tweaking a millisecond delay in the arduino to figure out where the threshold is:
Kensington K64370A (rubber dome switches)
USB polling interval: 10ms
Key sample interval: 3.6ms
max latency compared to arduino: 27ms
min latency compared to arduino: 12ms
median latency compared to arduino: 19ms
WASD V1 with Cherry MX brown switches:
USB Polling interval: 1ms
Key sample interval: 1.5ms
max latency compared to arduino: 14ms
min latency compared to arduino: 9ms
median latency compared to arduino: 10ms
Arduino Micro:
USB Polling interval: 1ms
Key sample method: interrupt contingent on the keyboard's key sample interval.
Debounce method: Latch on switch closed, reset 5ms after switch opens.
I'm 95% confident these results are accurate to within 2ms. Possible error sources are the arduino delay() function, USB polling quirks, and large delays that happen <1% of the time.
