runtime_test.go 855 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package metrics
  2. import (
  3. "runtime"
  4. "testing"
  5. "time"
  6. )
  7. func BenchmarkRuntimeMemStats(b *testing.B) {
  8. r := NewRegistry()
  9. RegisterRuntimeMemStats(r)
  10. b.ResetTimer()
  11. for i := 0; i < b.N; i++ {
  12. CaptureRuntimeMemStatsOnce(r)
  13. }
  14. }
  15. func TestRuntimeMemStatsBlocking(t *testing.T) {
  16. if g := runtime.GOMAXPROCS(0); g < 2 {
  17. t.Skipf("skipping TestRuntimeMemStatsBlocking with GOMAXPROCS=%d\n", g)
  18. }
  19. ch := make(chan int)
  20. go testRuntimeMemStatsBlocking(ch)
  21. var memStats runtime.MemStats
  22. t0 := time.Now()
  23. runtime.ReadMemStats(&memStats)
  24. t1 := time.Now()
  25. t.Log("i++ during runtime.ReadMemStats:", <-ch)
  26. go testRuntimeMemStatsBlocking(ch)
  27. d := t1.Sub(t0)
  28. t.Log(d)
  29. time.Sleep(d)
  30. t.Log("i++ during time.Sleep:", <-ch)
  31. }
  32. func testRuntimeMemStatsBlocking(ch chan int) {
  33. i := 0
  34. for {
  35. select {
  36. case ch <- i:
  37. return
  38. default:
  39. i++
  40. }
  41. }
  42. }