From ce7fef0740ebe0e7f92ba1709e1ce04cb5f59b2c Mon Sep 17 00:00:00 2001 From: Chao Mei Date: Fri, 19 Jun 2020 19:09:57 -0700 Subject: [PATCH] Output unconsumed cmdline flags to help using TFLite benchmark tool. PiperOrigin-RevId: 317419402 Change-Id: I599b487a739808bc8f954b798bd54b75c9b715ad --- tensorflow/lite/tools/benchmark/benchmark_model.cc | 7 +++++++ tensorflow/lite/tools/command_line_flags.cc | 11 ++++++++++- tensorflow/lite/tools/command_line_flags.h | 3 +++ tensorflow/lite/tools/command_line_flags_test.cc | 8 ++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/tensorflow/lite/tools/benchmark/benchmark_model.cc b/tensorflow/lite/tools/benchmark/benchmark_model.cc index 2a858e7a326..b67faa8c36b 100644 --- a/tensorflow/lite/tools/benchmark/benchmark_model.cc +++ b/tensorflow/lite/tools/benchmark/benchmark_model.cc @@ -229,6 +229,13 @@ TfLiteStatus BenchmarkModel::ParseFlags(int* argc, char** argv) { TFLITE_LOG(ERROR) << usage; return kTfLiteError; } + + std::string unconsumed_args = + Flags::ArgsToString(*argc, const_cast(argv)); + if (!unconsumed_args.empty()) { + TFLITE_LOG(WARN) << "Unconsumed cmdline flags: " << unconsumed_args; + } + return kTfLiteOk; } diff --git a/tensorflow/lite/tools/command_line_flags.cc b/tensorflow/lite/tools/command_line_flags.cc index 92ddb1622c6..4f646ae27f4 100644 --- a/tensorflow/lite/tools/command_line_flags.cc +++ b/tensorflow/lite/tools/command_line_flags.cc @@ -325,6 +325,15 @@ std::string Flag::GetTypeName() const { usage_text << "\t" << flag.usage_text_ << "\n"; } return usage_text.str(); -} // namespace tflite +} + +/*static*/ std::string Flags::ArgsToString(int argc, const char** argv) { + std::string args; + for (int i = 1; i < argc; ++i) { + args.append(argv[i]); + if (i != argc - 1) args.append(" "); + } + return args; +} } // namespace tflite diff --git a/tensorflow/lite/tools/command_line_flags.h b/tensorflow/lite/tools/command_line_flags.h index 95e64a19e18..4cc09f4b2c5 100644 --- a/tensorflow/lite/tools/command_line_flags.h +++ b/tensorflow/lite/tools/command_line_flags.h @@ -140,6 +140,9 @@ class Flags { // usage_text strings in flag_list[]. static std::string Usage(const std::string& cmdline, const std::vector& flag_list); + + // Return a space separated string containing argv[1, ..., argc-1]. + static std::string ArgsToString(int argc, const char** argv); }; } // namespace tflite diff --git a/tensorflow/lite/tools/command_line_flags_test.cc b/tensorflow/lite/tools/command_line_flags_test.cc index 0216d7a0636..afd1264a0ad 100644 --- a/tensorflow/lite/tools/command_line_flags_test.cc +++ b/tensorflow/lite/tools/command_line_flags_test.cc @@ -356,5 +356,13 @@ TEST(CommandLineFlagsTest, DuplicateFlagsAndArgs) { EXPECT_EQ(argc, 2); } +TEST(CommandLineFlagsTest, ArgsToString) { + int argc = 3; + const char* argv_strings[] = {"program_name", "--some_int=1", "--some_int=2"}; + std::string args = + Flags::ArgsToString(argc, reinterpret_cast(argv_strings)); + EXPECT_EQ("--some_int=1 --some_int=2", args); +} + } // namespace } // namespace tflite