diff options
author | Diego <diegolparra@gmail.com> | 2014-12-05 14:58:00 -0300 |
---|---|---|
committer | Diego <diegolparra@gmail.com> | 2014-12-05 14:58:00 -0300 |
commit | b7098b5c487ad7281866ff8271351f9b0927d68a (patch) | |
tree | 56494f8b807bea98d6d655eff6132ce84fc58b59 /kamon-core/src/main/scala | |
parent | 6c99cdf2f8d2988696550c6db1df0a3783bf4986 (diff) | |
download | Kamon-b7098b5c487ad7281866ff8271351f9b0927d68a.tar.gz Kamon-b7098b5c487ad7281866ff8271351f9b0927d68a.tar.bz2 Kamon-b7098b5c487ad7281866ff8271351f9b0927d68a.zip |
= core: introduce fastMod operation in Sampler
Diffstat (limited to 'kamon-core/src/main/scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/Sampler.scala | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/Sampler.scala b/kamon-core/src/main/scala/kamon/trace/Sampler.scala index be6ace69..9c6e5e63 100644 --- a/kamon-core/src/main/scala/kamon/trace/Sampler.scala +++ b/kamon-core/src/main/scala/kamon/trace/Sampler.scala @@ -44,14 +44,27 @@ class RandomSampler(chance: Int) extends Sampler { } class OrderedSampler(interval: Int) extends Sampler { + import OrderedSampler._ + require(interval > 0, "kamon.trace.ordered-sampler.interval cannot be <= 0") + assume(interval isPowerOfTwo, "kamon.trace.ordered-sampler.interval must be power of two") private val sequencer = Sequencer() - def shouldTrace: Boolean = sequencer.next() % interval == 0 + def shouldTrace: Boolean = (sequencer.next() fastMod interval) == 0 def shouldReport(traceElapsedTime: NanoInterval): Boolean = true } +object OrderedSampler { + implicit class EnhancedInt(i: Int) { + def isPowerOfTwo = !((i & (i - 1)) == 0) + } + + implicit class EnhancedLong(dividend: Long) { + def fastMod(divisor: Int) = dividend & (divisor - 1) + } +} + class ThresholdSampler(thresholdInNanoseconds: Long) extends Sampler { require(thresholdInNanoseconds > 0, "kamon.trace.threshold-sampler.minimum-elapsed-time cannot be <= 0") |