Improvements to reporting mechanism based on comments.

Turned the reporter into a composite, much cleaner arch.
diff --git a/test/cpp/util/benchmark_config.cc b/test/cpp/util/benchmark_config.cc
index 914afa9..1b15ddc 100644
--- a/test/cpp/util/benchmark_config.cc
+++ b/test/cpp/util/benchmark_config.cc
@@ -51,12 +51,18 @@
   ParseCommandLineFlags(argc, argv, remove_flags);
 }
 
-std::vector<std::unique_ptr<Reporter> > InitBenchmarkReporters() {
-  std::vector<std::unique_ptr<Reporter> > reporters;
+static std::shared_ptr<Reporter> InitBenchmarkReporters() {
+  auto* composite_reporter = new CompositeReporter;
   if (FLAGS_enable_log_reporter) {
-    reporters.emplace_back(new GprLogReporter("LogReporter"));
+    composite_reporter->add(
+        std::unique_ptr<Reporter>(new GprLogReporter("LogReporter")));
   }
-  return reporters;
+  return std::shared_ptr<Reporter>(composite_reporter);
+}
+
+const std::shared_ptr<Reporter>& GetReporter() {
+  static std::shared_ptr<Reporter> reporter(InitBenchmarkReporters());
+  return reporter;
 }
 
 }  // namespace testing
diff --git a/test/cpp/util/benchmark_config.h b/test/cpp/util/benchmark_config.h
index efbcad8..3a3a6d6 100644
--- a/test/cpp/util/benchmark_config.h
+++ b/test/cpp/util/benchmark_config.h
@@ -43,7 +43,13 @@
 namespace testing {
 
 void InitBenchmark(int* argc, char*** argv, bool remove_flags);
-std::vector<std::unique_ptr<Reporter> > InitBenchmarkReporters();
+
+/** Returns the benchmark Reporter instance.
+ *
+ * The returned instane will take care of generating reports for all the actual
+ * reporters configured via the "enable_*_reporter" command line flags (see
+ * benchmark_config.cc). */
+const std::shared_ptr<Reporter>& GetReporter();
 
 }  // namespace testing
 }  // namespace grpc