Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3333bfb

Browse files
committed
Report how efficient compression is in BenchmarkConn
1 parent2377cca commit3333bfb

File tree

6 files changed

+39
-60
lines changed

6 files changed

+39
-60
lines changed

‎ci/test.mk‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
test:gotestci/out/coverage.html
1+
test: ci/out/coverage.html
22
ifdefCI
33
test: coveralls
44
endif

‎compress_notjs.go‎

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -108,22 +108,6 @@ func putFlateReader(fr io.Reader) {
108108
flateReaderPool.Put(fr)
109109
}
110110

111-
varflateWriterPool sync.Pool
112-
113-
funcgetFlateWriter(w io.Writer)*flate.Writer {
114-
fw,ok:=flateWriterPool.Get().(*flate.Writer)
115-
if!ok {
116-
fw,_=flate.NewWriter(w,flate.BestSpeed)
117-
returnfw
118-
}
119-
fw.Reset(w)
120-
returnfw
121-
}
122-
123-
funcputFlateWriter(w*flate.Writer) {
124-
flateWriterPool.Put(w)
125-
}
126-
127111
typeslidingWindowstruct {
128112
buf []byte
129113
}

‎conn_test.go‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,9 @@ func BenchmarkConn(b *testing.B) {
402402

403403
bb.goEchoLoop(c2)
404404

405+
bytesWritten:=c1.RecordBytesWritten()
406+
bytesRead:=c1.RecordBytesRead()
407+
405408
msg:= []byte(strings.Repeat("1234",128))
406409
readBuf:=make([]byte,len(msg))
407410
writes:=make(chanstruct{})
@@ -451,6 +454,9 @@ func BenchmarkConn(b *testing.B) {
451454
}
452455
b.StopTimer()
453456

457+
b.ReportMetric(float64(*bytesWritten/b.N),"written/op")
458+
b.ReportMetric(float64(*bytesRead/b.N),"read/op")
459+
454460
err:=c1.Close(websocket.StatusNormalClosure,"")
455461
assert.Success(b,err)
456462
})

‎export_test.go‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package websocket
2+
3+
func (c*Conn)RecordBytesWritten()*int {
4+
varbytesWrittenint
5+
c.bw.Reset(writerFunc(func (p []byte) (int,error) {
6+
bytesWritten+=len(p)
7+
returnc.rwc.Write(p)
8+
}))
9+
return&bytesWritten
10+
}
11+
12+
func (c*Conn)RecordBytesRead()*int {
13+
varbytesReadint
14+
c.br.Reset(readerFunc(func(p []byte) (int,error) {
15+
n,err:=c.rwc.Read(p)
16+
bytesRead+=n
17+
returnn,err
18+
}))
19+
return&bytesRead
20+
}

