diff --git a/kyo-bench/src/main/scala/kyo/bench/BaseBench.scala b/kyo-bench/src/main/scala/kyo/bench/BaseBench.scala new file mode 100644 index 000000000..b6076157b --- /dev/null +++ b/kyo-bench/src/main/scala/kyo/bench/BaseBench.scala @@ -0,0 +1,21 @@ +package kyo.bench + +import org.openjdk.jmh.annotations.* + +@State(Scope.Benchmark) +@Fork( + value = 1, + jvmArgs = Array( + "-XX:+UnlockExperimentalVMOptions", + "-XX:-DoJVMTIVirtualThreadTransitions", + "-Dcom.sun.management.jmxremote", + "-Dcom.sun.management.jmxremote.port=1099", + "-Dcom.sun.management.jmxremote.authenticate=false", + "-Dcom.sun.management.jmxremote.ssl=false" + ), + jvmArgsPrepend = Array( + "--add-opens=java.base/java.lang=ALL-UNNAMED" + ) +) +@BenchmarkMode(Array(Mode.Throughput)) +class BaseBench diff --git a/kyo-bench/src/main/scala/kyo/bench/ChunkBench.scala b/kyo-bench/src/main/scala/kyo/bench/ChunkBench.scala index 082843078..cdc08e2e0 100644 --- a/kyo-bench/src/main/scala/kyo/bench/ChunkBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/ChunkBench.scala @@ -8,7 +8,7 @@ import scala.reflect.ClassTag import scala.util.Random import zio.Chunk as ZChunk -class ChunkBench extends Bench(()): +class ChunkBench extends BaseBench: @Param(Array("1024", "1048576")) var size: Int = uninitialized diff --git a/kyo-bench/src/main/scala/kyo/bench/MtlBench.scala b/kyo-bench/src/main/scala/kyo/bench/MtlBench.scala index 93badf019..7b4b0a462 100644 --- a/kyo-bench/src/main/scala/kyo/bench/MtlBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/MtlBench.scala @@ -6,7 +6,7 @@ case class EnvValue(config: String) case class Event(name: String) case class State(value: Int) -class MtlBench extends Bench(()): +class MtlBench extends BaseBench: val loops = (1 to 1000).toList diff --git a/kyo-bench/src/main/scala/kyo/bench/TagsBench.scala b/kyo-bench/src/main/scala/kyo/bench/TagsBench.scala index 29d3977b3..62963b501 100644 --- a/kyo-bench/src/main/scala/kyo/bench/TagsBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/TagsBench.scala @@ -2,7 +2,7 @@ package kyo.bench import org.openjdk.jmh.annotations.Benchmark -class TagsBench extends Bench(()): +class TagsBench extends BaseBench: class Super class Sub1 extends Super diff --git a/kyo-bench/src/main/scala/kyo/bench/TypeMapBench.scala b/kyo-bench/src/main/scala/kyo/bench/TypeMapBench.scala index 9c684a234..74695340c 100644 --- a/kyo-bench/src/main/scala/kyo/bench/TypeMapBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/TypeMapBench.scala @@ -10,7 +10,7 @@ import scala.compiletime.uninitialized import zio.ZEnvironment // Based on: https://github.com/zio/zio/blob/series/2.x/benchmarks/src/main/scala/zio/ZEnvironmentBenchmark.scala -class TypeMapBench extends Bench(()): +class TypeMapBench extends BaseBench: import BenchmarkedEnvironment.* var zioEnv: ZEnvironment[Env] = uninitialized diff --git a/kyo-bench/src/main/scala/kyo/bench/Bench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/ArenaBench.scala similarity index 79% rename from kyo-bench/src/main/scala/kyo/bench/Bench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/ArenaBench.scala index cd885b9a5..68d391b50 100644 --- a/kyo-bench/src/main/scala/kyo/bench/Bench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/ArenaBench.scala @@ -1,25 +1,10 @@ -package kyo.bench +package kyo.bench.arena import WarmupJITProfile.* +import kyo.bench.BaseBench import org.openjdk.jmh.annotations.* -@State(Scope.Benchmark) -@Fork( - value = 1, - jvmArgs = Array( - "-XX:+UnlockExperimentalVMOptions", - "-XX:-DoJVMTIVirtualThreadTransitions", - "-Dcom.sun.management.jmxremote", - "-Dcom.sun.management.jmxremote.port=1099", - "-Dcom.sun.management.jmxremote.authenticate=false", - "-Dcom.sun.management.jmxremote.ssl=false" - ), - jvmArgsPrepend = Array( - "--add-opens=java.base/java.lang=ALL-UNNAMED" - ) -) -@BenchmarkMode(Array(Mode.Throughput)) -abstract class Bench[A](val expectedResult: A): +abstract class ArenaBench[A](val expectedResult: A) extends BaseBench: private var finalizers: List[() => Unit] = Nil @TearDown @@ -45,11 +30,11 @@ abstract class Bench[A](val expectedResult: A): kyo.KyoSchedulerIORuntime.global else cats.effect.unsafe.implicits.global -end Bench +end ArenaBench -object Bench: +object ArenaBench: - abstract class Base[A](expectedResult: A) extends Bench[A](expectedResult): + abstract class Base[A](expectedResult: A) extends ArenaBench[A](expectedResult): def zioBench(): zio.UIO[A] def kyoBenchFiber(): kyo.<[A, kyo.Async & kyo.Abort[Throwable]] = kyoBench() def kyoBench(): kyo.<[A, kyo.IO] @@ -95,4 +80,4 @@ object Bench: zioRuntime.run(zioBench()).getOrThrow() ) end SyncAndFork -end Bench +end ArenaBench diff --git a/kyo-bench/src/main/scala/kyo/bench/BatchBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/BatchBench.scala similarity index 96% rename from kyo-bench/src/main/scala/kyo/bench/BatchBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/BatchBench.scala index e6c7a86ea..80a295cdc 100644 --- a/kyo-bench/src/main/scala/kyo/bench/BatchBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/BatchBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class BatchBench extends Bench.SyncAndFork(5050): +class BatchBench extends ArenaBench.SyncAndFork(5050): val count = 100 diff --git a/kyo-bench/src/main/scala/kyo/bench/BlockingBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/BlockingBench.scala similarity index 85% rename from kyo-bench/src/main/scala/kyo/bench/BlockingBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/BlockingBench.scala index 347f0404c..ae30e4b0d 100644 --- a/kyo-bench/src/main/scala/kyo/bench/BlockingBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/BlockingBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import java.util.concurrent.locks.LockSupport -class BlockingBench extends Bench.ForkOnly(()): +class BlockingBench extends ArenaBench.ForkOnly(()): def block(): Unit = LockSupport.parkNanos(100000) // 0.1 ms diff --git a/kyo-bench/src/main/scala/kyo/bench/BlockingContentionBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/BlockingContentionBench.scala similarity index 89% rename from kyo-bench/src/main/scala/kyo/bench/BlockingContentionBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/BlockingContentionBench.scala index c92a104da..a85b29dc1 100644 --- a/kyo-bench/src/main/scala/kyo/bench/BlockingContentionBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/BlockingContentionBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import java.util.concurrent.locks.LockSupport -class BlockingContentionBench extends Bench.ForkOnly(()): +class BlockingContentionBench extends ArenaBench.ForkOnly(()): val concurrency = Runtime.getRuntime().availableProcessors() * 30 diff --git a/kyo-bench/src/main/scala/kyo/bench/BroadFlatMapBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/BroadFlatMapBench.scala similarity index 90% rename from kyo-bench/src/main/scala/kyo/bench/BroadFlatMapBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/BroadFlatMapBench.scala index 553c51683..7076c9e2b 100644 --- a/kyo-bench/src/main/scala/kyo/bench/BroadFlatMapBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/BroadFlatMapBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.* -class BroadFlatMapBench extends Bench.SyncAndFork(BigInt(610)): +class BroadFlatMapBench extends ArenaBench.SyncAndFork(BigInt(610)): val depth = 15 diff --git a/kyo-bench/src/main/scala/kyo/bench/CollectBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/CollectBench.scala similarity index 84% rename from kyo-bench/src/main/scala/kyo/bench/CollectBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/CollectBench.scala index 040e60bde..5ff0b8166 100644 --- a/kyo-bench/src/main/scala/kyo/bench/CollectBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/CollectBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class CollectBench extends Bench.SyncAndFork(Seq.fill(1000)(1)): +class CollectBench extends ArenaBench.SyncAndFork(Seq.fill(1000)(1)): val count = 1000 diff --git a/kyo-bench/src/main/scala/kyo/bench/CollectParBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/CollectParBench.scala similarity index 85% rename from kyo-bench/src/main/scala/kyo/bench/CollectParBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/CollectParBench.scala index 84dec1ff4..24aeecd02 100644 --- a/kyo-bench/src/main/scala/kyo/bench/CollectParBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/CollectParBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class CollectParBench extends Bench.ForkOnly(Seq.fill(1000)(1)): +class CollectParBench extends ArenaBench.ForkOnly(Seq.fill(1000)(1)): val count = 1000 val kyoTasks = List.fill(count)(kyo.IO(1)) diff --git a/kyo-bench/src/main/scala/kyo/bench/CountdownLatchBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/CountdownLatchBench.scala similarity index 93% rename from kyo-bench/src/main/scala/kyo/bench/CountdownLatchBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/CountdownLatchBench.scala index 646bbf7e6..a829b1644 100644 --- a/kyo-bench/src/main/scala/kyo/bench/CountdownLatchBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/CountdownLatchBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class CountdownLatchBench extends Bench.ForkOnly(0): +class CountdownLatchBench extends ArenaBench.ForkOnly(0): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/DeepBindBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/DeepBindBench.scala similarity index 91% rename from kyo-bench/src/main/scala/kyo/bench/DeepBindBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/DeepBindBench.scala index 599492259..989f2cbf5 100644 --- a/kyo-bench/src/main/scala/kyo/bench/DeepBindBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/DeepBindBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class DeepBindBench extends Bench.SyncAndFork(()): +class DeepBindBench extends ArenaBench.SyncAndFork(()): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/DeepBindMapBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/DeepBindMapBench.scala similarity index 96% rename from kyo-bench/src/main/scala/kyo/bench/DeepBindMapBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/DeepBindMapBench.scala index 1d5345797..84a468404 100644 --- a/kyo-bench/src/main/scala/kyo/bench/DeepBindMapBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/DeepBindMapBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class DeepBindMapBench extends Bench.SyncAndFork(10001): +class DeepBindMapBench extends ArenaBench.SyncAndFork(10001): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/EnqueueDequeueBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/EnqueueDequeueBench.scala similarity index 93% rename from kyo-bench/src/main/scala/kyo/bench/EnqueueDequeueBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/EnqueueDequeueBench.scala index 5d7e21395..fc55ac6a0 100644 --- a/kyo-bench/src/main/scala/kyo/bench/EnqueueDequeueBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/EnqueueDequeueBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class EnqueueDequeueBench extends Bench.ForkOnly(()): +class EnqueueDequeueBench extends ArenaBench.ForkOnly(()): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/FailureBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/FailureBench.scala similarity index 96% rename from kyo-bench/src/main/scala/kyo/bench/FailureBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/FailureBench.scala index 3162a37e9..e045323fd 100644 --- a/kyo-bench/src/main/scala/kyo/bench/FailureBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/FailureBench.scala @@ -1,4 +1,4 @@ -package kyo.bench +package kyo.bench.arena class Ex1 extends Exception derives CanEqual object Ex1 extends Ex1 @@ -7,7 +7,7 @@ object Ex2 extends Ex2 class Ex3 extends Exception derives CanEqual object Ex3 extends Ex3 -class FailureBench extends Bench.SyncAndFork[Either[Ex1 | Ex2, Int]](Left(Ex2)): +class FailureBench extends ArenaBench.SyncAndFork[Either[Ex1 | Ex2, Int]](Left(Ex2)): val depth = 100 diff --git a/kyo-bench/src/main/scala/kyo/bench/ForkChainedBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/ForkChainedBench.scala similarity index 94% rename from kyo-bench/src/main/scala/kyo/bench/ForkChainedBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/ForkChainedBench.scala index a1a08fdf5..b39f8644e 100644 --- a/kyo-bench/src/main/scala/kyo/bench/ForkChainedBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/ForkChainedBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.* -class ForkChainedBench extends Bench.ForkOnly(0): +class ForkChainedBench extends ArenaBench.ForkOnly(0): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/ForkJoinBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/ForkJoinBench.scala similarity index 92% rename from kyo-bench/src/main/scala/kyo/bench/ForkJoinBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/ForkJoinBench.scala index 4462b46be..be9681e61 100644 --- a/kyo-bench/src/main/scala/kyo/bench/ForkJoinBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/ForkJoinBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.* -class ForkJoinBench extends Bench.ForkOnly(()): +class ForkJoinBench extends ArenaBench.ForkOnly(()): val depth = 10000 val range = (0 until depth).toList diff --git a/kyo-bench/src/main/scala/kyo/bench/ForkJoinContentionBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/ForkJoinContentionBench.scala similarity index 94% rename from kyo-bench/src/main/scala/kyo/bench/ForkJoinContentionBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/ForkJoinContentionBench.scala index 02fe79bc0..122316a44 100644 --- a/kyo-bench/src/main/scala/kyo/bench/ForkJoinContentionBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/ForkJoinContentionBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.* -class ForkJoinContentionBench extends Bench.ForkOnly(()): +class ForkJoinContentionBench extends ArenaBench.ForkOnly(()): val depth = 1000 val parallism = Runtime.getRuntime().availableProcessors() diff --git a/kyo-bench/src/main/scala/kyo/bench/ForkManyBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/ForkManyBench.scala similarity index 96% rename from kyo-bench/src/main/scala/kyo/bench/ForkManyBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/ForkManyBench.scala index f13b7ce3b..3579a45ad 100644 --- a/kyo-bench/src/main/scala/kyo/bench/ForkManyBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/ForkManyBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.* -class ForkManyBench extends Bench.ForkOnly(0): +class ForkManyBench extends ArenaBench.ForkOnly(0): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/ForkSpawnBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/ForkSpawnBench.scala similarity index 96% rename from kyo-bench/src/main/scala/kyo/bench/ForkSpawnBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/ForkSpawnBench.scala index e51a71b1c..d2fd9f243 100644 --- a/kyo-bench/src/main/scala/kyo/bench/ForkSpawnBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/ForkSpawnBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.* -class ForkSpawnBench extends Bench.ForkOnly(()): +class ForkSpawnBench extends ArenaBench.ForkOnly(()): val depth = 5 val width = 10 diff --git a/kyo-bench/src/main/scala/kyo/bench/HttpClientBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/HttpClientBench.scala similarity index 93% rename from kyo-bench/src/main/scala/kyo/bench/HttpClientBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/HttpClientBench.scala index 570d148ad..eb9c907fe 100644 --- a/kyo-bench/src/main/scala/kyo/bench/HttpClientBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/HttpClientBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.http4s.ember.client.EmberClientBuilder -class HttpClientBench extends Bench.ForkOnly("pong"): +class HttpClientBench extends ArenaBench.ForkOnly("pong"): override lazy val zioRuntimeLayer = super.zioRuntimeLayer.merge(zio.http.Client.default) diff --git a/kyo-bench/src/main/scala/kyo/bench/HttpClientContentionBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/HttpClientContentionBench.scala similarity index 93% rename from kyo-bench/src/main/scala/kyo/bench/HttpClientContentionBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/HttpClientContentionBench.scala index 5c5308bf5..1ece58b21 100644 --- a/kyo-bench/src/main/scala/kyo/bench/HttpClientContentionBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/HttpClientContentionBench.scala @@ -1,9 +1,9 @@ -package kyo.bench +package kyo.bench.arena import org.http4s.ember.client.EmberClientBuilder class HttpClientContentionBench - extends Bench.ForkOnly(Seq.fill(Runtime.getRuntime().availableProcessors())("pong")): + extends ArenaBench.ForkOnly(Seq.fill(Runtime.getRuntime().availableProcessors())("pong")): override val zioRuntimeLayer = super.zioRuntimeLayer.merge(zio.http.Client.default) val concurrency = Runtime.getRuntime().availableProcessors() diff --git a/kyo-bench/src/main/scala/kyo/bench/LoggingBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/LoggingBench.scala similarity index 93% rename from kyo-bench/src/main/scala/kyo/bench/LoggingBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/LoggingBench.scala index d99575eed..e66eb31f4 100644 --- a/kyo-bench/src/main/scala/kyo/bench/LoggingBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/LoggingBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class LoggingBench extends Bench.SyncAndFork(()): +class LoggingBench extends ArenaBench.SyncAndFork(()): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/NarrowBindBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/NarrowBindBench.scala similarity index 89% rename from kyo-bench/src/main/scala/kyo/bench/NarrowBindBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/NarrowBindBench.scala index 7904d431a..a3a285020 100644 --- a/kyo-bench/src/main/scala/kyo/bench/NarrowBindBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/NarrowBindBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class NarrowBindBench extends Bench.SyncAndFork(10000): +class NarrowBindBench extends ArenaBench.SyncAndFork(10000): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/NarrowBindMapBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/NarrowBindMapBench.scala similarity index 94% rename from kyo-bench/src/main/scala/kyo/bench/NarrowBindMapBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/NarrowBindMapBench.scala index abfa8b91d..b505802c1 100644 --- a/kyo-bench/src/main/scala/kyo/bench/NarrowBindMapBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/NarrowBindMapBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class NarrowBindMapBench extends Bench.SyncAndFork(10000): +class NarrowBindMapBench extends ArenaBench.SyncAndFork(10000): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/PingPongBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/PingPongBench.scala similarity index 97% rename from kyo-bench/src/main/scala/kyo/bench/PingPongBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/PingPongBench.scala index ce1cb2f27..53ccbfa82 100644 --- a/kyo-bench/src/main/scala/kyo/bench/PingPongBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/PingPongBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class PingPongBench extends Bench.ForkOnly(()): +class PingPongBench extends ArenaBench.ForkOnly(()): val depth = 1000 diff --git a/kyo-bench/src/main/scala/kyo/bench/ProducerConsumerBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/ProducerConsumerBench.scala similarity index 95% rename from kyo-bench/src/main/scala/kyo/bench/ProducerConsumerBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/ProducerConsumerBench.scala index 1bfc22afb..f483f3b16 100644 --- a/kyo-bench/src/main/scala/kyo/bench/ProducerConsumerBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/ProducerConsumerBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.Benchmark -class ProducerConsumerBench extends Bench.ForkOnly(()): +class ProducerConsumerBench extends ArenaBench.ForkOnly(()): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/RandomBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/RandomBench.scala similarity index 95% rename from kyo-bench/src/main/scala/kyo/bench/RandomBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/RandomBench.scala index 9c7591676..3f78caf78 100644 --- a/kyo-bench/src/main/scala/kyo/bench/RandomBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/RandomBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class RandomBench extends Bench.SyncAndFork(()): +class RandomBench extends ArenaBench.SyncAndFork(()): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/Registry.scala b/kyo-bench/src/main/scala/kyo/bench/arena/Registry.scala similarity index 91% rename from kyo-bench/src/main/scala/kyo/bench/Registry.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/Registry.scala index 130d7a053..4c10d1299 100644 --- a/kyo-bench/src/main/scala/kyo/bench/Registry.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/Registry.scala @@ -1,4 +1,4 @@ -package kyo.bench +package kyo.bench.arena import java.io.BufferedReader import java.io.File @@ -8,7 +8,7 @@ import scala.jdk.CollectionConverters.* object Registry: - def loadAll(): Seq[Bench[?]] = + def loadAll(): Seq[ArenaBench[?]] = val packageName = this.getClass.getPackage.getName val classes = findClasses(packageName) @@ -20,7 +20,7 @@ object Registry: val constructor = cls.getConstructors.find(_.getParameterCount == 0) constructor match case Some(ctor) => - ctor.newInstance().asInstanceOf[Bench[?]] + ctor.newInstance().asInstanceOf[ArenaBench[?]] case None => kyo.bug(s"Class ${cls.getSimpleName} does not have an empty constructor") end match diff --git a/kyo-bench/src/main/scala/kyo/bench/RendezvousBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/RendezvousBench.scala similarity index 98% rename from kyo-bench/src/main/scala/kyo/bench/RendezvousBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/RendezvousBench.scala index 818c80764..24f209c31 100644 --- a/kyo-bench/src/main/scala/kyo/bench/RendezvousBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/RendezvousBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.* -class RendezvousBench extends Bench.ForkOnly(10000 * (10000 + 1) / 2): +class RendezvousBench extends ArenaBench.ForkOnly(10000 * (10000 + 1) / 2): given canEqualNull[A]: CanEqual[A, A | Null] = CanEqual.derived diff --git a/kyo-bench/src/main/scala/kyo/bench/SchedulingBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/SchedulingBench.scala similarity index 95% rename from kyo-bench/src/main/scala/kyo/bench/SchedulingBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/SchedulingBench.scala index bd9f95d48..e39c4363b 100644 --- a/kyo-bench/src/main/scala/kyo/bench/SchedulingBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/SchedulingBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class SchedulingBench extends Bench.ForkOnly(1001000): +class SchedulingBench extends ArenaBench.ForkOnly(1001000): val depth = 1000 val range = List.range(0, depth) diff --git a/kyo-bench/src/main/scala/kyo/bench/SemaphoreBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/SemaphoreBench.scala similarity index 93% rename from kyo-bench/src/main/scala/kyo/bench/SemaphoreBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/SemaphoreBench.scala index 06b32d787..66662773d 100644 --- a/kyo-bench/src/main/scala/kyo/bench/SemaphoreBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/SemaphoreBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.Benchmark -class SemaphoreBench extends Bench.ForkOnly(()): +class SemaphoreBench extends ArenaBench.ForkOnly(()): val depth = 10000 diff --git a/kyo-bench/src/main/scala/kyo/bench/SemaphoreContentionBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/SemaphoreContentionBench.scala similarity index 96% rename from kyo-bench/src/main/scala/kyo/bench/SemaphoreContentionBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/SemaphoreContentionBench.scala index 42601d8aa..be0f52412 100644 --- a/kyo-bench/src/main/scala/kyo/bench/SemaphoreContentionBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/SemaphoreContentionBench.scala @@ -1,8 +1,8 @@ -package kyo.bench +package kyo.bench.arena import org.openjdk.jmh.annotations.* -class SemaphoreContentionBench extends Bench.ForkOnly(()): +class SemaphoreContentionBench extends ArenaBench.ForkOnly(()): val permits = 10 val parallism = 100 diff --git a/kyo-bench/src/main/scala/kyo/bench/StateBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/StateBench.scala similarity index 93% rename from kyo-bench/src/main/scala/kyo/bench/StateBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/StateBench.scala index 2f80fa3a3..18ad3a425 100644 --- a/kyo-bench/src/main/scala/kyo/bench/StateBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/StateBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class StateBench extends Bench.SyncAndFork(0): +class StateBench extends ArenaBench.SyncAndFork(0): val n = 1000 diff --git a/kyo-bench/src/main/scala/kyo/bench/StateMapBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/StateMapBench.scala similarity index 93% rename from kyo-bench/src/main/scala/kyo/bench/StateMapBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/StateMapBench.scala index f6b8359e4..51f51e796 100644 --- a/kyo-bench/src/main/scala/kyo/bench/StateMapBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/StateMapBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class StateMapBench extends Bench.SyncAndFork(1000): +class StateMapBench extends ArenaBench.SyncAndFork(1000): val n = 1000 diff --git a/kyo-bench/src/main/scala/kyo/bench/StreamBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/StreamBench.scala similarity index 89% rename from kyo-bench/src/main/scala/kyo/bench/StreamBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/StreamBench.scala index 3f24323d9..7cb506f4d 100644 --- a/kyo-bench/src/main/scala/kyo/bench/StreamBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/StreamBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class StreamBench extends Bench.SyncAndFork(25000000): +class StreamBench extends ArenaBench.SyncAndFork(25000000): val seq = (0 until 10000).toVector diff --git a/kyo-bench/src/main/scala/kyo/bench/SuspensionBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/SuspensionBench.scala similarity index 95% rename from kyo-bench/src/main/scala/kyo/bench/SuspensionBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/SuspensionBench.scala index c3c3c4e9d..11bc19ea1 100644 --- a/kyo-bench/src/main/scala/kyo/bench/SuspensionBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/SuspensionBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class SuspensionBench extends Bench.SyncAndFork(()): +class SuspensionBench extends ArenaBench.SyncAndFork(()): def catsBench() = import cats.effect.* diff --git a/kyo-bench/src/main/scala/kyo/bench/TMapMultiKeyBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/TMapMultiKeyBench.scala similarity index 95% rename from kyo-bench/src/main/scala/kyo/bench/TMapMultiKeyBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/TMapMultiKeyBench.scala index bf20ee25e..85595c60f 100644 --- a/kyo-bench/src/main/scala/kyo/bench/TMapMultiKeyBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/TMapMultiKeyBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class TMapMultiKeyBench(parallelism: Int) extends Bench.ForkOnly(parallelism): +class TMapMultiKeyBench(parallelism: Int) extends ArenaBench.ForkOnly(parallelism): def this() = this(Runtime.getRuntime().availableProcessors() * 2) diff --git a/kyo-bench/src/main/scala/kyo/bench/TMapSingleKeyBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/TMapSingleKeyBench.scala similarity index 94% rename from kyo-bench/src/main/scala/kyo/bench/TMapSingleKeyBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/TMapSingleKeyBench.scala index 65e0fdb13..d2274c364 100644 --- a/kyo-bench/src/main/scala/kyo/bench/TMapSingleKeyBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/TMapSingleKeyBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class TMapSingleKeyBench(parallelism: Int) extends Bench.ForkOnly(parallelism): +class TMapSingleKeyBench(parallelism: Int) extends ArenaBench.ForkOnly(parallelism): def this() = this(Runtime.getRuntime().availableProcessors() * 2) diff --git a/kyo-bench/src/main/scala/kyo/bench/TRefMultiBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/TRefMultiBench.scala similarity index 92% rename from kyo-bench/src/main/scala/kyo/bench/TRefMultiBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/TRefMultiBench.scala index b82fc8dcd..f72faeaea 100644 --- a/kyo-bench/src/main/scala/kyo/bench/TRefMultiBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/TRefMultiBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class TRefMultiBench(parallelism: Int) extends Bench.ForkOnly(parallelism): +class TRefMultiBench(parallelism: Int) extends ArenaBench.ForkOnly(parallelism): def this() = this(Runtime.getRuntime().availableProcessors() * 2) diff --git a/kyo-bench/src/main/scala/kyo/bench/TRefSingleBench.scala b/kyo-bench/src/main/scala/kyo/bench/arena/TRefSingleBench.scala similarity index 91% rename from kyo-bench/src/main/scala/kyo/bench/TRefSingleBench.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/TRefSingleBench.scala index 99bc7619d..77e39143b 100644 --- a/kyo-bench/src/main/scala/kyo/bench/TRefSingleBench.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/TRefSingleBench.scala @@ -1,6 +1,6 @@ -package kyo.bench +package kyo.bench.arena -class TRefSingleBench(parallelism: Int) extends Bench.ForkOnly(parallelism): +class TRefSingleBench(parallelism: Int) extends ArenaBench.ForkOnly(parallelism): def this() = this(Runtime.getRuntime().availableProcessors() * 2) diff --git a/kyo-bench/src/main/scala/kyo/bench/TestHttpServer.scala b/kyo-bench/src/main/scala/kyo/bench/arena/TestHttpServer.scala similarity index 99% rename from kyo-bench/src/main/scala/kyo/bench/TestHttpServer.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/TestHttpServer.scala index 9862db01c..7f2fc966d 100644 --- a/kyo-bench/src/main/scala/kyo/bench/TestHttpServer.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/TestHttpServer.scala @@ -1,4 +1,4 @@ -package kyo.bench +package kyo.bench.arena import io.vertx.core.AbstractVerticle import io.vertx.core.DeploymentOptions diff --git a/kyo-bench/src/main/scala/kyo/bench/WarmupJITProfile.scala b/kyo-bench/src/main/scala/kyo/bench/arena/WarmupJITProfile.scala similarity index 94% rename from kyo-bench/src/main/scala/kyo/bench/WarmupJITProfile.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/WarmupJITProfile.scala index 32f31ba43..ced2bf235 100644 --- a/kyo-bench/src/main/scala/kyo/bench/WarmupJITProfile.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/WarmupJITProfile.scala @@ -1,9 +1,9 @@ -package kyo.bench +package kyo.bench.arena import WarmupJITProfile.* import java.util.concurrent.CountDownLatch import java.util.concurrent.Executors -import kyo.bench.Bench.* +import kyo.bench.arena.ArenaBench.* import kyo.discard import org.openjdk.jmh.annotations.Scope import org.openjdk.jmh.annotations.State @@ -41,14 +41,14 @@ abstract class WarmupJITProfile: exec.shutdown() end try - def run[A](bench: Bench[?]): Unit + def run[A](bench: ArenaBench[?]): Unit end WarmupJITProfile object WarmupJITProfile: abstract class SyncWarmup extends WarmupJITProfile: - def run[A](bench: Bench[?]) = + def run[A](bench: ArenaBench[?]) = bench match case bench: SyncAndFork[?] => discard(runSync(bench)) case _ => () @@ -56,7 +56,7 @@ object WarmupJITProfile: end SyncWarmup abstract class ForkWarmup extends WarmupJITProfile: - def run[A](bench: Bench[?]) = + def run[A](bench: ArenaBench[?]) = bench match case bench: Fork[?] => discard(runFork(bench)) case _ => () @@ -86,7 +86,7 @@ object WarmupJITProfile: val warmupThreads = Runtime.getRuntime().availableProcessors() def warmupBenchs = - Seq[Bench[?]]( + Seq[ArenaBench[?]]( new BlockingBench, new BroadFlatMapBench, new CollectBench, diff --git a/kyo-bench/src/main/scala/kyo/bench/ZIORuntime.scala b/kyo-bench/src/main/scala/kyo/bench/arena/ZIORuntime.scala similarity index 97% rename from kyo-bench/src/main/scala/kyo/bench/ZIORuntime.scala rename to kyo-bench/src/main/scala/kyo/bench/arena/ZIORuntime.scala index c75d9286b..c83094f29 100644 --- a/kyo-bench/src/main/scala/kyo/bench/ZIORuntime.scala +++ b/kyo-bench/src/main/scala/kyo/bench/arena/ZIORuntime.scala @@ -1,4 +1,4 @@ -package kyo.bench +package kyo.bench.arena import zio.* diff --git a/kyo-bench/src/test/scala/kyo/benchTest/BenchTest.scala b/kyo-bench/src/test/scala/kyo/bench/arena/BenchTest.scala similarity index 87% rename from kyo-bench/src/test/scala/kyo/benchTest/BenchTest.scala rename to kyo-bench/src/test/scala/kyo/bench/arena/BenchTest.scala index 9a6ea07f3..2891bfa4a 100644 --- a/kyo-bench/src/test/scala/kyo/benchTest/BenchTest.scala +++ b/kyo-bench/src/test/scala/kyo/bench/arena/BenchTest.scala @@ -1,7 +1,7 @@ -package kyo.benchTest +package kyo.bench.arena import kyo.bench.* -import kyo.bench.Bench.* +import kyo.bench.arena.ArenaBench.* import org.scalatest.Assertions import org.scalatest.freespec.AsyncFreeSpec @@ -14,8 +14,8 @@ abstract class BenchTest extends AsyncFreeSpec with Assertions: end Target def target: Target - def runSync[A](b: Bench.SyncAndFork[A]): A - def runFork[A](b: Bench.Fork[A]): A + def runSync[A](b: ArenaBench.SyncAndFork[A]): A + def runFork[A](b: ArenaBench.Fork[A]): A val targets = Seq("cats", "kyo", "zio") @@ -30,7 +30,7 @@ abstract class BenchTest extends AsyncFreeSpec with Assertions: inline given [A]: CanEqual[A, A] = CanEqual.derived - def test[A](b: Bench[A]): Unit = + def test[A](b: ArenaBench[A]): Unit = b match case b: SyncAndFork[A] => s"sync$target" in { diff --git a/kyo-bench/src/test/scala/kyo/bench/arena/CatsBenchTest.scala b/kyo-bench/src/test/scala/kyo/bench/arena/CatsBenchTest.scala new file mode 100644 index 000000000..fceb81f02 --- /dev/null +++ b/kyo-bench/src/test/scala/kyo/bench/arena/CatsBenchTest.scala @@ -0,0 +1,11 @@ +package kyo.bench.arena + +import kyo.bench.* + +class CatsBenchTest extends BenchTest: + + def target = Target.Cats + def runFork[A](b: ArenaBench.Fork[A]): A = b.forkCats(null) + def runSync[A](b: ArenaBench.SyncAndFork[A]): A = b.syncCats(null) + +end CatsBenchTest diff --git a/kyo-bench/src/test/scala/kyo/bench/arena/KyoBenchTest.scala b/kyo-bench/src/test/scala/kyo/bench/arena/KyoBenchTest.scala new file mode 100644 index 000000000..4118642b7 --- /dev/null +++ b/kyo-bench/src/test/scala/kyo/bench/arena/KyoBenchTest.scala @@ -0,0 +1,11 @@ +package kyo.bench.arena + +import kyo.bench.* + +class KyoBenchTest extends BenchTest: + + def target = Target.Kyo + def runFork[A](b: ArenaBench.Fork[A]): A = b.forkKyo(null) + def runSync[A](b: ArenaBench.SyncAndFork[A]): A = b.syncKyo(null) + +end KyoBenchTest diff --git a/kyo-bench/src/test/scala/kyo/bench/arena/ZIOBenchTest.scala b/kyo-bench/src/test/scala/kyo/bench/arena/ZIOBenchTest.scala new file mode 100644 index 000000000..376be0910 --- /dev/null +++ b/kyo-bench/src/test/scala/kyo/bench/arena/ZIOBenchTest.scala @@ -0,0 +1,11 @@ +package kyo.bench.arena + +import kyo.bench.* + +class ZIOBenchTest extends BenchTest: + + def target = Target.ZIO + def runFork[A](b: ArenaBench.Fork[A]): A = b.forkZIO(null) + def runSync[A](b: ArenaBench.SyncAndFork[A]): A = b.syncZIO(null) + +end ZIOBenchTest diff --git a/kyo-bench/src/test/scala/kyo/benchTest/CatsBenchTest.scala b/kyo-bench/src/test/scala/kyo/benchTest/CatsBenchTest.scala deleted file mode 100644 index 57dc06698..000000000 --- a/kyo-bench/src/test/scala/kyo/benchTest/CatsBenchTest.scala +++ /dev/null @@ -1,11 +0,0 @@ -package kyo.benchTest - -import kyo.bench.* - -class CatsBenchTest extends BenchTest: - - def target = Target.Cats - def runFork[A](b: Bench.Fork[A]): A = b.forkCats(null) - def runSync[A](b: Bench.SyncAndFork[A]): A = b.syncCats(null) - -end CatsBenchTest diff --git a/kyo-bench/src/test/scala/kyo/benchTest/KyoBenchTest.scala b/kyo-bench/src/test/scala/kyo/benchTest/KyoBenchTest.scala deleted file mode 100644 index fccf238fb..000000000 --- a/kyo-bench/src/test/scala/kyo/benchTest/KyoBenchTest.scala +++ /dev/null @@ -1,11 +0,0 @@ -package kyo.benchTest - -import kyo.bench.* - -class KyoBenchTest extends BenchTest: - - def target = Target.Kyo - def runFork[A](b: Bench.Fork[A]): A = b.forkKyo(null) - def runSync[A](b: Bench.SyncAndFork[A]): A = b.syncKyo(null) - -end KyoBenchTest diff --git a/kyo-bench/src/test/scala/kyo/benchTest/ZIOBenchTest.scala b/kyo-bench/src/test/scala/kyo/benchTest/ZIOBenchTest.scala deleted file mode 100644 index 2f5f84377..000000000 --- a/kyo-bench/src/test/scala/kyo/benchTest/ZIOBenchTest.scala +++ /dev/null @@ -1,11 +0,0 @@ -package kyo.benchTest - -import kyo.bench.* - -class ZIOBenchTest extends BenchTest: - - def target = Target.ZIO - def runFork[A](b: Bench.Fork[A]): A = b.forkZIO(null) - def runSync[A](b: Bench.SyncAndFork[A]): A = b.syncZIO(null) - -end ZIOBenchTest