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

Commit 23dd8c87 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix flaky libvibratorservice benchmarks" into main

parents a07ce504 55c97d7e
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ private:
class HalCallbacks {
public:
    HalCallback next() {
        std::unique_lock<std::mutex> lock(mMutex);
        auto id = mCurrentId++;
        mPendingPromises[id] = std::promise<void>();
        mPendingFutures[id] = mPendingPromises[id].get_future(); // Can only be called once.
@@ -74,8 +75,12 @@ public:
    }

    void onComplete(int32_t id) {
        mPendingPromises[id].set_value();
        mPendingPromises.erase(id);
        std::unique_lock<std::mutex> lock(mMutex);
        auto promise = mPendingPromises.find(id);
        if (promise != mPendingPromises.end()) {
            promise->second.set_value();
            mPendingPromises.erase(promise);
        }
    }

    void waitForComplete(int32_t id) {
@@ -94,11 +99,15 @@ public:
            future.wait_for(VIBRATION_CALLBACK_TIMEOUT);
        }
        mPendingFutures.clear();
        {
            std::unique_lock<std::mutex> lock(mMutex);
            mPendingPromises.clear();
        }
    }

private:
    std::map<int32_t, std::promise<void>> mPendingPromises;
    std::mutex mMutex;
    std::map<int32_t, std::promise<void>> mPendingPromises GUARDED_BY(mMutex);
    std::map<int32_t, std::future<void>> mPendingFutures;
    int32_t mCurrentId;
};