Move CallAudioWatchdog audio callbacks onto a background handler.
To avoid ANRs or janmk by invoking these on the main thread, move to a
background handler instead.
Flag: com.android.server.telecom.flags.enable_call_audio_watchdog
Test: re-run perfetto A/B test to verify no jank regression.
Bug: 390928121
Change-Id: I626f86dfe761c7bbd7a8260337130531a0a5b9b6
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 5cc868b..dbd33f7 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -490,6 +490,9 @@
private final ConnectionServiceFocusManager mConnectionSvrFocusMgr;
/* Handler tied to thread in which CallManager was initialized. */
private final Handler mHandler = new Handler(Looper.getMainLooper());
+ private final HandlerThread mHandlerThread = new HandlerThread("telecomAudioCallbacks",
+ android.os.Process.THREAD_PRIORITY_BACKGROUND);
+ private final Handler mAudioCallbackHandler;
private final EmergencyCallHelper mEmergencyCallHelper;
private final RoleManagerAdapter mRoleManagerAdapter;
private final VoipCallMonitor mVoipCallMonitor;
@@ -657,6 +660,8 @@
mEmergencyCallDiagnosticLogger = emergencyCallDiagnosticLogger;
mIncomingCallFilterGraphProvider = incomingCallFilterGraphProvider;
if (featureFlags.enableCallAudioWatchdog()) {
+ mHandlerThread.start();
+ mAudioCallbackHandler = new Handler(mHandlerThread.getLooper());
mCallAudioWatchDog = new CallAudioWatchdog(
mContext.getSystemService(AudioManager.class),
new CallAudioWatchdog.PhoneAccountRegistrarProxy() {
@@ -677,9 +682,10 @@
return -1;
}
}
- }, clockProxy, mHandler,
+ }, clockProxy, mAudioCallbackHandler,
featureFlags.telecomMetricsSupport() ? metricsController : null);
} else {
+ mAudioCallbackHandler = null;
mCallAudioWatchDog = null;
}