Index: apps/benchmark/run_args.cc |
diff --git a/apps/benchmark/run_args.cc b/apps/benchmark/run_args.cc |
index aa21f9fd6e6658be05d766312e8a949f60bd9ce1..d8037b91423d7cf25da641e2a27663963d7ebba3 100644 |
--- a/apps/benchmark/run_args.cc |
+++ b/apps/benchmark/run_args.cc |
@@ -14,28 +14,50 @@ |
namespace benchmark { |
namespace { |
+bool CheckMeasurementFormat(const std::string& type, |
+ int required_args, |
+ int provided_args) { |
+ if (required_args != provided_args) { |
+ LOG(ERROR) << "Could not parse a measurement of type " << type |
+ << ", expected " << required_args << " while " << provided_args |
+ << " were provided"; |
+ return false; |
+ } |
+ return true; |
+} |
+ |
bool GetMeasurement(const std::string& measurement_spec, Measurement* result) { |
// Measurements are described in the format: |
// <measurement type>/<event category>/<event name>. |
std::vector<std::string> parts; |
base::SplitString(measurement_spec, '/', &parts); |
- if (parts.size() != 3) { |
+ if (parts.size() < 1) { |
LOG(ERROR) << "Could not parse the measurement description: " |
<< measurement_spec; |
return false; |
} |
if (parts[0] == "time_until") { |
- result->type = MeasurementType::TIME_UNTIL; |
+ if (!CheckMeasurementFormat(parts[0], 3, parts.size())) |
+ return false; |
+ *result = |
+ Measurement(MeasurementType::TIME_UNTIL, EventSpec(parts[1], parts[2])); |
+ } else if (parts[0] == "time_between") { |
+ if (!CheckMeasurementFormat(parts[0], 5, parts.size())) |
+ return false; |
+ *result = Measurement(MeasurementType::TIME_BETWEEN, |
+ EventSpec(parts[1], parts[2]), |
+ EventSpec(parts[3], parts[4])); |
} else if (parts[0] == "avg_duration") { |
- result->type = MeasurementType::AVG_DURATION; |
+ if (!CheckMeasurementFormat(parts[0], 3, parts.size())) |
+ return false; |
+ *result = Measurement(MeasurementType::AVG_DURATION, |
+ EventSpec(parts[1], parts[2])); |
} else { |
LOG(ERROR) << "Could not recognize the measurement type: " << parts[0]; |
return false; |
} |
- result->target_event.categories = parts[1]; |
- result->target_event.name = parts[2]; |
result->spec = measurement_spec; |
return true; |
} |