diff --git a/audio/aidl/default/EffectThread.cpp b/audio/aidl/default/EffectThread.cpp index 024c0eaeed..4f8fb3c08e 100644 --- a/audio/aidl/default/EffectThread.cpp +++ b/audio/aidl/default/EffectThread.cpp @@ -34,13 +34,14 @@ EffectThread::~EffectThread() { }; RetCode EffectThread::createThread(std::shared_ptr 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); } } diff --git a/audio/aidl/default/include/effect-impl/EffectThread.h b/audio/aidl/default/include/effect-impl/EffectThread.h index 9b1a75bbc9..f9c6a315ec 100644 --- a/audio/aidl/default/include/effect-impl/EffectThread.h +++ b/audio/aidl/default/include/effect-impl/EffectThread.h @@ -35,7 +35,7 @@ class EffectThread { // called by effect implementation. RetCode createThread(std::shared_ptr 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 mThreadContext GUARDED_BY(mThreadMutex); std::thread mThread; int mPriority; + int mSleepTimeUs = kSleepTimeUs; // sleep time in micro-second std::string mName; RetCode handleStartStop(bool stop);