[PATCH libinput] touchpad: only use the last two coordinates for delta calculation

Hans de Goede hdegoede at redhat.com
Tue Nov 22 09:10:43 UTC 2016


Hi,

On 22-11-16 02:34, Peter Hutterer wrote:
> Taking the last 4 points means factoring in a coordinate that may be more than
> 40ms in the past - or even more when the finger moves slowly and we don't get
> events for a while. This makes the pointer more sluggish and slower to catch up
> with what the finger is actually doing.
>
> We already have the motion hysteresis as a separate item to prevent jumps (and
> thus adds some delay to the movement), the calculation over time doesn't
> provide enough benefit to justify the sluggish pointer.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> I'm leaving the motion history as-is for now even though it's largely unused
> now. This can be fixed up later once we know this patch has the desired
> effect (it does here, but that could be confirmation bias)

Patch looks good to me and is:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans

>
>  src/evdev-mt-touchpad.c | 20 +++++---------------
>  1 file changed, 5 insertions(+), 15 deletions(-)
>
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index d72cb19..7b8514c 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -262,29 +262,19 @@ tp_end_sequence(struct tp_dispatch *tp, struct tp_touch *t, uint64_t time)
>  	tp_end_touch(tp, t, time);
>  }
>
> -static double
> -tp_estimate_delta(int x0, int x1, int x2, int x3)
> -{
> -	return (x0 + x1 - x2 - x3) / 4.0;
> -}
> -
>  struct normalized_coords
>  tp_get_delta(struct tp_touch *t)
>  {
>  	struct device_float_coords delta;
>  	const struct normalized_coords zero = { 0.0, 0.0 };
>
> -	if (t->history.count < TOUCHPAD_MIN_SAMPLES)
> +	if (t->history.count <= 1)
>  		return zero;
>
> -	delta.x = tp_estimate_delta(tp_motion_history_offset(t, 0)->x,
> -				    tp_motion_history_offset(t, 1)->x,
> -				    tp_motion_history_offset(t, 2)->x,
> -				    tp_motion_history_offset(t, 3)->x);
> -	delta.y = tp_estimate_delta(tp_motion_history_offset(t, 0)->y,
> -				    tp_motion_history_offset(t, 1)->y,
> -				    tp_motion_history_offset(t, 2)->y,
> -				    tp_motion_history_offset(t, 3)->y);
> +	delta.x = tp_motion_history_offset(t, 0)->x -
> +		  tp_motion_history_offset(t, 1)->x;
> +	delta.y = tp_motion_history_offset(t, 0)->y -
> +		  tp_motion_history_offset(t, 1)->y;
>
>  	return tp_normalize_delta(t->tp, delta);
>  }
>


More information about the wayland-devel mailing list