Add onTuneFailed when canceling tuning operation
Due to RadioTuner API documentation, onTuneFailed should be called
when a pending tuning operation is canceled. Therefore, a new
result value Canceled was added in broadcast radio HAL. The
onTuneFailed callback for pending tuning operations in default HAL
was implemented by adding whatIfCanceled function field in Task
struct in WorkerThread utils class.
Bug: 257337458
Test: atest RadioTunerTest#cancel_whenTune
Test: atest RadioTunerTest#cancel_whenSeek
Change-Id: I901ab2cc3561082e5f11a9f6c33db044fc9bc28b
diff --git a/broadcastradio/common/utils/WorkerThread.cpp b/broadcastradio/common/utils/WorkerThread.cpp
index dd87f53..43fd04a 100644
--- a/broadcastradio/common/utils/WorkerThread.cpp
+++ b/broadcastradio/common/utils/WorkerThread.cpp
@@ -18,14 +18,13 @@
namespace android {
-using std::chrono::milliseconds;
-using std::chrono::steady_clock;
using std::function;
using std::lock_guard;
using std::mutex;
-using std::priority_queue;
-using std::this_thread::sleep_for;
using std::unique_lock;
+using std::chrono::milliseconds;
+using std::chrono::steady_clock;
+using std::this_thread::sleep_for;
bool operator<(const WorkerThread::Task& lhs, const WorkerThread::Task& rhs) {
return lhs.when > rhs.when;
@@ -47,16 +46,26 @@
}
void WorkerThread::schedule(function<void()> task, milliseconds delay) {
+ auto cancelTask = []() {};
+ schedule(std::move(task), cancelTask, delay);
+}
+
+void WorkerThread::schedule(function<void()> task, function<void()> cancelTask,
+ milliseconds delay) {
auto when = steady_clock::now() + delay;
lock_guard<mutex> lk(mMut);
- mTasks.push(Task({when, task}));
+ mTasks.push(Task({when, std::move(task), std::move(cancelTask)}));
mCond.notify_one();
}
void WorkerThread::cancelAll() {
lock_guard<mutex> lk(mMut);
- priority_queue<Task>().swap(mTasks); // empty queue
+ while (!mTasks.empty()) {
+ auto task = mTasks.top();
+ task.onCanceled();
+ mTasks.pop();
+ }
}
void WorkerThread::threadLoop() {
diff --git a/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h b/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h
index 62bede6..457b57e 100644
--- a/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h
+++ b/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h
@@ -28,12 +28,15 @@
virtual ~WorkerThread();
void schedule(std::function<void()> task, std::chrono::milliseconds delay);
+ void schedule(std::function<void()> task, std::function<void()> cancelTask,
+ std::chrono::milliseconds delay);
void cancelAll();
private:
struct Task {
std::chrono::time_point<std::chrono::steady_clock> when;
std::function<void()> what;
+ std::function<void()> onCanceled;
};
friend bool operator<(const Task& lhs, const Task& rhs);