xref: /aosp_15_r20/external/grpc-grpc/test/cpp/qps/report.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker //
2*cc02d7e2SAndroid Build Coastguard Worker //
3*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2015 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker //
5*cc02d7e2SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker // You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker //
9*cc02d7e2SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker //
11*cc02d7e2SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker // limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker //
17*cc02d7e2SAndroid Build Coastguard Worker //
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker #ifndef GRPC_TEST_CPP_QPS_REPORT_H
20*cc02d7e2SAndroid Build Coastguard Worker #define GRPC_TEST_CPP_QPS_REPORT_H
21*cc02d7e2SAndroid Build Coastguard Worker 
22*cc02d7e2SAndroid Build Coastguard Worker #include <memory>
23*cc02d7e2SAndroid Build Coastguard Worker #include <set>
24*cc02d7e2SAndroid Build Coastguard Worker #include <vector>
25*cc02d7e2SAndroid Build Coastguard Worker 
26*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/channel.h>
27*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/support/config.h>
28*cc02d7e2SAndroid Build Coastguard Worker 
29*cc02d7e2SAndroid Build Coastguard Worker #include "src/proto/grpc/testing/report_qps_scenario_service.grpc.pb.h"
30*cc02d7e2SAndroid Build Coastguard Worker #include "test/cpp/qps/driver.h"
31*cc02d7e2SAndroid Build Coastguard Worker 
32*cc02d7e2SAndroid Build Coastguard Worker namespace grpc {
33*cc02d7e2SAndroid Build Coastguard Worker namespace testing {
34*cc02d7e2SAndroid Build Coastguard Worker 
35*cc02d7e2SAndroid Build Coastguard Worker /// Interface for all reporters.
36*cc02d7e2SAndroid Build Coastguard Worker class Reporter {
37*cc02d7e2SAndroid Build Coastguard Worker  public:
38*cc02d7e2SAndroid Build Coastguard Worker   /// Construct a reporter with the given \a name.
Reporter(const string & name)39*cc02d7e2SAndroid Build Coastguard Worker   explicit Reporter(const string& name) : name_(name) {}
40*cc02d7e2SAndroid Build Coastguard Worker 
~Reporter()41*cc02d7e2SAndroid Build Coastguard Worker   virtual ~Reporter() {}
42*cc02d7e2SAndroid Build Coastguard Worker 
43*cc02d7e2SAndroid Build Coastguard Worker   /// Returns this reporter's name.
44*cc02d7e2SAndroid Build Coastguard Worker   ///
45*cc02d7e2SAndroid Build Coastguard Worker   /// Names are constants, set at construction time.
name()46*cc02d7e2SAndroid Build Coastguard Worker   string name() const { return name_; }
47*cc02d7e2SAndroid Build Coastguard Worker 
48*cc02d7e2SAndroid Build Coastguard Worker   /// Reports QPS for the given \a result.
49*cc02d7e2SAndroid Build Coastguard Worker   virtual void ReportQPS(const ScenarioResult& result) = 0;
50*cc02d7e2SAndroid Build Coastguard Worker 
51*cc02d7e2SAndroid Build Coastguard Worker   /// Reports QPS per core as (YYY/server core).
52*cc02d7e2SAndroid Build Coastguard Worker   virtual void ReportQPSPerCore(const ScenarioResult& result) = 0;
53*cc02d7e2SAndroid Build Coastguard Worker 
54*cc02d7e2SAndroid Build Coastguard Worker   /// Reports latencies for the 50, 90, 95, 99 and 99.9 percentiles, in ms.
55*cc02d7e2SAndroid Build Coastguard Worker   virtual void ReportLatency(const ScenarioResult& result) = 0;
56*cc02d7e2SAndroid Build Coastguard Worker 
57*cc02d7e2SAndroid Build Coastguard Worker   /// Reports system and user time for client and server systems.
58*cc02d7e2SAndroid Build Coastguard Worker   virtual void ReportTimes(const ScenarioResult& result) = 0;
59*cc02d7e2SAndroid Build Coastguard Worker 
60*cc02d7e2SAndroid Build Coastguard Worker   /// Reports server cpu usage.
61*cc02d7e2SAndroid Build Coastguard Worker   virtual void ReportCpuUsage(const ScenarioResult& result) = 0;
62*cc02d7e2SAndroid Build Coastguard Worker 
63*cc02d7e2SAndroid Build Coastguard Worker   /// Reports client and server poll usage inside completion queue.
64*cc02d7e2SAndroid Build Coastguard Worker   virtual void ReportPollCount(const ScenarioResult& result) = 0;
65*cc02d7e2SAndroid Build Coastguard Worker 
66*cc02d7e2SAndroid Build Coastguard Worker   /// Reports queries per cpu-sec.
67*cc02d7e2SAndroid Build Coastguard Worker   virtual void ReportQueriesPerCpuSec(const ScenarioResult& result) = 0;
68*cc02d7e2SAndroid Build Coastguard Worker 
69*cc02d7e2SAndroid Build Coastguard Worker  private:
70*cc02d7e2SAndroid Build Coastguard Worker   const string name_;
71*cc02d7e2SAndroid Build Coastguard Worker };
72*cc02d7e2SAndroid Build Coastguard Worker 
73*cc02d7e2SAndroid Build Coastguard Worker /// A composite for all reporters to be considered.
74*cc02d7e2SAndroid Build Coastguard Worker class CompositeReporter : public Reporter {
75*cc02d7e2SAndroid Build Coastguard Worker  public:
CompositeReporter()76*cc02d7e2SAndroid Build Coastguard Worker   CompositeReporter() : Reporter("CompositeReporter") {}
77*cc02d7e2SAndroid Build Coastguard Worker 
78*cc02d7e2SAndroid Build Coastguard Worker   /// Adds a \a reporter to the composite.
79*cc02d7e2SAndroid Build Coastguard Worker   void add(std::unique_ptr<Reporter> reporter);
80*cc02d7e2SAndroid Build Coastguard Worker 
81*cc02d7e2SAndroid Build Coastguard Worker   void ReportQPS(const ScenarioResult& result) override;
82*cc02d7e2SAndroid Build Coastguard Worker   void ReportQPSPerCore(const ScenarioResult& result) override;
83*cc02d7e2SAndroid Build Coastguard Worker   void ReportLatency(const ScenarioResult& result) override;
84*cc02d7e2SAndroid Build Coastguard Worker   void ReportTimes(const ScenarioResult& result) override;
85*cc02d7e2SAndroid Build Coastguard Worker   void ReportCpuUsage(const ScenarioResult& result) override;
86*cc02d7e2SAndroid Build Coastguard Worker   void ReportPollCount(const ScenarioResult& result) override;
87*cc02d7e2SAndroid Build Coastguard Worker   void ReportQueriesPerCpuSec(const ScenarioResult& result) override;
88*cc02d7e2SAndroid Build Coastguard Worker 
89*cc02d7e2SAndroid Build Coastguard Worker  private:
90*cc02d7e2SAndroid Build Coastguard Worker   std::vector<std::unique_ptr<Reporter> > reporters_;
91*cc02d7e2SAndroid Build Coastguard Worker };
92*cc02d7e2SAndroid Build Coastguard Worker 
93*cc02d7e2SAndroid Build Coastguard Worker /// Reporter to gpr_log(GPR_INFO).
94*cc02d7e2SAndroid Build Coastguard Worker class GprLogReporter : public Reporter {
95*cc02d7e2SAndroid Build Coastguard Worker  public:
GprLogReporter(const string & name)96*cc02d7e2SAndroid Build Coastguard Worker   explicit GprLogReporter(const string& name) : Reporter(name) {}
97*cc02d7e2SAndroid Build Coastguard Worker 
98*cc02d7e2SAndroid Build Coastguard Worker  private:
99*cc02d7e2SAndroid Build Coastguard Worker   void ReportQPS(const ScenarioResult& result) override;
100*cc02d7e2SAndroid Build Coastguard Worker   void ReportQPSPerCore(const ScenarioResult& result) override;
101*cc02d7e2SAndroid Build Coastguard Worker   void ReportLatency(const ScenarioResult& result) override;
102*cc02d7e2SAndroid Build Coastguard Worker   void ReportTimes(const ScenarioResult& result) override;
103*cc02d7e2SAndroid Build Coastguard Worker   void ReportCpuUsage(const ScenarioResult& result) override;
104*cc02d7e2SAndroid Build Coastguard Worker   void ReportPollCount(const ScenarioResult& result) override;
105*cc02d7e2SAndroid Build Coastguard Worker   void ReportQueriesPerCpuSec(const ScenarioResult& result) override;
106*cc02d7e2SAndroid Build Coastguard Worker };
107*cc02d7e2SAndroid Build Coastguard Worker 
108*cc02d7e2SAndroid Build Coastguard Worker /// Dumps the report to a JSON file.
109*cc02d7e2SAndroid Build Coastguard Worker class JsonReporter : public Reporter {
110*cc02d7e2SAndroid Build Coastguard Worker  public:
JsonReporter(const string & name,const string & report_file)111*cc02d7e2SAndroid Build Coastguard Worker   JsonReporter(const string& name, const string& report_file)
112*cc02d7e2SAndroid Build Coastguard Worker       : Reporter(name), report_file_(report_file) {}
113*cc02d7e2SAndroid Build Coastguard Worker 
114*cc02d7e2SAndroid Build Coastguard Worker  private:
115*cc02d7e2SAndroid Build Coastguard Worker   void ReportQPS(const ScenarioResult& result) override;
116*cc02d7e2SAndroid Build Coastguard Worker   void ReportQPSPerCore(const ScenarioResult& result) override;
117*cc02d7e2SAndroid Build Coastguard Worker   void ReportLatency(const ScenarioResult& result) override;
118*cc02d7e2SAndroid Build Coastguard Worker   void ReportTimes(const ScenarioResult& result) override;
119*cc02d7e2SAndroid Build Coastguard Worker   void ReportCpuUsage(const ScenarioResult& result) override;
120*cc02d7e2SAndroid Build Coastguard Worker   void ReportPollCount(const ScenarioResult& result) override;
121*cc02d7e2SAndroid Build Coastguard Worker   void ReportQueriesPerCpuSec(const ScenarioResult& result) override;
122*cc02d7e2SAndroid Build Coastguard Worker 
123*cc02d7e2SAndroid Build Coastguard Worker   const string report_file_;
124*cc02d7e2SAndroid Build Coastguard Worker };
125*cc02d7e2SAndroid Build Coastguard Worker 
126*cc02d7e2SAndroid Build Coastguard Worker class RpcReporter : public Reporter {
127*cc02d7e2SAndroid Build Coastguard Worker  public:
RpcReporter(const string & name,const std::shared_ptr<grpc::Channel> & channel)128*cc02d7e2SAndroid Build Coastguard Worker   RpcReporter(const string& name, const std::shared_ptr<grpc::Channel>& channel)
129*cc02d7e2SAndroid Build Coastguard Worker       : Reporter(name), stub_(ReportQpsScenarioService::NewStub(channel)) {}
130*cc02d7e2SAndroid Build Coastguard Worker 
131*cc02d7e2SAndroid Build Coastguard Worker  private:
132*cc02d7e2SAndroid Build Coastguard Worker   void ReportQPS(const ScenarioResult& result) override;
133*cc02d7e2SAndroid Build Coastguard Worker   void ReportQPSPerCore(const ScenarioResult& result) override;
134*cc02d7e2SAndroid Build Coastguard Worker   void ReportLatency(const ScenarioResult& result) override;
135*cc02d7e2SAndroid Build Coastguard Worker   void ReportTimes(const ScenarioResult& result) override;
136*cc02d7e2SAndroid Build Coastguard Worker   void ReportCpuUsage(const ScenarioResult& result) override;
137*cc02d7e2SAndroid Build Coastguard Worker   void ReportPollCount(const ScenarioResult& result) override;
138*cc02d7e2SAndroid Build Coastguard Worker   void ReportQueriesPerCpuSec(const ScenarioResult& result) override;
139*cc02d7e2SAndroid Build Coastguard Worker 
140*cc02d7e2SAndroid Build Coastguard Worker   std::unique_ptr<ReportQpsScenarioService::Stub> stub_;
141*cc02d7e2SAndroid Build Coastguard Worker };
142*cc02d7e2SAndroid Build Coastguard Worker 
143*cc02d7e2SAndroid Build Coastguard Worker }  // namespace testing
144*cc02d7e2SAndroid Build Coastguard Worker }  // namespace grpc
145*cc02d7e2SAndroid Build Coastguard Worker 
146*cc02d7e2SAndroid Build Coastguard Worker #endif  // GRPC_TEST_CPP_QPS_REPORT_H
147