On 02/22/2012 07:59 PM, Peter Hutterer wrote:
On Thu, Feb 09, 2012 at 06:53:05PM -0800, Chase Douglas wrote:
The results depend on the data rate of the device. A device with a
higher data rate, and thus lower individual deltas, will behave
differently with the regression calculation.

This can be verified on Synaptics semi-mt clickpads. The data rate is
halved when two or more touches are on the device. When trying to press
a button and drag the cursor with another touch, the motion will feel
faster than dragging with only one touch on the device.

Signed-off-by: Chase Douglas<[email protected]>
---
  src/synaptics.c |    7 +++----
  1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/synaptics.c b/src/synaptics.c
index dd138ea..9d8f3ee 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2046,9 +2046,8 @@ get_delta(SynapticsPrivate *priv, const struct 
SynapticsHwState *hw,
      int x_edge_speed = 0;
      int y_edge_speed = 0;

-    /* HIST is full enough: priv->count_packet_finger>  3 */
-    *dx = estimate_delta(hw->x, HIST(0).x, HIST(1).x, HIST(2).x);
-    *dy = estimate_delta(hw->y, HIST(0).y, HIST(1).y, HIST(2).y);
+    *dx = hw->x - HIST(0).x;
+    *dy = hw->y - HIST(0).y;

      if ((priv->tap_state == TS_DRAG) || para->edge_motion_use_always)
          get_edge_speed(priv, hw, edge,&x_edge_speed,&y_edge_speed);
@@ -2118,7 +2117,7 @@ ComputeDeltas(SynapticsPrivate *priv, const struct 
SynapticsHwState *hw,
       * POLL_MS declaration. */
      delay = MIN(delay, POLL_MS);

-    if (priv->count_packet_finger<= 3) /* min. 3 packets, see get_delta() */
+    if (priv->count_packet_finger<= 1)
          goto out; /* skip the lot */

      if (priv->moving_state == MS_TRACKSTICK)
--
1.7.8.3


uhm, that commit seems a bit too simple. how does this affect other devices?

It doesn't feel any different to me, to be honest. It should affect all devices equally, too. Many people have been testing it and no one has mentioned a change in motion behavior.

I think estimate_delta() is mainly used for smoothing out the data using interpolation. It's used in other parts of the driver too. I think having the smoothing for pointer motion is unnecessary, though, since we have acceleration profiles. In other words, there's too much smoothing going on already, and dropping this doesn't cause a material difference in the feel of motion.

-- Chase
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to