From ef3d3e6443f7768c686ad04fd3b749921c56ce4b Mon Sep 17 00:00:00 2001 From: tarsin Date: Sat, 4 Feb 2023 20:31:56 +0800 Subject: [PATCH] Introduce new SpiderQueenWorker stub --- .../java/com/hippo/ehviewer/spider/SpiderQueen.java | 8 ++++++++ .../com/hippo/ehviewer/spider/SqiderQueenWorker.kt | 13 +++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 app/src/main/java/com/hippo/ehviewer/spider/SqiderQueenWorker.kt diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index d0fefac03..3fd5d3587 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -68,6 +68,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import eu.kanade.tachiyomi.ui.reader.loader.PageLoader; +import kotlinx.coroutines.CoroutineScopeKt; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -131,6 +132,8 @@ public final class SpiderQueen implements Runnable { private volatile Thread mQueenThread; private ThreadPoolExecutor mWorkerPoolExecutor; private int mWorkerCount; + + private SpiderQueenWorker mWorkerScope; private volatile int[] mPageStateArray; // For download, when it go to mPageStateArray.size(), done private volatile int mDownloadPage = -1; @@ -149,6 +152,8 @@ public final class SpiderQueen implements Runnable { mDecodeIndexArray[i] = -1; } + mWorkerScope = new SpiderQueenWorker(); + mWorkerPoolExecutor = new ThreadPoolExecutor(mWorkerMaxCount, mWorkerMaxCount, 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>(), new PriorityThreadFactory(SpiderWorker.class.getSimpleName(), Process.THREAD_PRIORITY_BACKGROUND)); @@ -377,6 +382,9 @@ public final class SpiderQueen implements Runnable { synchronized (mWorkerLock) { mWorkerLock.notifyAll(); } + + CoroutineScopeKt.cancel(mWorkerScope, null); + mWorkerScope = null; } public int size() { diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SqiderQueenWorker.kt b/app/src/main/java/com/hippo/ehviewer/spider/SqiderQueenWorker.kt new file mode 100644 index 000000000..cfc5d2313 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/spider/SqiderQueenWorker.kt @@ -0,0 +1,13 @@ +package com.hippo.ehviewer.spider + +import com.hippo.ehviewer.Settings +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlin.coroutines.CoroutineContext + +class SpiderQueenWorker : CoroutineScope { + private val maxParallelismSize = Settings.getMultiThreadDownload().coerceIn(1, 10) + override val coroutineContext: CoroutineContext + get() = Dispatchers.IO.limitedParallelism(maxParallelismSize) + SupervisorJob() +}