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 | 9cfbb4162a19ab35f0cd5263b789601df673581a (patch) | |
tree | 9364669a0798ae2d6104e803f784e3301ef40c74 /kamon-core/src/main/scala/kamon | |
parent | 880a5b7a14a70c39cf1a7b6177381e3381a69c8d (diff) | |
download | Kamon-9cfbb4162a19ab35f0cd5263b789601df673581a.tar.gz Kamon-9cfbb4162a19ab35f0cd5263b789601df673581a.tar.bz2 Kamon-9cfbb4162a19ab35f0cd5263b789601df673581a.zip |
= core: introduce fastMod operation in Sampler
Diffstat (limited to 'kamon-core/src/main/scala/kamon')
-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") |