From 5bb78cba25643c89082f5be9606e9e5328e1d526 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 30 Jan 2019 11:52:00 -0500 Subject: [PATCH] Tune concurrency in call service. --- Signal/src/call/CallService.swift | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/Signal/src/call/CallService.swift b/Signal/src/call/CallService.swift index 76fc275ac..b3ea7c409 100644 --- a/Signal/src/call/CallService.swift +++ b/Signal/src/call/CallService.swift @@ -249,6 +249,9 @@ private class SignalCallData: NSObject { return callData?.call } + didSet { + AssertIsOnMainThread() + } } var peerConnectionClient: PeerConnectionClient? { get { @@ -256,6 +259,9 @@ private class SignalCallData: NSObject { return callData?.peerConnectionClient } + didSet { + AssertIsOnMainThread() + } } weak var localCaptureSession: AVCaptureSession? { @@ -264,6 +270,9 @@ private class SignalCallData: NSObject { return callData?.localCaptureSession } + didSet { + AssertIsOnMainThread() + } } var remoteVideoTrack: RTCVideoTrack? { @@ -272,6 +281,9 @@ private class SignalCallData: NSObject { return callData?.remoteVideoTrack } + didSet { + AssertIsOnMainThread() + } } var isRemoteVideoEnabled: Bool { get { @@ -282,6 +294,9 @@ private class SignalCallData: NSObject { } return callData.isRemoteVideoEnabled } + didSet { + AssertIsOnMainThread() + } } @objc public override init() { @@ -371,7 +386,8 @@ private class SignalCallData: NSObject { callRecord.save() call.callRecord = callRecord - let promise = getIceServers().then { iceServers -> Promise in + let promise = getIceServers() + .then { iceServers -> Promise in Logger.debug("got ice servers:\(iceServers) for call: \(call.identifiersForLogs)") guard self.call == call else { @@ -686,9 +702,8 @@ private class SignalCallData: NSObject { strongSelf.handleFailedCall(failedCall: newCall, error: timeout) }) - firstly { - getIceServers() - }.then { (iceServers: [RTCIceServer]) -> Promise in + getIceServers() + .then { (iceServers: [RTCIceServer]) -> Promise in // FIXME for first time call recipients I think we'll see mic/camera permission requests here, // even though, from the users perspective, no incoming call is yet visible. guard self.call == newCall else { @@ -1520,11 +1535,9 @@ private class SignalCallData: NSObject { * a list of servers, plus we have fallback servers hardcoded in the app. */ private func getIceServers() -> Promise<[RTCIceServer]> { - AssertIsOnMainThread() - return firstly { - accountManager.getTurnServerInfo() - }.map { turnServerInfo -> [RTCIceServer] in + self.accountManager.getTurnServerInfo() + .map(on: DispatchQueue.global()) { turnServerInfo -> [RTCIceServer] in Logger.debug("got turn server urls: \(turnServerInfo.urls)") return turnServerInfo.urls.map { url in @@ -1537,7 +1550,7 @@ private class SignalCallData: NSObject { return RTCIceServer(urlStrings: [url]) } } + [CallService.fallbackIceServer] - }.recover { (error: Error) -> Guarantee<[RTCIceServer]> in + }.recover(on: DispatchQueue.global()) { (error: Error) -> Guarantee<[RTCIceServer]> in Logger.error("fetching ICE servers failed with error: \(error)") Logger.warn("using fallback ICE Servers")