@@ -11,6 +11,7 @@ import (
11
11
"fmt"
12
12
"io"
13
13
"math"
14
+ "sync"
14
15
"testing"
15
16
)
16
17
@@ -72,6 +73,76 @@ func throughput(b *testing.B, totalBytes int64) {
72
73
}
73
74
}
74
75
76
+ func BenchmarkReadByte (b * testing.B ) {
77
+ cli , srv := newLocalConnPair (b , & Config {}, & Config {})
78
+
79
+ var wg sync.WaitGroup
80
+ defer wg .Wait ()
81
+
82
+ wg .Add (1 )
83
+ go func () {
84
+ defer wg .Done ()
85
+ buf := make ([]byte , 1 << 20 )
86
+ sconn , err := srv .AcceptStream (context .Background ())
87
+ if err != nil {
88
+ panic (fmt .Errorf ("AcceptStream: %v" , err ))
89
+ }
90
+ for {
91
+ if _ , err := sconn .Write (buf ); err != nil {
92
+ break
93
+ }
94
+ sconn .Flush ()
95
+ }
96
+ }()
97
+
98
+ b .SetBytes (1 )
99
+ cconn , err := cli .NewStream (context .Background ())
100
+ if err != nil {
101
+ b .Fatalf ("NewStream: %v" , err )
102
+ }
103
+ cconn .Flush ()
104
+ for i := 0 ; i < b .N ; i ++ {
105
+ _ , err := cconn .ReadByte ()
106
+ if err != nil {
107
+ b .Fatalf ("ReadByte: %v" , err )
108
+ }
109
+ }
110
+ cconn .Close ()
111
+ }
112
+
113
+ func BenchmarkWriteByte (b * testing.B ) {
114
+ cli , srv := newLocalConnPair (b , & Config {}, & Config {})
115
+
116
+ var wg sync.WaitGroup
117
+ defer wg .Wait ()
118
+
119
+ wg .Add (1 )
120
+ go func () {
121
+ defer wg .Done ()
122
+ sconn , err := srv .AcceptStream (context .Background ())
123
+ if err != nil {
124
+ panic (fmt .Errorf ("AcceptStream: %v" , err ))
125
+ }
126
+ n , err := io .Copy (io .Discard , sconn )
127
+ if n != int64 (b .N ) || err != nil {
128
+ b .Errorf ("server io.Copy() = %v, %v; want %v, nil" , n , err , b .N )
129
+ }
130
+ }()
131
+
132
+ b .SetBytes (1 )
133
+ cconn , err := cli .NewStream (context .Background ())
134
+ if err != nil {
135
+ b .Fatalf ("NewStream: %v" , err )
136
+ }
137
+ cconn .Flush ()
138
+ for i := 0 ; i < b .N ; i ++ {
139
+ if err := cconn .WriteByte (0 ); err != nil {
140
+ b .Fatalf ("WriteByte: %v" , err )
141
+ }
142
+ }
143
+ cconn .Close ()
144
+ }
145
+
75
146
func BenchmarkStreamCreation (b * testing.B ) {
76
147
cli , srv := newLocalConnPair (b , & Config {}, & Config {})
77
148
0 commit comments