--- /dev/null
+// +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))
+}