@@ -18,7 +18,6 @@ import (
1818// scenarios with many subscribers in one channel.
1919type broadcastBench struct {
2020 w io.Writer
21- message * broadcastMessage
2221 closeCh chan struct {}
2322 doneCh chan struct {}
2423 count int32
@@ -52,14 +51,6 @@ func newBroadcastBench(usePrepared, compression bool) *broadcastBench {
5251 usePrepared : usePrepared ,
5352 compression : compression ,
5453 }
55- msg := & broadcastMessage {
56- payload : textMessages (1 )[0 ],
57- }
58- if usePrepared {
59- pm , _ := NewPreparedMessage (TextMessage , msg .payload )
60- msg .prepared = pm
61- }
62- bench .message = msg
6354 bench .makeConns (10000 )
6455 return bench
6556}
@@ -78,7 +69,7 @@ func (b *broadcastBench) makeConns(numConns int) {
7869 for {
7970 select {
8071 case msg := <- c .msgCh :
81- if b . usePrepared {
72+ if msg . prepared != nil {
8273 c .conn .WritePreparedMessage (msg .prepared )
8374 } else {
8475 c .conn .WriteMessage (TextMessage , msg .payload )
@@ -100,9 +91,9 @@ func (b *broadcastBench) close() {
10091 close (b .closeCh )
10192}
10293
103- func (b * broadcastBench ) runOnce ( ) {
94+ func (b * broadcastBench ) broadcastOnce ( msg * broadcastMessage ) {
10495 for _ , c := range b .conns {
105- c .msgCh <- b . message
96+ c .msgCh <- msg
10697 }
10798 <- b .doneCh
10899}
@@ -114,17 +105,25 @@ func BenchmarkBroadcast(b *testing.B) {
114105 compression bool
115106 }{
116107 {"NoCompression" , false , false },
117- {"WithCompression " , false , true },
108+ {"Compression " , false , true },
118109 {"NoCompressionPrepared" , true , false },
119- {"WithCompressionPrepared " , true , true },
110+ {"CompressionPrepared " , true , true },
120111 }
112+ payload := textMessages (1 )[0 ]
121113 for _ , bm := range benchmarks {
122114 b .Run (bm .name , func (b * testing.B ) {
123115 bench := newBroadcastBench (bm .usePrepared , bm .compression )
124116 defer bench .close ()
125117 b .ResetTimer ()
126118 for i := 0 ; i < b .N ; i ++ {
127- bench .runOnce ()
119+ message := & broadcastMessage {
120+ payload : payload ,
121+ }
122+ if bench .usePrepared {
123+ pm , _ := NewPreparedMessage (TextMessage , message .payload )
124+ message .prepared = pm
125+ }
126+ bench .broadcastOnce (message )
128127 }
129128 b .ReportAllocs ()
130129 })
0 commit comments