Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fb5f9b86 authored by Philip Quinn's avatar Philip Quinn
Browse files

Update MotionPredictorBenchmark.

* Use realistic durations and moving events to ensure the model is
  fully exercised.
* The requested prediction time is only a target, and it is valid for
  predictions to fall short of it.

com.android.perftests.core (2 Tests)
[1/2] android.input.MotionPredictorBenchmark#timeRecordAndPredict: PASSED (8.392s)
	perfetto_file_path: /sdcard/test_results/android.input.MotionPredictorBenchmark_timeRecordAndPredict/PerfettoListener/perfetto_android.input.MotionPredictorBenchmark_timeRecordAndPredict-1.perfetto-trace
	timeRecordAndPredict_mean (ns): 84059
	timeRecordAndPredict_median (ns): 82093
	timeRecordAndPredict_min (ns): 77361
	timeRecordAndPredict_standardDeviation: 5402
[2/2] android.input.MotionPredictorBenchmark#timeCreatePredictor: PASSED (7.650s)
	perfetto_file_path: /sdcard/test_results/android.input.MotionPredictorBenchmark_timeCreatePredictor/PerfettoListener/perfetto_android.input.MotionPredictorBenchmark_timeCreatePredictor-1.perfetto-trace
	timeCreatePredictor_mean (ns): 104809
	timeCreatePredictor_median (ns): 105000
	timeCreatePredictor_min (ns): 101148
	timeCreatePredictor_standardDeviation: 2837

Bug: 167946763
Test: atest MotionPredictorBenchmark
Change-Id: I2861a2f377a34eff6571a6ecdc4a34c46fcd753b
parent e773b5b4
Loading
Loading
Loading
Loading
+17 −8
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4

import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -89,7 +90,6 @@ class MotionPredictorBenchmark {
    private val initialPropertyValue =
            SystemProperties.get("persist.input.enable_motion_prediction")

    private var eventTime = Duration.ofMillis(1)

    @Before
    fun setUp() {
@@ -109,22 +109,31 @@ class MotionPredictorBenchmark {
     */
    @Test
    fun timeRecordAndPredict() {
        val offset = Duration.ofMillis(1)
        val offset = Duration.ofMillis(20)
        var eventTime = Duration.ofMillis(0)
        val eventInterval = Duration.ofMillis(4) // 240 Hz

        var eventPosition = 0f
        val positionInterval = 10f

        val predictor = MotionPredictor(getPredictionContext(offset, /*enablePrediction=*/true))
        // ACTION_DOWN t=0 x=0 y=0
        predictor.record(getStylusMotionEvent(eventTime, ACTION_DOWN, /*x=*/0f, /*y=*/0f))
        predictor.record(getStylusMotionEvent(
            eventTime, ACTION_DOWN, /*x=*/eventPosition, /*y=*/eventPosition))

        val state = perfStatusReporter.getBenchmarkState()
        while (state.keepRunning()) {
            eventTime += Duration.ofMillis(1)
            eventTime += eventInterval
            eventPosition += positionInterval

            // Send MOVE event and then call .predict
            val moveEvent = getStylusMotionEvent(eventTime, ACTION_MOVE, /*x=*/1f, /*y=*/2f)
            val moveEvent = getStylusMotionEvent(
                eventTime, ACTION_MOVE, /*x=*/eventPosition, /*y=*/eventPosition)
            predictor.record(moveEvent)
            val predictionTime = eventTime + Duration.ofMillis(2)
            val predictionTime = eventTime + eventInterval
            val predicted = predictor.predict(predictionTime.toNanos())
            assertEquals(1, predicted.size)
            assertEquals((predictionTime + offset).toMillis(), predicted[0].eventTime)
            assertTrue(predicted[0].eventTime <= (predictionTime + offset).toMillis())
        }
    }

@@ -135,7 +144,7 @@ class MotionPredictorBenchmark {
    @Test
    fun timeCreatePredictor() {
        val context = getPredictionContext(
                /*offset=*/Duration.ofMillis(1), /*enablePrediction=*/true)
                /*offset=*/Duration.ofMillis(20), /*enablePrediction=*/true)

        val state = perfStatusReporter.getBenchmarkState()
        while (state.keepRunning()) {