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

Commit 48dc9fce authored by f's avatar f
Browse files

Make states atomic and update comments

Bug: 166800618
Test: atest VtsHalBiometricsFingerprintTargetTest
Change-Id: I52ee6e8b6ddefdc972e803bcd81819f04061a570
parent 6fce94de
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ void Session::scheduleStateOrCrash(SessionState state) {

void Session::enterStateOrCrash(int cookie, SessionState state) {
    CHECK(mScheduledState == state);
    mCurrentState = mScheduledState;
    mCurrentState = state;
    mScheduledState = SessionState::IDLING;
    mCb->onStateChanged(cookie, mCurrentState);
}
+17 −2
Original line number Diff line number Diff line
@@ -82,13 +82,28 @@ class Session : public BnSession {
    // by calling ISessionCallback#onStateChanged.
    void enterIdling(int cookie);

    // The sensor and user IDs for which this session was created.
    int32_t mSensorId;
    int32_t mUserId;

    // Callback for talking to the framework. This callback must only be called from non-binder
    // threads to prevent nested binder calls and consequently a binder thread exhaustion.
    // Practically, it means that this callback should always be called from the worker thread.
    std::shared_ptr<ISessionCallback> mCb;

    // Module that communicates to the actual fingerprint hardware, keystore, TEE, etc. In real
    // life such modules typically consume a lot of memory and are slow to initialize. This is here
    // to showcase how such a module can be used within a Session without incurring the high
    // initialization costs every time a Session is constructed.
    FakeFingerprintEngine* mEngine;

    // Worker thread that allows to schedule tasks for asynchronous execution.
    WorkerThread* mWorker;
    SessionState mScheduledState;
    SessionState mCurrentState;

    // Simple representation of the session's state machine. These are atomic because they can be
    // modified from both the main and the worker threads.
    std::atomic<SessionState> mScheduledState;
    std::atomic<SessionState> mCurrentState;
};

}  // namespace aidl::android::hardware::biometrics::fingerprint