From f66229ff4eec33caeb289136da39d3fcb8e2ac63 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch <daniel@gultsch.de> Date: Mon, 2 Oct 2023 11:03:08 +0200 Subject: [PATCH] fetch local description on its own executor --- .../xmpp/jingle/JingleRtpConnection.java | 2 +- .../xmpp/jingle/WebRTCWrapper.java | 52 ++++++++++--------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java index df1fb5b5b..13a8c1253 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java @@ -2376,7 +2376,7 @@ public class JingleRtpConnection extends AbstractJingleConnection } private void restartIce() { this.stateHistory.clear(); - this.webRTCWrapper.restartIce(); + this.webRTCWrapper.restartIceAsync(); } diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java index 906392d60..c9475003f 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java @@ -60,6 +60,8 @@ public class WebRTCWrapper { private static final String EXTENDED_LOGGING_TAG = WebRTCWrapper.class.getSimpleName(); private final ExecutorService executorService = Executors.newSingleThreadExecutor(); + private final ExecutorService localDescriptionExecutorService = + Executors.newSingleThreadExecutor(); private static final Set<String> HARDWARE_AEC_BLACKLIST = new ImmutableSet.Builder<String>() @@ -285,8 +287,8 @@ public class WebRTCWrapper { Preconditions.checkNotNull(media); Preconditions.checkArgument( media.size() > 0, "media can not be empty when initializing peer connection"); - final boolean setUseHardwareAcousticEchoCanceler = !HARDWARE_AEC_BLACKLIST.contains(Build.MODEL); - + final boolean setUseHardwareAcousticEchoCanceler = + !HARDWARE_AEC_BLACKLIST.contains(Build.MODEL); Log.d( Config.LOGTAG, String.format( @@ -445,21 +447,20 @@ public class WebRTCWrapper { requirePeerConnection().setConfiguration(buildConfiguration(iceServers)); } - void restartIce() { - executorService.execute( - () -> { - final PeerConnection peerConnection; - try { - peerConnection = requirePeerConnection(); - } catch (final PeerConnectionNotInitialized e) { - Log.w( - EXTENDED_LOGGING_TAG, - "PeerConnection vanished before we could execute restart"); - return; - } - setIsReadyToReceiveIceCandidates(false); - peerConnection.restartIce(); - }); + void restartIceAsync() { + this.execute(this::restartIce); + } + + private void restartIce() { + final PeerConnection peerConnection; + try { + peerConnection = requirePeerConnection(); + } catch (final PeerConnectionNotInitialized e) { + Log.w(EXTENDED_LOGGING_TAG, "PeerConnection vanished before we could execute restart"); + return; + } + setIsReadyToReceiveIceCandidates(false); + peerConnection.restartIce(); } public void setIsReadyToReceiveIceCandidates(final boolean ready) { @@ -632,12 +633,15 @@ public class WebRTCWrapper { } private ListenableFuture<SessionDescription> getLocalDescriptionFuture() { - return Futures.submit(() -> { - final SessionDescription description = requirePeerConnection().getLocalDescription(); - Log.d(EXTENDED_LOGGING_TAG, "local description:"); - logDescription(description); - return description; - },executorService); + return Futures.submit( + () -> { + final SessionDescription description = + requirePeerConnection().getLocalDescription(); + Log.d(EXTENDED_LOGGING_TAG, "local description:"); + logDescription(description); + return description; + }, + localDescriptionExecutorService); } @@ -790,7 +794,7 @@ public class WebRTCWrapper { } void execute(final Runnable command) { - executorService.execute(command); + this.executorService.execute(command); } public void switchSpeakerPhonePreference(AppRTCAudioManager.SpeakerPhonePreference preference) {