xserver: Branch 'master' - 10 commits
Peter Hutterer
peter.hutterer at who-t.net
Mon May 30 00:37:40 UTC 2016
On Fri, May 27, 2016 at 01:58:56AM -0700, Keith Packard wrote:
> Michel Dänzer <michel at daenzer.net> writes:
>
> > On 27.05.2016 08:08, Keith Packard wrote:
> >>
> >> commit f84703b50cc908a127f4ad923ebbf56f8f244c0d
> >> Author: Keith Packard <keithp at keithp.com>
> >> Date: Tue Dec 8 14:20:21 2015 -0800
> >>
> >> dix: Reallocate touchpoint buffer at input event time [v2]
> >>
> >> Now that input is threaded, malloc can be used at event time to resize
> >> the touchpoint buffer as needed.x
> >>
> >> v2: Remove "Need to grow the queue means dropping events."
> >> from comment as it no longer applies. (Peter Hutterer)
> >>
> >> Signed-off-by: Keith Packard <keithp at keithp.com>
> >> Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
> >
> > This change broke make check for me, specifically test/touch:
> >
> > touch: ../../test/touch.c:62: touch_grow_queue: Assertion
> > `TouchBeginDDXTouch(&dev, 1234) == ((void *)0)' failed.
>
> yeah, that test actually checks for the old (broken) X server behaviour
> of dropping touch events that overfill the buffer. The X server doesn't
> drop them anymore as it can call malloc while reading events now.
>
> From 85fef2e05775beec41eaecf9ee517bd6ffeef858 Mon Sep 17 00:00:00 2001
> From: Keith Packard <keithp at keithp.com>
> Date: Fri, 27 May 2016 01:56:39 -0700
> Subject: [PATCH xserver] test: Make touch test reflect new ability to realloc
> touch array
>
> Threaded input allows the input code to call malloc while processing
> events. In this case, that's in the middle of processing touch events
> and needing to resize the touch buffer.
>
> This test was expecting the old behaviour where touch points would get
> dropped if the buffer was full. The fix is to check for the new
> behaviour instead.
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
> ---
> test/touch.c | 27 ++++++++++++++-------------
> 1 file changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/test/touch.c b/test/touch.c
> index 981c694..e0c1bcc 100644
> --- a/test/touch.c
> +++ b/test/touch.c
> @@ -58,9 +58,8 @@ touch_grow_queue(void)
> dev.last.touches[i].client_id = i * 2;
> }
>
> - /* no more space, should've scheduled a workproc */
> - assert(TouchBeginDDXTouch(&dev, 1234) == NULL);
> - ProcessWorkQueue();
> + /* no more space, should've reallocated and succeeded */
> + assert(TouchBeginDDXTouch(&dev, 1234) != NULL);
>
> new_size = size + size / 2 + 1;
> assert(dev.last.num_touches == new_size);
> @@ -74,8 +73,12 @@ touch_grow_queue(void)
> assert(t->client_id == i * 2);
> }
>
> + assert(dev.last.touches[size].active == TRUE);
> + assert(dev.last.touches[size].ddx_id == 1234);
> + assert(dev.last.touches[size].client_id == 1);
> +
> /* make sure those are zero-initialized */
> - for (i = size; i < new_size; i++) {
> + for (i = size + 1; i < new_size; i++) {
> DDXTouchPointInfoPtr t = &dev.last.touches[i];
>
> assert(t->active == FALSE);
> @@ -136,22 +139,20 @@ touch_find_ddxid(void)
> for (i = 0; i < size; i++)
> dev.last.touches[i].active = TRUE;
>
> - /* Try to create more, fail */
> + /* Try to create more, succeed */
> ti = TouchFindByDDXID(&dev, 30, TRUE);
> - assert(ti == NULL);
> + assert(ti != NULL);
> ti = TouchFindByDDXID(&dev, 30, TRUE);
> - assert(ti == NULL);
> - /* make sure we haven't resized, we're in the signal handler */
> - assert(dev.last.num_touches == size);
> + assert(ti != NULL);
this should check that the two ti pointers are the same, not just for NULL.
> + /* make sure we have resized */
> + assert(dev.last.num_touches == size + 3);
This needs a comment, I had to wonder why it was +3 when we only tried to
add 2 more touches over the queue size. turns out it's because we resize
with (size/2 + 1) which for a size of 5 ends up being 3. So this would be a
lot better as:
assert(dev.last.num_touches == 8); /* EQ size grows from 5 to 8 */
with that, Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
Cheers,
Peter
>
> /* stop one touchpoint, try to create, succeed */
> dev.last.touches[2].active = FALSE;
> - ti = TouchFindByDDXID(&dev, 30, TRUE);
> + ti = TouchFindByDDXID(&dev, 35, TRUE);
> assert(ti == &dev.last.touches[2]);
> - /* but still grow anyway */
> - ProcessWorkQueue();
> ti = TouchFindByDDXID(&dev, 40, TRUE);
> - assert(ti == &dev.last.touches[size]);
> + assert(ti == &dev.last.touches[size+1]);
>
> free(dev.name);
> }
> --
> 2.8.1
>
>
> --
> -keith
More information about the xorg-devel
mailing list