|  | @@ -40,6 +40,7 @@
 | 
	
		
			
				|  |  |  #include "test/cpp/qps/histogram.h"
 | 
	
		
			
				|  |  |  #include "test/cpp/qps/qps_worker.h"
 | 
	
		
			
				|  |  |  #include "test/cpp/qps/stats.h"
 | 
	
		
			
				|  |  | +#include "test/cpp/util/test_credentials_provider.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  using std::list;
 | 
	
		
			
				|  |  |  using std::thread;
 | 
	
	
		
			
				|  | @@ -172,13 +173,27 @@ static void postprocess_scenario_result(ScenarioResult* result) {
 | 
	
		
			
				|  |  |        sum(result->client_stats(), CliPollCount) / histogram.Count());
 | 
	
		
			
				|  |  |    result->mutable_summary()->set_server_polls_per_request(
 | 
	
		
			
				|  |  |        sum(result->server_stats(), SvrPollCount) / histogram.Count());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  auto server_queries_per_cpu_sec =
 | 
	
		
			
				|  |  | +      histogram.Count() /
 | 
	
		
			
				|  |  | +      (sum(result->server_stats(), ServerSystemTime) +
 | 
	
		
			
				|  |  | +       sum(result->server_stats(), ServerUserTime));
 | 
	
		
			
				|  |  | +  auto client_queries_per_cpu_sec =
 | 
	
		
			
				|  |  | +      histogram.Count() /
 | 
	
		
			
				|  |  | +      (sum(result->client_stats(), SystemTime) +
 | 
	
		
			
				|  |  | +       sum(result->client_stats(), UserTime));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  result->mutable_summary()->set_server_queries_per_cpu_sec(
 | 
	
		
			
				|  |  | +      server_queries_per_cpu_sec);
 | 
	
		
			
				|  |  | +  result->mutable_summary()->set_client_queries_per_cpu_sec(
 | 
	
		
			
				|  |  | +      client_queries_per_cpu_sec);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  std::unique_ptr<ScenarioResult> RunScenario(
 | 
	
		
			
				|  |  |      const ClientConfig& initial_client_config, size_t num_clients,
 | 
	
		
			
				|  |  |      const ServerConfig& initial_server_config, size_t num_servers,
 | 
	
		
			
				|  |  |      int warmup_seconds, int benchmark_seconds, int spawn_local_worker_count,
 | 
	
		
			
				|  |  | -    const char* qps_server_target_override) {
 | 
	
		
			
				|  |  | +    const char* qps_server_target_override, const char* credential_type) {
 | 
	
		
			
				|  |  |    // Log everything from the driver
 | 
	
		
			
				|  |  |    gpr_set_log_verbosity(GPR_LOG_SEVERITY_DEBUG);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -214,7 +229,7 @@ std::unique_ptr<ScenarioResult> RunScenario(
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      int driver_port = grpc_pick_unused_port_or_die();
 | 
	
		
			
				|  |  | -    local_workers.emplace_back(new QpsWorker(driver_port));
 | 
	
		
			
				|  |  | +    local_workers.emplace_back(new QpsWorker(driver_port, 0, credential_type));
 | 
	
		
			
				|  |  |      char addr[256];
 | 
	
		
			
				|  |  |      sprintf(addr, "localhost:%d", driver_port);
 | 
	
		
			
				|  |  |      if (spawn_local_worker_count < 0) {
 | 
	
	
		
			
				|  | @@ -246,12 +261,15 @@ std::unique_ptr<ScenarioResult> RunScenario(
 | 
	
		
			
				|  |  |    };
 | 
	
		
			
				|  |  |    std::vector<ServerData> servers(num_servers);
 | 
	
		
			
				|  |  |    std::unordered_map<string, std::deque<int>> hosts_cores;
 | 
	
		
			
				|  |  | +  ChannelArguments channel_args;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    for (size_t i = 0; i < num_servers; i++) {
 | 
	
		
			
				|  |  |      gpr_log(GPR_INFO, "Starting server on %s (worker #%" PRIuPTR ")",
 | 
	
		
			
				|  |  |              workers[i].c_str(), i);
 | 
	
		
			
				|  |  |      servers[i].stub = WorkerService::NewStub(
 | 
	
		
			
				|  |  | -        CreateChannel(workers[i], InsecureChannelCredentials()));
 | 
	
		
			
				|  |  | +        CreateChannel(workers[i],
 | 
	
		
			
				|  |  | +                      GetCredentialsProvider()->GetChannelCredentials(
 | 
	
		
			
				|  |  | +                          credential_type, &channel_args)));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      ServerConfig server_config = initial_server_config;
 | 
	
		
			
				|  |  |      if (server_config.core_limit() != 0) {
 | 
	
	
		
			
				|  | @@ -298,7 +316,9 @@ std::unique_ptr<ScenarioResult> RunScenario(
 | 
	
		
			
				|  |  |      gpr_log(GPR_INFO, "Starting client on %s (worker #%" PRIuPTR ")",
 | 
	
		
			
				|  |  |              worker.c_str(), i + num_servers);
 | 
	
		
			
				|  |  |      clients[i].stub = WorkerService::NewStub(
 | 
	
		
			
				|  |  | -        CreateChannel(worker, InsecureChannelCredentials()));
 | 
	
		
			
				|  |  | +        CreateChannel(worker,
 | 
	
		
			
				|  |  | +                      GetCredentialsProvider()->GetChannelCredentials(
 | 
	
		
			
				|  |  | +                          credential_type, &channel_args)));
 | 
	
		
			
				|  |  |      ClientConfig per_client_config = client_config;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (initial_client_config.core_limit() != 0) {
 | 
	
	
		
			
				|  | @@ -483,16 +503,20 @@ std::unique_ptr<ScenarioResult> RunScenario(
 | 
	
		
			
				|  |  |    return result;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -bool RunQuit() {
 | 
	
		
			
				|  |  | +bool RunQuit(const char* credential_type) {
 | 
	
		
			
				|  |  |    // Get client, server lists
 | 
	
		
			
				|  |  |    bool result = true;
 | 
	
		
			
				|  |  |    auto workers = get_workers("QPS_WORKERS");
 | 
	
		
			
				|  |  |    if (workers.size() == 0) {
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  ChannelArguments channel_args;
 | 
	
		
			
				|  |  |    for (size_t i = 0; i < workers.size(); i++) {
 | 
	
		
			
				|  |  |      auto stub = WorkerService::NewStub(
 | 
	
		
			
				|  |  | -        CreateChannel(workers[i], InsecureChannelCredentials()));
 | 
	
		
			
				|  |  | +        CreateChannel(workers[i],
 | 
	
		
			
				|  |  | +                      GetCredentialsProvider()->GetChannelCredentials(
 | 
	
		
			
				|  |  | +                          credential_type, &channel_args)));
 | 
	
		
			
				|  |  |      Void dummy;
 | 
	
		
			
				|  |  |      grpc::ClientContext ctx;
 | 
	
		
			
				|  |  |      ctx.set_wait_for_ready(true);
 |