Adds enum field trial parser.

Removed the need to create a custom parser function and reuses some of
the code to reduce binary overhead of enums.

Bug: webrtc:9346
Change-Id: I51c9da713ed5456a86a2afbcf0991477bb83b894
Reviewed-on: https://webrtc-review.googlesource.com/83623
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23752}
This commit is contained in:
Sebastian Jansson
2018-06-26 10:30:16 +02:00
committed by Commit Bot
parent b3f5aed433
commit 2c74d85c16
3 changed files with 85 additions and 17 deletions

View File

@ -34,25 +34,12 @@ struct DummyExperiment {
};
enum class CustomEnum {
kDefault,
kRed,
kBlue,
kDefault = 0,
kRed = 1,
kBlue = 2,
};
} // namespace
// Providing a custom parser for an enum can make the trial string easier to
// read, but also adds more code and makes the string more verbose.
template <>
absl::optional<CustomEnum> ParseTypedParameter<CustomEnum>(std::string str) {
if (str == "default")
return CustomEnum::kDefault;
else if (str == "red")
return CustomEnum::kRed;
else if (str == "blue")
return CustomEnum::kBlue;
return absl::nullopt;
}
TEST(FieldTrialParserTest, ParsesValidParameters) {
DummyExperiment exp("Enabled,f:-1.7,r:2,p:1,h:x7c");
EXPECT_TRUE(exp.enabled.Get());
@ -122,10 +109,17 @@ TEST(FieldTrialParserTest, ParsesOptionalParameters) {
EXPECT_FALSE(optional_string.Get().has_value());
}
TEST(FieldTrialParserTest, ParsesCustomEnumParameter) {
FieldTrialParameter<CustomEnum> my_enum("e", CustomEnum::kDefault);
FieldTrialEnum<CustomEnum> my_enum("e", CustomEnum::kDefault,
{{"default", CustomEnum::kDefault},
{"red", CustomEnum::kRed},
{"blue", CustomEnum::kBlue}});
ParseFieldTrial({&my_enum}, "");
EXPECT_EQ(my_enum.Get(), CustomEnum::kDefault);
ParseFieldTrial({&my_enum}, "e:red");
EXPECT_EQ(my_enum.Get(), CustomEnum::kRed);
ParseFieldTrial({&my_enum}, "e:2");
EXPECT_EQ(my_enum.Get(), CustomEnum::kBlue);
ParseFieldTrial({&my_enum}, "e:5");
EXPECT_EQ(my_enum.Get(), CustomEnum::kBlue);
}
} // namespace webrtc