AudioPolicyService: Make device effect init synchronous

This initialization is done prior to exposing the AF and APS
to ServiceManager to ensure consistent state and avoid
nondeterministic bugs.

AudioPolicyService::onAudioSystemReady() is called
during audioserver initialization when both AF and APS
are available to create internal audio client objects.

Test: atest CtsMediaAudioTestCases
Bug: 319515492
Merged-In: Ie6e0817c830da51e9b722b17ebd54f005b6a6055
Change-Id: Ie6e0817c830da51e9b722b17ebd54f005b6a6055
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index aed6458..9ce379c 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -312,9 +312,16 @@
         }
     }
     AudioSystem::audioPolicyReady();
-    // AudioFlinger will handle effect creation and register these effects on audio_policy
-    // service. Hence, audio_policy service must be ready.
-    audioPolicyEffects->setDefaultDeviceEffects();
+}
+
+void AudioPolicyService::onAudioSystemReady() {
+    sp<AudioPolicyEffects> audioPolicyEffects;
+    {
+        audio_utils::lock_guard _l(mMutex);
+
+        audioPolicyEffects = mAudioPolicyEffects;
+    }
+    audioPolicyEffects->initDefaultDeviceEffects();
 }
 
 void AudioPolicyService::unloadAudioPolicyManager()