[PATCH xorg-gtest 0/5] Build system improvements and uTouch-Evemu support
Chase Douglas
chase.douglas at canonical.com
Mon Mar 5 21:26:53 PST 2012
On 03/05/2012 06:09 PM, Peter Hutterer wrote:
> On Mon, Mar 05, 2012 at 11:47:37AM -0800, Chase Douglas wrote:
>> The first three changes are improvements to the build system. The fourth is a
>> simple .gitignore update. The fifth is the addition of uTouch-Evemu device
>> recording playback support.
>>
>> Unfortunately, the X.org server does not have a suitable mechanism for
>> generating test input events for all events. The XTest extension relies on a
>> static pointer and keyboard combination, does not propagate events through the
>> normal event path in the server, and only supports X core and XInput 1.x events.
>> I wanted to create a new input module that would instantiate new devices on
>> demand and send events using the xf86XInput API, but the input device
>> architecture of the server makes this impossible without a new input module API.
>
> Not quite sure what part is impossible here, can you expand? We do something
> like this in the wacom driver, NewInputDeviceRequest is exposed to the
> drivers.
It may be possible with NewInputDeviceRequest, but it really would be a
hack job I think. Ideally, I would like to have an input module that
acted like uinput, but at the X level. It would open up a socket (not
necessarily TCP/IP, but why not), listen for connections, and
instantiate new devices and generate events based on a serial protocol
defined by the input module. Without having really attempted this, I
have my doubts that it could be made to work with the current xf86XInput
API.
> This is just out of interest, I do think that uinput is the best solution
> here anyway.
While I think uinput gets us a lot, there are two problems with it:
1. It's Linux only, so Oracle can't test on SunOS, Apple can't test on
OS X, etc.
2. Test input must be defined in terms of the Linux evdev protocol.
Usually all I want to do is create a device and send one touch event.
The real meat and potatoes of the test is how the server handles that
one event. However, a test writer now has to either record the test,
which may include way more events than we really want for a test, or
they need to hand craft an evdev sequence (probably in utouch-evemu format).
Of course, having uinput support is a huge leap ahead of where we are
today, which is practically no where when it comes to integration
testing. I just think in the long run it would be easier to maintain an
X.org specific, platform independent test device framework.
>> However, we can get around all this on Linux by using the uinput evdev
>> subsystem. Any physical device can be recorded and played back as a virtual
>> device using uinput. uTouch-Evemu is a thin wrapper around uinput that handles
>> recording to and playing back from files. We use this for utouch-frame,
>> utouch-grail, and utouch-geis for integration testing. Currently, each has its
>> own Evemu testing wrapper, but this will help simplify things.
>>
>> You can find more information on evemu here:
>> https://wiki.ubuntu.com/Multitouch/Testing/uTouchEvEmu.
>>
>> Note that uTouch-Evemu is GPLv3 and cannot be relicensed. Support is being added
>> optionally, and if you don't specify --with-evemu or --without-evemu it should
>> automatically pick it up if it's already installed. Until we have better X.org
>> input test frameworks, I believe this is a reasonable first step for testing.
>
> I'm going to claim that given that uinput only exists on Linux, the GPLv3
> dependency shouldn't affect us badly (those that can't use GPLv3 don't run
> Linux, so...)
That's my thinking too, I just wanted it to be clear to everyone so we
don't have the same licensing surprise that everyone had with xorg-gtest :).
Thanks,
-- Chase
More information about the xorg-devel
mailing list