1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package metrics
- import (
- "runtime"
- "runtime/debug"
- "testing"
- "time"
- )
- func BenchmarkDebugGCStats(b *testing.B) {
- r := NewRegistry()
- RegisterDebugGCStats(r)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- CaptureDebugGCStatsOnce(r)
- }
- }
- func TestDebugGCStatsBlocking(t *testing.T) {
- if g := runtime.GOMAXPROCS(0); g < 2 {
- t.Skipf("skipping TestDebugGCMemStatsBlocking with GOMAXPROCS=%d\n", g)
- return
- }
- ch := make(chan int)
- go testDebugGCStatsBlocking(ch)
- var gcStats debug.GCStats
- t0 := time.Now()
- debug.ReadGCStats(&gcStats)
- t1 := time.Now()
- t.Log("i++ during debug.ReadGCStats:", <-ch)
- go testDebugGCStatsBlocking(ch)
- d := t1.Sub(t0)
- t.Log(d)
- time.Sleep(d)
- t.Log("i++ during time.Sleep:", <-ch)
- }
- func testDebugGCStatsBlocking(ch chan int) {
- i := 0
- for {
- select {
- case ch <- i:
- return
- default:
- i++
- }
- }
- }
- func TestDebugGCStatsDoubleRegister(t *testing.T) {
- r := NewRegistry()
- RegisterDebugGCStats(r)
- var storedGauge = (r.Get("debug.GCStats.LastGC")).(Gauge)
- runtime.GC()
- CaptureDebugGCStatsOnce(r)
- firstGC := storedGauge.Value()
- if 0 == firstGC {
- t.Errorf("firstGC got %d, expected > 0", firstGC)
- }
- time.Sleep(time.Millisecond)
- RegisterDebugGCStats(r)
- runtime.GC()
- CaptureDebugGCStatsOnce(r)
- if lastGC := storedGauge.Value(); firstGC == lastGC {
- t.Errorf("lastGC got %d, expected a higher timestamp value", lastGC)
- }
- }
|