mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-08-07 14:25:17 +03:00
70 lines
2.3 KiB
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"
|
|
}
|
|
}
|