mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-02 00:17:41 +01:00
Reduce calls to sleep for WebSocket keep alives.
This commit is contained in:
@@ -95,7 +95,7 @@ class JobRunner extends Thread {
|
||||
PowerManager.WakeLock wakeLock = null;
|
||||
|
||||
try {
|
||||
wakeLock = WakeLockUtil.acquire(application, PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TIMEOUT, job.getId());
|
||||
wakeLock = WakeLockUtil.acquire(application, PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TIMEOUT, job.getFactoryKey());
|
||||
result = job.run();
|
||||
|
||||
if (job.isCanceled()) {
|
||||
@@ -110,7 +110,7 @@ class JobRunner extends Thread {
|
||||
return Job.Result.failure();
|
||||
} finally {
|
||||
if (wakeLock != null) {
|
||||
WakeLockUtil.release(wakeLock, job.getId());
|
||||
WakeLockUtil.release(wakeLock, job.getFactoryKey());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ object WebSocketDrainer {
|
||||
private val TAG = Log.tag(WebSocketDrainer::class.java)
|
||||
|
||||
private const val KEEP_ALIVE_TOKEN = "WebsocketStrategy"
|
||||
private const val WAKELOCK_PREFIX = "websocket-strategy-"
|
||||
private const val WAKELOCK_TAG = "websocket-strategy"
|
||||
|
||||
private val QUEUE_TIMEOUT = 30.seconds.inWholeMilliseconds
|
||||
|
||||
@@ -65,13 +65,12 @@ object WebSocketDrainer {
|
||||
websocketDrainTimeout = NO_NETWORK_WEBSOCKET_TIMEOUT
|
||||
}
|
||||
|
||||
val wakeLockTag = WAKELOCK_PREFIX + System.currentTimeMillis()
|
||||
val wakeLock = WakeLockUtil.acquire(AppDependencies.application, PowerManager.PARTIAL_WAKE_LOCK, websocketDrainTimeout + QUEUE_TIMEOUT, wakeLockTag)
|
||||
val wakeLock = WakeLockUtil.acquire(AppDependencies.application, PowerManager.PARTIAL_WAKE_LOCK, websocketDrainTimeout + QUEUE_TIMEOUT, WAKELOCK_TAG)
|
||||
|
||||
return try {
|
||||
drainAndProcess(websocketDrainTimeout, keepAliveToken)
|
||||
} finally {
|
||||
WakeLockUtil.release(wakeLock, wakeLockTag)
|
||||
WakeLockUtil.release(wakeLock, WAKELOCK_TAG)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -174,25 +174,21 @@ class SignalWebSocketHealthMonitor(
|
||||
Log.d(TAG, "[KeepAliveSender($id)] started")
|
||||
lastKeepAliveReceived = System.currentTimeMillis().milliseconds
|
||||
|
||||
var keepAliveSendTime = System.currentTimeMillis().milliseconds
|
||||
var keepAliveSentTime = System.currentTimeMillis().milliseconds
|
||||
var hasSentKeepAlive = false
|
||||
while (shouldKeepRunning && sendKeepAlives()) {
|
||||
try {
|
||||
val nextKeepAliveSendTime: Duration = keepAliveSendTime + KEEP_ALIVE_SEND_CADENCE
|
||||
sleepUntil(nextKeepAliveSendTime)
|
||||
sleepUntil(keepAliveSentTime + KEEP_ALIVE_SEND_CADENCE)
|
||||
|
||||
if (shouldKeepRunning && sendKeepAlives()) {
|
||||
keepAliveSendTime = System.currentTimeMillis().milliseconds
|
||||
webSocket?.sendKeepAlive()
|
||||
}
|
||||
|
||||
val responseRequiredTime: Duration = keepAliveSendTime + KEEP_ALIVE_TIMEOUT
|
||||
sleepUntil(responseRequiredTime)
|
||||
|
||||
if (shouldKeepRunning && sendKeepAlives()) {
|
||||
if (lastKeepAliveReceived < keepAliveSendTime) {
|
||||
Log.w(TAG, "Missed keep alive, last: ${lastKeepAliveReceived.inWholeMilliseconds} needed by: ${responseRequiredTime.inWholeMilliseconds}")
|
||||
if (hasSentKeepAlive && lastKeepAliveReceived < keepAliveSentTime) {
|
||||
Log.w(TAG, "Missed keep alive, last: ${lastKeepAliveReceived.inWholeMilliseconds} needed by: ${(keepAliveSentTime + KEEP_ALIVE_TIMEOUT).inWholeMilliseconds}")
|
||||
webSocket?.forceNewWebSocket()
|
||||
}
|
||||
|
||||
keepAliveSentTime = System.currentTimeMillis().milliseconds
|
||||
webSocket?.sendKeepAlive()
|
||||
hasSentKeepAlive = true
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
Log.w(TAG, e)
|
||||
|
||||
Reference in New Issue
Block a user