AudioFlinger: Use std::any for the event cookie
This generalizes over the previous wp<RefBase> cookie.
Test: atest mediasyncevent_tests
Test: atest synchronizedrecordstate_tests
Test: atest MediaSyncEventTest
Bug: 288339104
Bug: 288943829
Merged-In: Iaa535450550681517613310a7043526be38c2aae
Change-Id: Iaa535450550681517613310a7043526be38c2aae
(cherry picked from commit 8f5bb22bd01674772f92b7b326fa0783cfafd99f)
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 1013a7a..2b25599 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -8877,7 +8877,7 @@
sp<audioflinger::SyncEvent> strongEvent = event.promote();
if (strongEvent != 0) {
- sp<RefBase> ptr = strongEvent->cookie().promote();
+ sp<RefBase> ptr = std::any_cast<const wp<RefBase>>(strongEvent->cookie()).promote();
if (ptr != 0) {
RecordTrack *recordTrack = (RecordTrack *)ptr.get();
recordTrack->handleSyncStartEvent(strongEvent);
diff --git a/services/audioflinger/timing/SyncEvent.h b/services/audioflinger/timing/SyncEvent.h
index b5a3b40..ededb26 100644
--- a/services/audioflinger/timing/SyncEvent.h
+++ b/services/audioflinger/timing/SyncEvent.h
@@ -16,6 +16,7 @@
#pragma once
+#include <any>
#include <functional>
#include <mutex>
@@ -33,7 +34,7 @@
audio_session_t triggerSession,
audio_session_t listenerSession,
const SyncEventCallback& callBack,
- const wp<RefBase>& cookie)
+ const std::any& cookie)
: mType(type), mTriggerSession(triggerSession), mListenerSession(listenerSession),
mCookie(cookie), mCallback(callBack)
{}
@@ -56,13 +57,13 @@
AudioSystem::sync_event_t type() const { return mType; }
audio_session_t triggerSession() const { return mTriggerSession; }
audio_session_t listenerSession() const { return mListenerSession; }
- const wp<RefBase>& cookie() const { return mCookie; }
+ const std::any& cookie() const { return mCookie; }
private:
const AudioSystem::sync_event_t mType;
const audio_session_t mTriggerSession;
const audio_session_t mListenerSession;
- const wp<RefBase> mCookie;
+ const std::any mCookie;
mutable std::mutex mLock;
SyncEventCallback mCallback GUARDED_BY(mLock);
};
diff --git a/services/audioflinger/timing/tests/mediasyncevent_tests.cpp b/services/audioflinger/timing/tests/mediasyncevent_tests.cpp
index 8a6cf68..ab2d88f 100644
--- a/services/audioflinger/timing/tests/mediasyncevent_tests.cpp
+++ b/services/audioflinger/timing/tests/mediasyncevent_tests.cpp
@@ -56,7 +56,7 @@
ASSERT_EQ(type, syncEvent->type());
ASSERT_EQ(triggerSession, syncEvent->triggerSession());
ASSERT_EQ(listenerSession, syncEvent->listenerSession());
- ASSERT_EQ(cookie, syncEvent->cookie());
+ ASSERT_EQ(cookie, std::any_cast<decltype(cookie)>(syncEvent->cookie()));
ASSERT_FALSE(triggered);
syncEvent->trigger();
diff --git a/services/audioflinger/timing/tests/synchronizedrecordstate_tests.cpp b/services/audioflinger/timing/tests/synchronizedrecordstate_tests.cpp
index e9e1edf..82df059 100644
--- a/services/audioflinger/timing/tests/synchronizedrecordstate_tests.cpp
+++ b/services/audioflinger/timing/tests/synchronizedrecordstate_tests.cpp
@@ -59,6 +59,7 @@
ASSERT_EQ(0, recordState.updateRecordFrames(1'000'000'000));
ASSERT_FALSE(triggered);
ASSERT_TRUE(syncEvent->isCancelled());
+ ASSERT_EQ(cookie, std::any_cast<decltype(cookie)>(syncEvent->cookie()));
// Check count down after track is complete.
syncEvent = sp<SyncEvent>::make(