Optimize ByteString.grouped(size) (#25153)

* Add ByteString.grouped() benchmark & tests.

* Implement ByteString.grouped().

* PR comments.
This commit is contained in:
Doug Roper 2018-05-30 10:31:35 -04:00 committed by Konrad `ktoso` Malawski
parent a14347e18d
commit b6d6d543a8
3 changed files with 58 additions and 0 deletions

View file

@ -0,0 +1,31 @@
/**
* Copyright (C) 2014-2018 Lightbend Inc. <https://www.lightbend.com>
*/
package akka.util
import java.util.concurrent.TimeUnit
import org.openjdk.jmh.annotations._
import org.openjdk.jmh.infra.Blackhole
@State(Scope.Benchmark)
@BenchmarkMode(Array(Mode.AverageTime))
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
class ByteString_grouped_Benchmark {
private val bsLarge = ByteString(Array.ofDim[Byte](1000 * 1000))
/*
> akka-bench-jmh/jmh:run -f1 .*ByteString_grouped_Benchmark
[info] Benchmark Mode Cnt Score Error Units
[info] ByteString_grouped_Benchmark.grouped avgt 10 59386.328 ± 1466.045 ns/op
*/
@Benchmark
def grouped(bh: Blackhole): Unit = {
bh.consume(bsLarge.grouped(1000).foreach(bh.consume))
}
}