Skip to content

Commit beca1d3

Browse files
author
Alexander Emelin
authored
Fix broadcast benchmarks (#542)
* do not use cached PreparedMessage in broadcast benchmarks * pick better name for benchmark method
1 parent bcef843 commit beca1d3

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

conn_broadcast_test.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
// scenarios with many subscribers in one channel.
1919
type 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

Comments
 (0)