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

Commit eae5c56f authored by Shunkai Yao's avatar Shunkai Yao
Browse files

Add sleep in EffectThread to avoid busy wait

Bug: 261129656
Test: Enable AIDL and run YTM on pixel phone
Change-Id: If7ea5324b8a884e8f07b6855b70cb33b4c7868e4
parent b862e6e2
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -34,13 +34,14 @@ EffectThread::~EffectThread() {
};

RetCode EffectThread::createThread(std::shared_ptr<EffectContext> context, const std::string& name,
                                   const int priority) {
                                   int priority, int sleepUs /* kSleepTimeUs */) {
    if (mThread.joinable()) {
        LOG(WARNING) << __func__ << " thread already created, no-op";
        return RetCode::SUCCESS;
    }
    mName = name;
    mPriority = priority;
    mSleepTimeUs = sleepUs;
    {
        std::lock_guard lg(mThreadMutex);
        mThreadContext = std::move(context);
@@ -134,7 +135,7 @@ void EffectThread::process_l() {
        LOG(DEBUG) << __func__ << " done processing, effect consumed " << status.fmqConsumed
                   << " produced " << status.fmqProduced;
    } else {
        // TODO: maybe add some sleep here to avoid busy waiting
        usleep(mSleepTimeUs);
    }
}

+4 −2
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ class EffectThread {

    // called by effect implementation.
    RetCode createThread(std::shared_ptr<EffectContext> context, const std::string& name,
                         const int priority = ANDROID_PRIORITY_URGENT_AUDIO);
                         int priority = ANDROID_PRIORITY_URGENT_AUDIO, int sleepUs = kSleepTimeUs);
    RetCode destroyThread();
    RetCode startThread();
    RetCode stopThread();
@@ -72,7 +72,8 @@ class EffectThread {
    virtual void process_l() REQUIRES(mThreadMutex);

  private:
    const int kMaxTaskNameLen = 15;
    static constexpr int kMaxTaskNameLen = 15;
    static constexpr int kSleepTimeUs = 2000;  // in micro-second
    std::mutex mThreadMutex;
    std::condition_variable mCv;
    bool mExit GUARDED_BY(mThreadMutex) = false;
@@ -80,6 +81,7 @@ class EffectThread {
    std::shared_ptr<EffectContext> mThreadContext GUARDED_BY(mThreadMutex);
    std::thread mThread;
    int mPriority;
    int mSleepTimeUs = kSleepTimeUs;  // sleep time in micro-second
    std::string mName;

    RetCode handleStartStop(bool stop);