summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/input/MotionPredictor.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/libs/input/MotionPredictor.cpp b/libs/input/MotionPredictor.cpp
index 0f889e8128..7d11ef2575 100644
--- a/libs/input/MotionPredictor.cpp
+++ b/libs/input/MotionPredictor.cpp
@@ -65,9 +65,8 @@ TfLiteMotionPredictorSample::Point convertPrediction(
MotionPredictor::MotionPredictor(nsecs_t predictionTimestampOffsetNanos, const char* modelPath,
std::function<bool()> checkMotionPredictionEnabled)
: mPredictionTimestampOffsetNanos(predictionTimestampOffsetNanos),
- mCheckMotionPredictionEnabled(std::move(checkMotionPredictionEnabled)),
- mModel(TfLiteMotionPredictorModel::create(modelPath == nullptr ? DEFAULT_MODEL_PATH
- : modelPath)) {}
+ mModelPath(modelPath == nullptr ? DEFAULT_MODEL_PATH : modelPath),
+ mCheckMotionPredictionEnabled(std::move(checkMotionPredictionEnabled)) {}
void MotionPredictor::record(const MotionEvent& event) {
if (!isPredictionAvailable(event.getDeviceId(), event.getSource())) {
@@ -76,6 +75,11 @@ void MotionPredictor::record(const MotionEvent& event) {
return;
}
+ // Initialise the model now that it's likely to be used.
+ if (!mModel) {
+ mModel = TfLiteMotionPredictorModel::create(mModelPath.c_str());
+ }
+
TfLiteMotionPredictorBuffers& buffers =
mDeviceBuffers.try_emplace(event.getDeviceId(), mModel->inputLength()).first->second;
@@ -130,6 +134,7 @@ std::vector<std::unique_ptr<MotionEvent>> MotionPredictor::predict(nsecs_t times
continue;
}
+ LOG_ALWAYS_FATAL_IF(!mModel);
buffer.copyTo(*mModel);
LOG_ALWAYS_FATAL_IF(!mModel->invoke());