From ec76466da27f6f5cd747137c44d4d8092a35f640 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Mon, 3 Sep 2018 11:31:26 +0200 Subject: [PATCH] Adds % unit to float field trial parser. This can improve readability in some situations and prevents the need to define a parameter as some_value_in_percent. Bug: webrtc:9510 Change-Id: I0959d2b6c463f1bc1cea8e66f0bd5b56380b8c03 Reviewed-on: https://webrtc-review.googlesource.com/97302 Reviewed-by: Karl Wiberg Commit-Queue: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#24538} --- rtc_base/experiments/field_trial_parser.cc | 5 ++++- rtc_base/experiments/field_trial_parser_unittest.cc | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/rtc_base/experiments/field_trial_parser.cc b/rtc_base/experiments/field_trial_parser.cc index 5565c8648c..a2d7f97bde 100644 --- a/rtc_base/experiments/field_trial_parser.cc +++ b/rtc_base/experiments/field_trial_parser.cc @@ -82,7 +82,10 @@ absl::optional ParseTypedParameter(std::string str) { template <> absl::optional ParseTypedParameter(std::string str) { double value; - if (sscanf(str.c_str(), "%lf", &value) == 1) { + char unit[2]{0, 0}; + if (sscanf(str.c_str(), "%lf%1s", &value, unit) >= 1) { + if (unit[0] == '%') + return value / 100; return value; } else { return absl::nullopt; diff --git a/rtc_base/experiments/field_trial_parser_unittest.cc b/rtc_base/experiments/field_trial_parser_unittest.cc index 954909bce4..de977ec8ba 100644 --- a/rtc_base/experiments/field_trial_parser_unittest.cc +++ b/rtc_base/experiments/field_trial_parser_unittest.cc @@ -76,6 +76,15 @@ TEST(FieldTrialParserTest, CanHandleMixedInput) { EXPECT_EQ(exp.ping.Get(), true); EXPECT_EQ(exp.hash.Get(), ""); } +TEST(FieldTrialParserTest, ParsesDoubleParameter) { + FieldTrialParameter double_param("f", 0.0); + ParseFieldTrial({&double_param}, "f:45%"); + EXPECT_EQ(double_param.Get(), 0.45); + ParseFieldTrial({&double_param}, "f:34 %"); + EXPECT_EQ(double_param.Get(), 0.34); + ParseFieldTrial({&double_param}, "f:0.67"); + EXPECT_EQ(double_param.Get(), 0.67); +} TEST(FieldTrialParserTest, IgnoresNewKey) { DummyExperiment exp("Disabled,r:-11,foo"); EXPECT_FALSE(exp.enabled.Get());