From f6028813e24ca9f685f1386c75ee50d3e541b50e Mon Sep 17 00:00:00 2001 From: GG Bond Date: Sun, 3 Dec 2023 11:42:06 +0800 Subject: [PATCH] Limit CronetEngine to use 1 thread since we are totally async & non-blocking --- app/src/gms/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt | 2 ++ .../main/kotlin/com/hippo/ehviewer/cronet/CronetExtensions.kt | 4 +++- app/src/oss/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/gms/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt b/app/src/gms/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt index 4a33b8d43..246b5f2b1 100644 --- a/app/src/gms/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt +++ b/app/src/gms/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt @@ -1,5 +1,6 @@ package com.hippo.ehviewer.ktor +import com.hippo.ehviewer.cronet.cronetDispatcher import com.hippo.ehviewer.cronet.cronetHttpClient import com.hippo.ehviewer.cronet.cronetHttpClientExecutor import com.hippo.ehviewer.cronet.pool @@ -37,6 +38,7 @@ import org.chromium.net.UrlResponseInfo object CronetEngine : HttpClientEngineBase("Cronet") { override val config = HttpClientEngineConfig() + override val dispatcher = cronetDispatcher @InternalAPI override suspend fun execute(data: HttpRequestData): HttpResponseData { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/cronet/CronetExtensions.kt b/app/src/main/kotlin/com/hippo/ehviewer/cronet/CronetExtensions.kt index 39e66ad86..d714c00af 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/cronet/CronetExtensions.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/cronet/CronetExtensions.kt @@ -11,7 +11,9 @@ import kotlinx.coroutines.suspendCancellableCoroutine val pool = DirectByteBufferPool(32) -val cronetHttpClientExecutor = Dispatchers.IO.asExecutor() +// Limit thread to 1 since we are async & non-blocking +val cronetDispatcher = Dispatchers.IO.limitedParallelism(1) +val cronetHttpClientExecutor = cronetDispatcher.asExecutor() @Suppress("NewApi") suspend inline fun CronetRequest.awaitBodyFully(crossinline callback: (ByteBuffer) -> Unit) { diff --git a/app/src/oss/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt b/app/src/oss/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt index b8ce511a0..95f267c59 100644 --- a/app/src/oss/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt +++ b/app/src/oss/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt @@ -7,6 +7,7 @@ import android.net.http.UploadDataProvider import android.net.http.UploadDataSink import android.net.http.UrlRequest import android.net.http.UrlResponseInfo +import com.hippo.ehviewer.cronet.cronetDispatcher import com.hippo.ehviewer.cronet.cronetHttpClient import com.hippo.ehviewer.cronet.cronetHttpClientExecutor import com.hippo.ehviewer.cronet.pool @@ -39,6 +40,7 @@ import kotlinx.coroutines.suspendCancellableCoroutine object CronetEngine : HttpClientEngineBase("Cronet") { override val config = HttpClientEngineConfig() + override val dispatcher = cronetDispatcher @InternalAPI override suspend fun execute(data: HttpRequestData): HttpResponseData {