// +build go1.7 /* * * Copyright 2017 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package benchmark import ( "fmt" "os" "reflect" "testing" "time" "google.golang.org/grpc" "google.golang.org/grpc/benchmark/stats" ) func BenchmarkClient(b *testing.B) { enableTrace := []bool{true, false} // run both enable and disable by default // When set the latency to 0 (no delay), the result is slower than the real result with no delay // because latency simulation section has extra operations latency := []time.Duration{0, 40 * time.Millisecond} // if non-positive, no delay. kbps := []int{0, 10240} // if non-positive, infinite mtu := []int{0} // if non-positive, infinite maxConcurrentCalls := []int{1, 8, 64, 512} reqSizeBytes := []int{1, 1024 * 1024} respSizeBytes := []int{1, 1024 * 1024} featuresCurPos := make([]int, 7) // 0:enableTracing 1:md 2:ltc 3:kbps 4:mtu 5:maxC 6:connCount 7:reqSize 8:respSize featuresMaxPosition := []int{len(enableTrace), len(latency), len(kbps), len(mtu), len(maxConcurrentCalls), len(reqSizeBytes), len(respSizeBytes)} initalPos := make([]int, len(featuresCurPos)) // run benchmarks start := true for !reflect.DeepEqual(featuresCurPos, initalPos) || start { start = false tracing := "Trace" if !enableTrace[featuresCurPos[0]] { tracing = "noTrace" } benchFeature := stats.Features{ EnableTrace: enableTrace[featuresCurPos[0]], Latency: latency[featuresCurPos[1]], Kbps: kbps[featuresCurPos[2]], Mtu: mtu[featuresCurPos[3]], MaxConcurrentCalls: maxConcurrentCalls[featuresCurPos[4]], ReqSizeBytes: reqSizeBytes[featuresCurPos[5]], RespSizeBytes: respSizeBytes[featuresCurPos[6]], } grpc.EnableTracing = enableTrace[featuresCurPos[0]] b.Run(fmt.Sprintf("Unary-%s-%s", tracing, benchFeature.String()), func(b *testing.B) { runUnary(b, benchFeature) }) b.Run(fmt.Sprintf("Stream-%s-%s", tracing, benchFeature.String()), func(b *testing.B) { runStream(b, benchFeature) }) AddOne(featuresCurPos, featuresMaxPosition) } } func TestMain(m *testing.M) { os.Exit(stats.RunTestMain(m)) }