summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Derek Wu <derekwu@google.com> 2024-04-02 01:30:21 -0700
committer Derek Wu <derekwu@google.com> 2024-04-03 02:06:33 -0700
commitae8dfc2ac6f1630b0022630f30dadf3f9f228a2a (patch)
tree7924f2771b1172f5f3c3db007be4f9b0f5a53301
parenta47327bcc96486f622bfef7062b682873f635282 (diff)
Update jerk thresholds for prediction pruning.
Jerk thresholds are higher, which means less predictions are pruned. Test: atest libinput_tests with local flag override to enable enable_prediction_pruning_via_jerk_thresholding. Test: atest CtsInputTestCases Test: atest MotionPredictorBenchmark MotionPredictorTest Test: Using stylus in a drawing app and seeing the predictions Bug: 266747654 Change-Id: I430c4cd79bfe62a339b6c14964d7d7a91facf6c2
-rw-r--r--data/etc/input/motion_predictor_config.xml8
-rw-r--r--libs/input/tests/MotionPredictor_test.cpp12
2 files changed, 9 insertions, 11 deletions
diff --git a/data/etc/input/motion_predictor_config.xml b/data/etc/input/motion_predictor_config.xml
index a20993f924..c3f2fedc71 100644
--- a/data/etc/input/motion_predictor_config.xml
+++ b/data/etc/input/motion_predictor_config.xml
@@ -33,11 +33,9 @@
<distance-noise-floor>0.2</distance-noise-floor>
<!-- The low and high jerk thresholds for prediction pruning.
- The jerk thresholds are based on normalized dt = 1 calculations, and
- are taken from Jetpacks MotionEventPredictor's KalmanPredictor
- implementation (using its ACCURATE_LOW_JANK and ACCURATE_HIGH_JANK).
+ The jerk thresholds are based on normalized dt = 1 calculations.
-->
- <low-jerk>0.1</low-jerk>
- <high-jerk>0.2</high-jerk>
+ <low-jerk>1.0</low-jerk>
+ <high-jerk>1.1</high-jerk>
</motion-predictor>
diff --git a/libs/input/tests/MotionPredictor_test.cpp b/libs/input/tests/MotionPredictor_test.cpp
index dc38feffd6..b8f1caa068 100644
--- a/libs/input/tests/MotionPredictor_test.cpp
+++ b/libs/input/tests/MotionPredictor_test.cpp
@@ -291,12 +291,12 @@ TEST_WITH_FLAGS(
MotionPredictor predictor(/*predictionTimestampOffsetNanos=*/0,
[]() { return true /*enable prediction*/; });
- // Jerk is medium (1.5 normalized, which is halfway between LOW_JANK and HIGH_JANK)
- predictor.record(getMotionEvent(DOWN, 0, 4, 20ms));
- predictor.record(getMotionEvent(MOVE, 0, 6.25, 30ms));
- predictor.record(getMotionEvent(MOVE, 0, 9.4, 40ms));
- predictor.record(getMotionEvent(MOVE, 0, 13.6, 50ms));
- predictor.record(getMotionEvent(MOVE, 0, 19, 60ms));
+ // Jerk is medium (1.05 normalized, which is halfway between LOW_JANK and HIGH_JANK)
+ predictor.record(getMotionEvent(DOWN, 0, 5.2, 20ms));
+ predictor.record(getMotionEvent(MOVE, 0, 11.5, 30ms));
+ predictor.record(getMotionEvent(MOVE, 0, 22, 40ms));
+ predictor.record(getMotionEvent(MOVE, 0, 37.75, 50ms));
+ predictor.record(getMotionEvent(MOVE, 0, 59.8, 60ms));
std::unique_ptr<MotionEvent> predicted = predictor.predict(82 * NSEC_PER_MSEC);
EXPECT_NE(nullptr, predicted);
// Halfway between LOW_JANK and HIGH_JANK means that half of the predictions