metrics_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package metrics
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "sync"
  6. "testing"
  7. )
  8. const FANOUT = 4
  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. RegisterRuntimeMemStats(r)
  22. b.ResetTimer()
  23. ch := make(chan bool)
  24. wgC := &sync.WaitGroup{}
  25. //*
  26. wgC.Add(1)
  27. go func() {
  28. defer wgC.Done()
  29. //log.Println("go CaptureRuntimeMemStats")
  30. for {
  31. select {
  32. case <-ch:
  33. //log.Println("done CaptureRuntimeMemStats")
  34. return
  35. default:
  36. CaptureRuntimeMemStatsOnce(r)
  37. }
  38. }
  39. }()
  40. //*/
  41. wgW := &sync.WaitGroup{}
  42. /*
  43. wgW.Add(1)
  44. go func() {
  45. defer wgW.Done()
  46. //log.Println("go Write")
  47. for {
  48. select {
  49. case <-ch:
  50. //log.Println("done Write")
  51. return
  52. default:
  53. WriteOnce(r, ioutil.Discard)
  54. }
  55. }
  56. }()
  57. //*/
  58. wg := &sync.WaitGroup{}
  59. wg.Add(FANOUT)
  60. for i := 0; i < FANOUT; i++ {
  61. go func(i int) {
  62. defer wg.Done()
  63. //log.Println("go", i)
  64. for i := 0; i < b.N; i++ {
  65. c.Inc(1)
  66. g.Update(int64(i))
  67. h.Update(int64(i))
  68. m.Mark(1)
  69. t.Update(1)
  70. }
  71. //log.Println("done", i)
  72. }(i)
  73. }
  74. wg.Wait()
  75. close(ch)
  76. wgC.Wait()
  77. wgW.Wait()
  78. }