| // Copyright 2019 The Fuchsia Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include <lib/cmdline/args_parser.h> | 
 |  | 
 | #include <gtest/gtest.h> | 
 |  | 
 | #include "src/developer/debug/zxdb/common/perf_test.h" | 
 |  | 
 | namespace { | 
 |  | 
 | struct CommandLineOptions { | 
 |   std::string out_file; | 
 | }; | 
 |  | 
 | }  // namespace | 
 |  | 
 | int main(int argc, char **argv) { | 
 |   testing::InitGoogleTest(&argc, argv); | 
 |  | 
 |   // Set up for command line parsing. | 
 |   cmdline::ArgsParser<CommandLineOptions> parser; | 
 |   parser.AddSwitch("out", 0, "--out\n  [required] JSON file to write perf stats to.", | 
 |                    &CommandLineOptions::out_file); | 
 |  | 
 |   bool requested_help = false; | 
 |   parser.AddGeneralSwitch("help", 0, "--help\n   Print help", | 
 |                           [&requested_help]() { requested_help = true; }); | 
 |  | 
 |   // Parse the command line. | 
 |   CommandLineOptions options; | 
 |   std::vector<std::string> params; | 
 |   if (auto status = parser.Parse(argc, const_cast<const char **>(argv), &options, ¶ms); | 
 |       status.has_error()) { | 
 |     fprintf(stderr, "Error: %s\n", status.error_message().c_str()); | 
 |     return 1; | 
 |   } | 
 |   if (requested_help) { | 
 |     // Gtest will have printed its own help in response to --help, and this | 
 |     // gets appended. | 
 |     fprintf(stderr, "\n\nPerf test options:\n\n%s\n", parser.GetHelp().c_str()); | 
 |     return 0; | 
 |   } | 
 |  | 
 |   // Initialize the perf test system. | 
 |   if (options.out_file.empty()) { | 
 |     fprintf(stderr, "Parameter --out=<output_file> is required.\n"); | 
 |     return 1; | 
 |   } | 
 |   if (!zxdb::InitPerfLog(options.out_file)) { | 
 |     fprintf(stderr, "Failed to initialize perf log.\n"); | 
 |     return 1; | 
 |   } | 
 |  | 
 |   int result = RUN_ALL_TESTS(); | 
 |  | 
 |   zxdb::FinalizePerfLog(); | 
 |   return result; | 
 | } |