@@ -102,10 +102,15 @@ func (srv *busysrv) expect(bucket int, percent float64) bool {
102
102
}
103
103
104
104
func (srv * busysrv ) printf (ffn func (format string , args ... interface {})) {
105
- ffn ("dialed %d times within %v\n " , srv .bucketTotal , srv .end .Sub (srv .start ))
106
- ffn ("timeBucket\t count\t percent\n " )
107
- for ms , cnt := range srv .bucket {
108
- ffn ("[%2d,%2d)ms\t %d\t %.2f%%\n " , ms , ms + 1 , cnt , float64 (cnt )/ float64 (srv .bucketTotal )* 100.0 )
105
+ ffn ("dialed %d times within %v" , srv .bucketTotal , srv .end .Sub (srv .start ))
106
+ ffn ("timeBucket\t count\t percent" )
107
+ for bucket , cnt := range srv .bucket {
108
+ percent := float64 (cnt ) / float64 (srv .bucketTotal ) * 100.0
109
+ if bucket == len (srv .bucket )- 1 {
110
+ ffn ("[%2d, ~)ms\t %d\t %.2f%%" , bucket , cnt , percent )
111
+ } else {
112
+ ffn ("[%2d,%2d)ms\t %d\t %.2f%%" , bucket , bucket + 1 , cnt , percent )
113
+ }
109
114
}
110
115
}
111
116
@@ -116,6 +121,10 @@ func TestSysmonReadyNetpollWaitersASAP(t *testing.T) {
116
121
if runtime .GOARCH == "wasm" {
117
122
t .Skip ("no sysmon on wasm yet" )
118
123
}
124
+ if runtime .GOOS == "openbsd" {
125
+ // usleep(20us) actually slept 20ms. see issue #17712.
126
+ t .Skip ("sysmon may oversleep on openbsd." )
127
+ }
119
128
120
129
// sysmon may starve if host load is too high.
121
130
np := runtime .GOMAXPROCS (0 )
@@ -134,8 +143,13 @@ func TestSysmonReadyNetpollWaitersASAP(t *testing.T) {
134
143
srv .stop ()
135
144
time .Sleep (time .Millisecond * 100 )
136
145
137
- // expect more than 80% dialings accomplished within 2ms.
138
- if ! srv .expect (2 , 80.0 ) {
146
+ // expect more than 80% dialings accomplished within 2ms in general.
147
+ // but android emulator may be slow, so more patience needed.
148
+ bucket , percent := 2 , 80.0
149
+ if runtime .GOOS == "android" {
150
+ bucket = 9
151
+ }
152
+ if ! srv .expect (bucket , percent ) {
139
153
t .Fail ()
140
154
}
141
155
srv .printf (t .Logf )
0 commit comments