mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-12 19:44:05 +09:00
btex: better multithreaded rendering
This commit is contained in:
@@ -12,6 +12,7 @@ import net.torvald.terrarum.btex.BTeXDocument.Companion.HREF_UNDERLINE_SHADOW
|
|||||||
import net.torvald.terrarum.btex.BTeXDocument.Companion.UNDERLINE_Y
|
import net.torvald.terrarum.btex.BTeXDocument.Companion.UNDERLINE_Y
|
||||||
import net.torvald.terrarum.ceilToInt
|
import net.torvald.terrarum.ceilToInt
|
||||||
import net.torvald.terrarum.concurrent.ThreadExecutor
|
import net.torvald.terrarum.concurrent.ThreadExecutor
|
||||||
|
import net.torvald.terrarum.concurrent.sliceEvenly
|
||||||
import net.torvald.terrarum.imagefont.TinyAlphNum
|
import net.torvald.terrarum.imagefont.TinyAlphNum
|
||||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.archivers.ClusteredFormatDOM
|
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.archivers.ClusteredFormatDOM
|
||||||
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.archivers.Clustfile
|
import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.archivers.Clustfile
|
||||||
@@ -227,7 +228,9 @@ class BTeXDocument : Disposable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val jobs = pages.indices.map { pageNum -> Callable {
|
// my experiment tells 4, 8, 16, 32 threads all perform the same
|
||||||
|
val THREAD_COUNT = Runtime.getRuntime().availableProcessors().div(2).coerceIn(1..4)
|
||||||
|
val jobs = pages.indices.sliceEvenly(THREAD_COUNT).map { Callable { it.forEach { pageNum ->
|
||||||
val page = pages[pageNum]
|
val page = pages[pageNum]
|
||||||
val pixmap = Pixmap(pageDimensionWidth, pageDimensionHeight, Pixmap.Format.RGBA8888).also {
|
val pixmap = Pixmap(pageDimensionWidth, pageDimensionHeight, Pixmap.Format.RGBA8888).also {
|
||||||
it.blending = Pixmap.Blending.SourceOver
|
it.blending = Pixmap.Blending.SourceOver
|
||||||
@@ -238,10 +241,9 @@ class BTeXDocument : Disposable {
|
|||||||
pagePixmaps[pageNum] = pixmap
|
pagePixmaps[pageNum] = pixmap
|
||||||
progressIndicator.getAndAdd(1)
|
progressIndicator.getAndAdd(1)
|
||||||
Unit
|
Unit
|
||||||
} }
|
} } }
|
||||||
|
|
||||||
// my experiment tells 4, 8, 16, 32 threads all perform the same
|
ThreadExecutor(THREAD_COUNT).also {
|
||||||
ThreadExecutor(Runtime.getRuntime().availableProcessors().div(2).coerceIn(1..4)).also {
|
|
||||||
it.renew()
|
it.renew()
|
||||||
it.submitAll(jobs)
|
it.submitAll(jobs)
|
||||||
it.join()
|
it.join()
|
||||||
|
|||||||
Reference in New Issue
Block a user