SyncEvent: modernize C++

And add unit test mediasyncevent_tests.

Test: atest mediasyncevent_tests
Bug: 283021652
Change-Id: I37711f4271c68042f178db9370549c0c3260ace8
diff --git a/services/audioflinger/timing/SyncEvent.h b/services/audioflinger/timing/SyncEvent.h
index 9912580..b5a3b40 100644
--- a/services/audioflinger/timing/SyncEvent.h
+++ b/services/audioflinger/timing/SyncEvent.h
@@ -16,43 +16,55 @@
 
 #pragma once
 
-namespace android {
+#include <functional>
+#include <mutex>
+
+#include <media/AudioSystem.h>
+#include <utils/RefBase.h>
+
+namespace android::audioflinger {
 
 class SyncEvent;
-
-typedef void (*sync_event_callback_t)(const wp<SyncEvent>& event) ;
+using SyncEventCallback = std::function<void(const wp<SyncEvent>& event)>;
 
 class SyncEvent : public RefBase {
 public:
     SyncEvent(AudioSystem::sync_event_t type,
               audio_session_t triggerSession,
               audio_session_t listenerSession,
-              sync_event_callback_t callBack,
+              const SyncEventCallback& callBack,
               const wp<RefBase>& cookie)
     : mType(type), mTriggerSession(triggerSession), mListenerSession(listenerSession),
-      mCallback(callBack), mCookie(cookie)
+      mCookie(cookie), mCallback(callBack)
     {}
 
-    virtual ~SyncEvent() {}
-
     void trigger() {
-        Mutex::Autolock _l(mLock);
-        if (mCallback) mCallback(wp<SyncEvent>(this));
+        std::lock_guard l(mLock);
+        if (mCallback) mCallback(wp<SyncEvent>::fromExisting(this));
     }
-    bool isCancelled() const { Mutex::Autolock _l(mLock); return (mCallback == NULL); }
-    void cancel() { Mutex::Autolock _l(mLock); mCallback = NULL; }
+
+    bool isCancelled() const {
+        std::lock_guard l(mLock);
+        return mCallback == nullptr;
+    }
+
+    void cancel() {
+        std::lock_guard l(mLock);
+        mCallback = nullptr;
+    }
+
     AudioSystem::sync_event_t type() const { return mType; }
     audio_session_t triggerSession() const { return mTriggerSession; }
     audio_session_t listenerSession() const { return mListenerSession; }
-    wp<RefBase> cookie() const { return mCookie; }
+    const wp<RefBase>& cookie() const { return mCookie; }
 
 private:
       const AudioSystem::sync_event_t mType;
       const audio_session_t mTriggerSession;
       const audio_session_t mListenerSession;
-      sync_event_callback_t mCallback;
       const wp<RefBase> mCookie;
-      mutable Mutex mLock;
+      mutable std::mutex mLock;
+      SyncEventCallback mCallback GUARDED_BY(mLock);
 };
 
-} // namespace android
+} // namespace android::audioflinger