@@ -18,7 +18,6 @@ import (
18
18
// scenarios with many subscribers in one channel.
19
19
type broadcastBench struct {
20
20
w io.Writer
21
- message * broadcastMessage
22
21
closeCh chan struct {}
23
22
doneCh chan struct {}
24
23
count int32
@@ -52,14 +51,6 @@ func newBroadcastBench(usePrepared, compression bool) *broadcastBench {
52
51
usePrepared : usePrepared ,
53
52
compression : compression ,
54
53
}
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
63
54
bench .makeConns (10000 )
64
55
return bench
65
56
}
@@ -78,7 +69,7 @@ func (b *broadcastBench) makeConns(numConns int) {
78
69
for {
79
70
select {
80
71
case msg := <- c .msgCh :
81
- if b . usePrepared {
72
+ if msg . prepared != nil {
82
73
c .conn .WritePreparedMessage (msg .prepared )
83
74
} else {
84
75
c .conn .WriteMessage (TextMessage , msg .payload )
@@ -100,9 +91,9 @@ func (b *broadcastBench) close() {
100
91
close (b .closeCh )
101
92
}
102
93
103
- func (b * broadcastBench ) runOnce ( ) {
94
+ func (b * broadcastBench ) broadcastOnce ( msg * broadcastMessage ) {
104
95
for _ , c := range b .conns {
105
- c .msgCh <- b . message
96
+ c .msgCh <- msg
106
97
}
107
98
<- b .doneCh
108
99
}
@@ -114,17 +105,25 @@ func BenchmarkBroadcast(b *testing.B) {
114
105
compression bool
115
106
}{
116
107
{"NoCompression" , false , false },
117
- {"WithCompression " , false , true },
108
+ {"Compression " , false , true },
118
109
{"NoCompressionPrepared" , true , false },
119
- {"WithCompressionPrepared " , true , true },
110
+ {"CompressionPrepared " , true , true },
120
111
}
112
+ payload := textMessages (1 )[0 ]
121
113
for _ , bm := range benchmarks {
122
114
b .Run (bm .name , func (b * testing.B ) {
123
115
bench := newBroadcastBench (bm .usePrepared , bm .compression )
124
116
defer bench .close ()
125
117
b .ResetTimer ()
126
118
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 )
128
127
}
129
128
b .ReportAllocs ()
130
129
})
0 commit comments