From c5d54397f6da490442f93ae880b361c45969f6b1 Mon Sep 17 00:00:00 2001 From: Giorgio Arena Date: Tue, 31 Oct 2017 15:18:49 +0000 Subject: COMPMID-621 Add output options for json and pretty files Change-Id: Iefb7a1025507ae1f01ae3cd5e9abf7c2eb74f306 Reviewed-on: http://mpd-gerrit.cambridge.arm.com/93863 Reviewed-by: Anthony Barbier Tested-by: Kaizen --- tests/main.cpp | 88 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 23 deletions(-) (limited to 'tests/main.cpp') diff --git a/tests/main.cpp b/tests/main.cpp index 1f1f33a156..70c7b6cb6d 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -120,13 +120,13 @@ int main(int argc, char **argv) auto threads = parser.add_option>("threads", 1); threads->set_help("Number of threads to use"); auto log_format = parser.add_option>("log-format", supported_log_formats, framework::LogFormat::PRETTY); - log_format->set_help("Output format for measurements and failures"); + log_format->set_help("Output format for measurements and failures (affects only log-file)"); auto filter = parser.add_option>("filter", ".*"); filter->set_help("Regular expression to select test cases"); auto filter_id = parser.add_option>("filter-id"); filter_id->set_help("List of test ids. ... can be used to define a range."); auto log_file = parser.add_option>("log-file"); - log_file->set_help("Write output to file instead of to the console"); + log_file->set_help("Write output to file instead of to the console (affected by log-format)"); auto log_level = parser.add_option>("log-level", supported_log_levels, framework::LogLevel::ALL); log_level->set_help("Verbosity of the output"); auto throw_errors = parser.add_option("throw-errors"); @@ -145,6 +145,12 @@ int main(int argc, char **argv) error_on_missing_assets->set_help("Mark a test as failed instead of skipping it when assets are missing"); auto assets = parser.add_positional_option>("assets"); assets->set_help("Path to the assets directory"); + auto pretty_console = parser.add_option("pretty-console", true); + pretty_console->set_help("Produce pretty output on the console"); + auto json_file = parser.add_option>("json-file"); + json_file->set_help("Write output to a json file."); + auto pretty_file = parser.add_option>("pretty-file"); + pretty_file->set_help("Write output to a text file"); try { @@ -156,9 +162,17 @@ int main(int argc, char **argv) return 0; } - std::unique_ptr printer; - std::ofstream log_stream; + std::vector> printers; + std::vector> log_streams; + + if(pretty_console->value() && !(log_file->is_set() || log_format->value() != framework::LogFormat::PRETTY)) + { + auto pretty_printer = support::cpp14::make_unique(); + pretty_printer->set_color_output(color_output->value()); + printers.push_back(std::move(pretty_printer)); + } + std::unique_ptr printer; switch(log_format->value()) { case framework::LogFormat::JSON: @@ -168,43 +182,67 @@ int main(int argc, char **argv) break; case framework::LogFormat::PRETTY: default: - { - auto pretty_printer = support::cpp14::make_unique(); - pretty_printer->set_color_output(color_output->value()); - printer = std::move(pretty_printer); + printer = support::cpp14::make_unique(); break; - } } - if(printer != nullptr) + if(log_file->is_set()) { - if(log_file->is_set()) + log_streams.push_back(std::make_shared(log_file->value())); + if(printer != nullptr) { - log_stream.open(log_file->value()); - printer->set_stream(log_stream); + printer->set_stream(*log_streams.back().get()); } } + if(printer != nullptr) + { + printers.push_back(std::move(printer)); + } + + if(json_file->is_set()) + { + printers.push_back(support::cpp14::make_unique()); + log_streams.push_back(std::make_shared(json_file->value())); + printers.back()->set_stream(*log_streams.back().get()); + } + + if(pretty_file->is_set()) + { + printers.push_back(support::cpp14::make_unique()); + log_streams.push_back(std::make_shared(pretty_file->value())); + printers.back()->set_stream(*log_streams.back().get()); + } + Scheduler::get().set_num_threads(threads->value()); if(log_level->value() > framework::LogLevel::NONE) { - printer->print_global_header(); + for(auto &p : printers) + { + p->print_global_header(); + } } if(log_level->value() >= framework::LogLevel::CONFIG) { - printer->print_entry("Seed", support::cpp11::to_string(seed->value())); - printer->print_entry("Iterations", support::cpp11::to_string(iterations->value())); - printer->print_entry("Threads", support::cpp11::to_string(threads->value())); + for(auto &p : printers) { - using support::cpp11::to_string; - printer->print_entry("Dataset mode", to_string(dataset_mode->value())); + p->print_entry("Seed", support::cpp11::to_string(seed->value())); + p->print_entry("Iterations", support::cpp11::to_string(iterations->value())); + p->print_entry("Threads", support::cpp11::to_string(threads->value())); + { + using support::cpp11::to_string; + p->print_entry("Dataset mode", to_string(dataset_mode->value())); + } } } framework.init(instruments->value(), iterations->value(), dataset_mode->value(), filter->value(), filter_id->value(), log_level->value()); - framework.add_printer(printer.get()); + for(auto &p : printers) + { + framework.add_printer(p.get()); + } framework.set_throw_errors(throw_errors->value()); framework.set_stop_on_error(stop_on_error->value()); framework.set_error_on_missing_assets(error_on_missing_assets->value()); @@ -226,10 +264,11 @@ int main(int argc, char **argv) framework::Profiler profiler = framework.get_profiler(); profiler.start(); profiler.stop(); - if(printer != nullptr) + for(auto &p : printers) { - printer->print_measurements(profiler.measurements()); + p->print_measurements(profiler.measurements()); } + return 0; } @@ -244,7 +283,10 @@ int main(int argc, char **argv) if(log_level->value() > framework::LogLevel::NONE) { - printer->print_global_footer(); + for(auto &p : printers) + { + p->print_global_footer(); + } } return (success ? 0 : 1); -- cgit v1.2.1