private void track(float x, float y, long time) {
    float timeDelta = (float) (time - mLastEventTime);
    if (FloatUtils.fuzzyEquals(timeDelta, 0)) {
      // probably a duplicate event, ignore it. using a zero timeDelta will mess
      // up our velocity
      return;
    }
    mLastEventTime = time;

    mX.updateWithTouchAt(x, timeDelta);
    mY.updateWithTouchAt(y, timeDelta);
  }