Merge "Add sleep in EffectThread to avoid busy wait" am: ac46ddb969

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2478089

Change-Id: Ia72d2a551b6875f7f41128432405015857f2fc5a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Shunkai Yao 2023-03-10 02:47:03 +00:00 committed by Automerger Merge Worker
commit 94c87272b2
2 changed files with 7 additions and 4 deletions

View file

@ -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);
}
}

View file

@ -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);