| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // The following enables go generate to generate the doc.go file. |
| //go:generate go run $JIRI_ROOT/release/go/src/v.io/x/lib/cmdline/testdata/gendoc.go . -help |
| |
| package main |
| |
| import ( |
| "fmt" |
| "testing" |
| "time" |
| |
| "v.io/x/lib/cmdline" |
| |
| "v.io/v23/context" |
| |
| "v.io/x/ref/lib/v23cmd" |
| _ "v.io/x/ref/runtime/factories/generic" |
| "v.io/x/ref/runtime/internal/rpc/benchmark/internal" |
| "v.io/x/ref/test/benchmark" |
| ) |
| |
| var ( |
| server string |
| iterations, chunkCnt, payloadSize, chunkCntMux, payloadSizeMux int |
| ) |
| |
| func main() { |
| cmdRoot.Flags.StringVar(&server, "server", "", "Address of the server to connect to.") |
| cmdRoot.Flags.IntVar(&iterations, "iterations", 100, "Number of iterations to run.") |
| cmdRoot.Flags.IntVar(&chunkCnt, "chunk_count", 0, "Number of chunks to send per streaming RPC (if zero, use non-streaming RPC).") |
| cmdRoot.Flags.IntVar(&payloadSize, "payload_size", 0, "Size of payload in bytes.") |
| cmdRoot.Flags.IntVar(&chunkCntMux, "mux_chunk_count", 0, "Number of chunks to send in background.") |
| cmdRoot.Flags.IntVar(&payloadSizeMux, "mux_payload_size", 0, "Size of payload to send in background.") |
| |
| cmdline.HideGlobalFlagsExcept() |
| cmdline.Main(cmdRoot) |
| } |
| |
| var cmdRoot = &cmdline.Command{ |
| Runner: v23cmd.RunnerFunc(runBenchmark), |
| Name: "benchmark", |
| Short: "Run the benchmark client", |
| Long: "Command benchmark runs the benchmark client.", |
| } |
| |
| func runBenchmark(ctx *context.T, env *cmdline.Env, args []string) error { |
| if chunkCntMux > 0 && payloadSizeMux > 0 { |
| dummyB := testing.B{} |
| _, stop := internal.StartEchoStream(&dummyB, ctx, server, 0, chunkCntMux, payloadSizeMux, nil) |
| defer stop() |
| ctx.Infof("Started background streaming (chunk_size=%d, payload_size=%d)", chunkCntMux, payloadSizeMux) |
| } |
| |
| dummyB := testing.B{} |
| stats := benchmark.NewStats(16) |
| |
| now := time.Now() |
| if chunkCnt == 0 { |
| internal.CallEcho(&dummyB, ctx, server, iterations, payloadSize, stats) |
| } else { |
| internal.CallEchoStream(&dummyB, ctx, server, iterations, chunkCnt, payloadSize, stats) |
| } |
| elapsed := time.Since(now) |
| |
| fmt.Printf("iterations: %d chunk_count: %d payload_size: %d\n", iterations, chunkCnt, payloadSize) |
| fmt.Printf("elapsed time: %v\n", elapsed) |
| stats.Print(env.Stdout) |
| return nil |
| } |