From 09993b83194e916497d81d77edc6777a09d6b544 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch 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 | 60 ++++++++++--------- 2 files changed, 33 insertions(+), 29 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 fb335ef93..87bf4bf98 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java @@ -2354,7 +2354,7 @@ public class JingleRtpConnection extends AbstractJingleConnection private void restartIce() { this.stateHistory.clear(); - this.webRTCWrapper.restartIce(); + this.webRTCWrapper.restartIceAsync(); } @Override 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 3c32f44a2..ba7e078f3 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/WebRTCWrapper.java @@ -14,6 +14,10 @@ import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; +import eu.siacs.conversations.Config; +import eu.siacs.conversations.services.AppRTCAudioManager; +import eu.siacs.conversations.services.XmppConnectionService; + import org.webrtc.AudioSource; import org.webrtc.AudioTrack; import org.webrtc.CandidatePairChangeEvent; @@ -38,7 +42,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Set; -import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; @@ -46,16 +49,14 @@ import java.util.concurrent.atomic.AtomicBoolean; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import eu.siacs.conversations.Config; -import eu.siacs.conversations.services.AppRTCAudioManager; -import eu.siacs.conversations.services.XmppConnectionService; - @SuppressWarnings("UnstableApiUsage") 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 HARDWARE_AEC_BLACKLIST = new ImmutableSet.Builder() @@ -260,7 +261,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( @@ -412,21 +414,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) { @@ -587,12 +588,15 @@ public class WebRTCWrapper { } private ListenableFuture 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); } public static void logDescription(final SessionDescription sessionDescription) { @@ -703,7 +707,7 @@ public class WebRTCWrapper { } void execute(final Runnable command) { - executorService.execute(command); + this.executorService.execute(command); } public void switchSpeakerPhonePreference(AppRTCAudioManager.SpeakerPhonePreference preference) {