in client.go [415:458]
func clientRunPingTest(test *ethrTest, g time.Duration, warmupCount uint32) {
// TODO: Override NumThreads for now, fix it later to support parallel
// threads.
test.clientParam.NumThreads = 1
for th := uint32(0); th < test.clientParam.NumThreads; th++ {
go func() {
var sent, rcvd, lost uint32
warmupText := "[warmup] "
latencyNumbers := make([]time.Duration, 0)
ExitForLoop:
for {
select {
case <-test.done:
printConnectionLatencyResults(test.dialAddr, test, sent, rcvd, lost, latencyNumbers)
break ExitForLoop
default:
t0 := time.Now()
if warmupCount > 0 {
warmupCount--
clientRunPing(test, warmupText)
} else {
sent++
latency, err := clientRunPing(test, "")
if err == nil {
rcvd++
latencyNumbers = append(latencyNumbers, latency)
} else {
lost++
}
}
if rcvd >= 1000 {
printConnectionLatencyResults(test.dialAddr, test, sent, rcvd, lost, latencyNumbers)
latencyNumbers = make([]time.Duration, 0)
sent, rcvd, lost = 0, 0, 0
}
t1 := time.Since(t0)
if t1 < g {
time.Sleep(g - t1)
}
}
}
}()
}
}