Files
sing-box-extended/transport/call/tunnel/dctunnel_bench_test.go

70 lines
2.3 KiB
Go

package tunnel
import (
"context"
"io"
"testing"
)
type discardRawConn struct{}
func (discardRawConn) Read(p []byte) (int, error) { return 0, io.EOF }
func (discardRawConn) ReadDataChannel(p []byte) (int, bool, error) { return 0, false, io.EOF }
func (discardRawConn) Write(p []byte) (int, error) { return len(p), nil }
func (discardRawConn) WriteDataChannel(p []byte, isString bool) (int, error) {
return len(p), nil
}
func (discardRawConn) Close() error { return nil }
type benchLogger struct{}
func (benchLogger) Trace(args ...any) {}
func (benchLogger) Debug(args ...any) {}
func (benchLogger) Info(args ...any) {}
func (benchLogger) Notice(args ...any) {}
func (benchLogger) Warn(args ...any) {}
func (benchLogger) Error(args ...any) {}
func (benchLogger) Fatal(args ...any) {}
func (benchLogger) Panic(args ...any) {}
func (benchLogger) TraceContext(ctx context.Context, args ...any) {}
func (benchLogger) DebugContext(ctx context.Context, args ...any) {}
func (benchLogger) InfoContext(ctx context.Context, args ...any) {}
func (benchLogger) NoticeContext(ctx context.Context, args ...any) {}
func (benchLogger) WarnContext(ctx context.Context, args ...any) {}
func (benchLogger) ErrorContext(ctx context.Context, args ...any) {}
func (benchLogger) FatalContext(ctx context.Context, args ...any) {}
func (benchLogger) PanicContext(ctx context.Context, args ...any) {}
func newBenchDCTunnel() *DCTunnel {
return &DCTunnel{raw: discardRawConn{}, logger: benchLogger{}, readBuf: 4096}
}
func BenchmarkDCTunnelSendData(b *testing.B) {
sizes := []int{64, 512, 4096}
for _, size := range sizes {
payload := make([]byte, size)
frame := EncodeFrame(42, MsgData, payload)
b.Run(sizeLabel(size), func(b *testing.B) {
t := newBenchDCTunnel()
b.ReportAllocs()
b.SetBytes(int64(len(frame)))
for i := 0; i < b.N; i++ {
t.SendData(frame)
}
})
}
}
func sizeLabel(n int) string {
switch n {
case 64:
return "64B"
case 512:
return "512B"
case 4096:
return "4KB"
default:
return "custom"
}
}