Browse Source

Benchmark sample implementations

Pieter Noordhuis 13 years ago
parent
commit
0930063191
1 changed files with 48 additions and 1 deletions
  1. 48 1
      sample_test.go

+ 48 - 1
sample_test.go

@@ -1,6 +1,10 @@
 package metrics
 
-import "testing"
+import (
+	"math/rand"
+	"runtime"
+	"testing"
+)
 
 func TestExpDecaySample10(t *testing.T) {
 	s := NewExpDecaySample(100, 0.99)
@@ -73,3 +77,46 @@ func TestUniformSample(t *testing.T) {
 		}
 	}
 }
+
+func benchmarkSample(b *testing.B, s Sample) {
+	var m runtime.MemStats
+	var p [2]uint64
+
+	runtime.ReadMemStats(&m)
+	p[0] = m.PauseTotalNs
+
+	for i := 0; i < b.N; i++ {
+		s.Update(rand.Int63())
+	}
+
+	runtime.GC()
+
+	runtime.ReadMemStats(&m)
+	p[1] = m.PauseTotalNs
+
+	b.Logf("GC cost: %d ns/op", int(p[1]-p[0])/b.N)
+}
+
+func BenchmarkExpDecaySample257(b *testing.B) {
+	benchmarkSample(b, NewExpDecaySample(257, 0.015))
+}
+
+func BenchmarkExpDecaySample514(b *testing.B) {
+	benchmarkSample(b, NewExpDecaySample(514, 0.015))
+}
+
+func BenchmarkExpDecaySample1028(b *testing.B) {
+	benchmarkSample(b, NewExpDecaySample(1028, 0.015))
+}
+
+func BenchmarkUniformSample257(b *testing.B) {
+	benchmarkSample(b, NewUniformSample(257))
+}
+
+func BenchmarkUniformSample514(b *testing.B) {
+	benchmarkSample(b, NewUniformSample(514))
+}
+
+func BenchmarkUniformSample1028(b *testing.B) {
+	benchmarkSample(b, NewUniformSample(1028))
+}