aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/cpp/microbenchmarks
diff options
context:
space:
mode:
authorGravatar Jim King <jsking@google.com>2018-06-18 17:01:26 -0700
committerGravatar GitHub <noreply@github.com>2018-06-18 17:01:26 -0700
commit01cbab60f3602d353a73d139204fd0f5058a5c4a (patch)
tree3384420ab3dcf00513a03954159a84b8556ed87d /test/cpp/microbenchmarks
parent34e7515cc62dffab608d655a66303eb7476aa29f (diff)
parentf9f0b54d381eb0aa5828c2190a7fd0cc1b949da9 (diff)
Merge pull request #15070 from Vizerai/filter_port
Adding opencensus grpc plugin with bazel support.
Diffstat (limited to 'test/cpp/microbenchmarks')
-rw-r--r--test/cpp/microbenchmarks/BUILD12
-rw-r--r--test/cpp/microbenchmarks/bm_opencensus_plugin.cc118
2 files changed, 130 insertions, 0 deletions
diff --git a/test/cpp/microbenchmarks/BUILD b/test/cpp/microbenchmarks/BUILD
index d51a0e3dc5..7b27aed4c3 100644
--- a/test/cpp/microbenchmarks/BUILD
+++ b/test/cpp/microbenchmarks/BUILD
@@ -149,3 +149,15 @@ grpc_cc_binary(
srcs = ["bm_chttp2_hpack.cc"],
deps = [":helpers"],
)
+
+grpc_cc_binary(
+ name = "bm_opencensus_plugin",
+ testonly = 1,
+ srcs = ["bm_opencensus_plugin.cc"],
+ language = "C++",
+ deps = [
+ ":helpers",
+ "//:grpc_opencensus_plugin",
+ "//src/proto/grpc/testing:echo_proto",
+ ],
+)
diff --git a/test/cpp/microbenchmarks/bm_opencensus_plugin.cc b/test/cpp/microbenchmarks/bm_opencensus_plugin.cc
new file mode 100644
index 0000000000..9d42eb891d
--- /dev/null
+++ b/test/cpp/microbenchmarks/bm_opencensus_plugin.cc
@@ -0,0 +1,118 @@
+/*
+ *
+ * Copyright 2018 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.
+ *
+ */
+
+#include <benchmark/benchmark.h>
+#include <string>
+#include <thread> // NOLINT
+
+#include "absl/base/call_once.h"
+#include "absl/strings/str_cat.h"
+#include "include/grpc++/grpc++.h"
+#include "opencensus/stats/stats.h"
+#include "src/cpp/ext/filters/census/grpc_plugin.h"
+#include "src/proto/grpc/testing/echo.grpc.pb.h"
+#include "test/cpp/microbenchmarks/helpers.h"
+
+absl::once_flag once;
+void RegisterOnce() { absl::call_once(once, grpc::RegisterOpenCensusPlugin); }
+
+class EchoServer final : public grpc::testing::EchoTestService::Service {
+ grpc::Status Echo(grpc::ServerContext* context,
+ const grpc::testing::EchoRequest* request,
+ grpc::testing::EchoResponse* response) override {
+ if (request->param().expected_error().code() == 0) {
+ response->set_message(request->message());
+ return grpc::Status::OK;
+ } else {
+ return grpc::Status(static_cast<grpc::StatusCode>(
+ request->param().expected_error().code()),
+ "");
+ }
+ }
+};
+
+// An EchoServerThread object creates an EchoServer on a separate thread and
+// shuts down the server and thread when it goes out of scope.
+class EchoServerThread final {
+ public:
+ EchoServerThread() {
+ grpc::ServerBuilder builder;
+ int port;
+ builder.AddListeningPort("[::]:0", grpc::InsecureServerCredentials(),
+ &port);
+ builder.RegisterService(&service_);
+ server_ = builder.BuildAndStart();
+ if (server_ == nullptr || port == 0) {
+ std::abort();
+ }
+ server_address_ = absl::StrCat("[::]:", port);
+ server_thread_ = std::thread(&EchoServerThread::RunServerLoop, this);
+ }
+
+ ~EchoServerThread() {
+ server_->Shutdown();
+ server_thread_.join();
+ }
+
+ const std::string& address() { return server_address_; }
+
+ private:
+ void RunServerLoop() { server_->Wait(); }
+
+ std::string server_address_;
+ EchoServer service_;
+ std::unique_ptr<grpc::Server> server_;
+ std::thread server_thread_;
+};
+
+static void BM_E2eLatencyCensusDisabled(benchmark::State& state) {
+ EchoServerThread server;
+ std::unique_ptr<grpc::testing::EchoTestService::Stub> stub =
+ grpc::testing::EchoTestService::NewStub(grpc::CreateChannel(
+ server.address(), grpc::InsecureChannelCredentials()));
+
+ grpc::testing::EchoResponse response;
+ for (auto _ : state) {
+ grpc::testing::EchoRequest request;
+ grpc::ClientContext context;
+ grpc::Status status = stub->Echo(&context, request, &response);
+ }
+}
+BENCHMARK(BM_E2eLatencyCensusDisabled);
+
+static void BM_E2eLatencyCensusEnabled(benchmark::State& state) {
+ RegisterOnce();
+ // This we can safely repeat, and doing so clears accumulated data to avoid
+ // initialization costs varying between runs.
+ grpc::RegisterOpenCensusViewsForExport();
+
+ EchoServerThread server;
+ std::unique_ptr<grpc::testing::EchoTestService::Stub> stub =
+ grpc::testing::EchoTestService::NewStub(grpc::CreateChannel(
+ server.address(), grpc::InsecureChannelCredentials()));
+
+ grpc::testing::EchoResponse response;
+ for (auto _ : state) {
+ grpc::testing::EchoRequest request;
+ grpc::ClientContext context;
+ grpc::Status status = stub->Echo(&context, request, &response);
+ }
+}
+BENCHMARK(BM_E2eLatencyCensusEnabled);
+
+BENCHMARK_MAIN();