metrics_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package metrics
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "sync"
  6. "testing"
  7. )
  8. const FANOUT = 128
  9. // Stop the compiler from complaining during debugging.
  10. var (
  11. _ = ioutil.Discard
  12. _ = log.LstdFlags
  13. )
  14. func BenchmarkMetrics(b *testing.B) {
  15. r := NewRegistry()
  16. c := NewRegisteredCounter("counter", r)
  17. g := NewRegisteredGauge("gauge", r)
  18. h := NewRegisteredHistogram("histogram", r, NewUniformSample(100))
  19. m := NewRegisteredMeter("meter", r)
  20. t := NewRegisteredTimer("timer", r)
  21. RegisterDebugGCStats(r)
  22. RegisterRuntimeMemStats(r)
  23. b.ResetTimer()
  24. ch := make(chan bool)
  25. wgD := &sync.WaitGroup{}
  26. /*
  27. wgD.Add(1)
  28. go func() {
  29. defer wgD.Done()
  30. //log.Println("go CaptureDebugGCStats")
  31. for {
  32. select {
  33. case <-ch:
  34. //log.Println("done CaptureDebugGCStats")
  35. return
  36. default:
  37. CaptureDebugGCStatsOnce(r)
  38. }
  39. }
  40. }()
  41. //*/
  42. wgR := &sync.WaitGroup{}
  43. //*
  44. wgR.Add(1)
  45. go func() {
  46. defer wgR.Done()
  47. //log.Println("go CaptureRuntimeMemStats")
  48. for {
  49. select {
  50. case <-ch:
  51. //log.Println("done CaptureRuntimeMemStats")
  52. return
  53. default:
  54. CaptureRuntimeMemStatsOnce(r)
  55. }
  56. }
  57. }()
  58. //*/
  59. wgW := &sync.WaitGroup{}
  60. /*
  61. wgW.Add(1)
  62. go func() {
  63. defer wgW.Done()
  64. //log.Println("go Write")
  65. for {
  66. select {
  67. case <-ch:
  68. //log.Println("done Write")
  69. return
  70. default:
  71. WriteOnce(r, ioutil.Discard)
  72. }
  73. }
  74. }()
  75. //*/
  76. wg := &sync.WaitGroup{}
  77. wg.Add(FANOUT)
  78. for i := 0; i < FANOUT; i++ {
  79. go func(i int) {
  80. defer wg.Done()
  81. //log.Println("go", i)
  82. for i := 0; i < b.N; i++ {
  83. c.Inc(1)
  84. g.Update(int64(i))
  85. h.Update(int64(i))
  86. m.Mark(1)
  87. t.Update(1)
  88. }
  89. //log.Println("done", i)
  90. }(i)
  91. }
  92. wg.Wait()
  93. close(ch)
  94. wgD.Wait()
  95. wgR.Wait()
  96. wgW.Wait()
  97. }