‎internal/test/assert/assert.go‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ func Error(t testing.TB, err error) {
3939
funcContains(t testing.TB,vinterface{},substring) {
4040
t.Helper()
4141

42-
vstr:=fmt.Sprint(v)
43-
if!strings.Contains(vstr,sub) {
44-
t.Fatalf("expected %q to contain %q",vstr,sub)
42+
s:=fmt.Sprint(v)
43+
if!strings.Contains(s,sub) {
44+
t.Fatalf("expected %q to contain %q",s,sub)
4545
}
4646
}

‎write.go‎

Lines changed: 9 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"time"
1313

1414
"github.com/klauspost/compress/flate"
15-
kflate"github.com/klauspost/compress/flate"
1615
"golang.org/x/xerrors"
1716

1817
"nhooyr.io/websocket/internal/errd"
@@ -77,9 +76,8 @@ type msgWriterState struct {
7776
opcodeopcode
7877
flatebool
7978

80-
trimWriter*trimLastFourBytesWriter
81-
flateWriter*flate.Writer
82-
dictslidingWindow
79+
trimWriter*trimLastFourBytesWriter
80+
dictslidingWindow
8381
}
8482

8583
funcnewMsgWriterState(c*Conn)*msgWriterState {
@@ -90,23 +88,14 @@ func newMsgWriterState(c *Conn) *msgWriterState {
9088
returnmw
9189
}
9290

93-
conststateless=true
94-
9591
func (mw*msgWriterState)ensureFlate() {
9692
ifmw.trimWriter==nil {
9793
mw.trimWriter=&trimLastFourBytesWriter{
9894
w:writerFunc(mw.write),
9995
}
10096
}
10197

102-
ifstateless {
103-
mw.dict.init(8192)
104-
}else {
105-
ifmw.flateWriter==nil {
106-
mw.flateWriter=getFlateWriter(mw.trimWriter)
107-
}
108-
}
109-
98+
mw.dict.init(8192)
11099
mw.flate=true
111100
}
112101

@@ -163,13 +152,6 @@ func (mw *msgWriterState) reset(ctx context.Context, typ MessageType) error {
163152
returnnil
164153
}
165154

166-
func (mw*msgWriterState)putFlateWriter() {
167-
ifmw.flateWriter!=nil {
168-
putFlateWriter(mw.flateWriter)
169-
mw.flateWriter=nil
170-
}
171-
}
172-
173155
// Write writes the given bytes to the WebSocket connection.
174156
func (mw*msgWriterState)Write(p []byte) (_int,errerror) {
175157
defererrd.Wrap(&err,"failed to write")
@@ -186,15 +168,12 @@ func (mw *msgWriterState) Write(p []byte) (_ int, err error) {
186168
}
187169

188170
ifmw.flate {
189-
ifstateless {
190-
err=kflate.StatelessDeflate(mw.trimWriter,p,false,mw.dict.buf)
191-
iferr!=nil {
192-
return0,err
193-
}
194-
mw.dict.write(p)
195-
returnlen(p),nil
171+
err=flate.StatelessDeflate(mw.trimWriter,p,false,mw.dict.buf)
172+
iferr!=nil {
173+
return0,err
196174
}
197-
returnmw.flateWriter.Write(p)
175+
mw.dict.write(p)
176+
returnlen(p),nil
198177
}
199178

200179
returnmw.write(p)
@@ -216,29 +195,20 @@ func (mw *msgWriterState) Close() (err error) {
216195
mw.writeMu.Lock()
217196
defermw.writeMu.Unlock()
218197

219-
ifmw.flate&&!stateless {
220-
err=mw.flateWriter.Flush()
221-
iferr!=nil {
222-
returnxerrors.Errorf("failed to flush flate: %w",err)
223-
}
224-
}
225-
226198
_,err=mw.c.writeFrame(mw.ctx,true,mw.flate,mw.opcode,nil)
227199
iferr!=nil {
228200
returnxerrors.Errorf("failed to write fin frame: %w",err)
229201
}
230202

231203
ifmw.flate&&!mw.flateContextTakeover() {
232204
mw.dict.close()
233-
mw.putFlateWriter()
234205
}
235206
mw.mu.Unlock()
236207
returnnil
237208
}
238209

239210
func (mw*msgWriterState)close() {
240211
mw.writeMu.Lock()
241-
mw.putFlateWriter()
242212
mw.dict.close()
243213
}
244214

@@ -311,14 +281,13 @@ func (c *Conn) writeFrame(ctx context.Context, fin bool, flate bool, opcode opco
311281
returnn,nil
312282
}
313283

314-
func (c*Conn)writeFramePayload(p []byte) (_int,errerror) {
284+
func (c*Conn)writeFramePayload(p []byte) (nint,errerror) {
315285
defererrd.Wrap(&err,"failed to write frame payload")
316286

317287
if!c.writeHeader.masked {
318288
returnc.bw.Write(p)
319289
}
320290

321-
varnint
322291
maskKey:=c.writeHeader.maskKey
323292
forlen(p)>0 {
324293
// If the buffer is full, we need to flush.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp