mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00
WebRTC-DeprecateGlobalFieldTrialString/Enabled/ - part 18/inf
This cl/ creates a constructor for a FieldTrials object that is not backed by the global string. Use with care! Bug: webrtc:10335 Change-Id: I8c48d1e8bb52fef78524d890cc90473355be617f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264461 Commit-Queue: Jonas Oreland <jonaso@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37057}
This commit is contained in:
parent
61dbcd115a
commit
f096e74157
3 changed files with 57 additions and 4 deletions
|
@ -63,7 +63,8 @@ std::atomic<bool> instance_created_{false};
|
|||
namespace webrtc {
|
||||
|
||||
FieldTrials::FieldTrials(const std::string& s)
|
||||
: field_trial_string_(s),
|
||||
: uses_global_(true),
|
||||
field_trial_string_(s),
|
||||
previous_field_trial_string_(webrtc::field_trial::GetFieldTrialString()),
|
||||
key_value_map_(InsertIntoMap(s)) {
|
||||
// TODO(bugs.webrtc.org/10335): Remove the global string!
|
||||
|
@ -72,10 +73,21 @@ FieldTrials::FieldTrials(const std::string& s)
|
|||
<< "Only one instance may be instanciated at any given time!";
|
||||
}
|
||||
|
||||
std::unique_ptr<FieldTrials> FieldTrials::CreateNoGlobal(const std::string& s) {
|
||||
return std::unique_ptr<FieldTrials>(new FieldTrials(s, true));
|
||||
}
|
||||
|
||||
FieldTrials::FieldTrials(const std::string& s, bool)
|
||||
: uses_global_(false),
|
||||
previous_field_trial_string_(nullptr),
|
||||
key_value_map_(InsertIntoMap(s)) {}
|
||||
|
||||
FieldTrials::~FieldTrials() {
|
||||
// TODO(bugs.webrtc.org/10335): Remove the global string!
|
||||
field_trial::InitFieldTrialsFromString(previous_field_trial_string_);
|
||||
RTC_CHECK(instance_created_.exchange(false));
|
||||
if (uses_global_) {
|
||||
field_trial::InitFieldTrialsFromString(previous_field_trial_string_);
|
||||
RTC_CHECK(instance_created_.exchange(false));
|
||||
}
|
||||
}
|
||||
|
||||
std::string FieldTrials::Lookup(absl::string_view key) const {
|
||||
|
@ -86,7 +98,10 @@ std::string FieldTrials::Lookup(absl::string_view key) const {
|
|||
// Check the global string so that programs using
|
||||
// a mix between FieldTrials and the global string continue to work
|
||||
// TODO(bugs.webrtc.org/10335): Remove the global string!
|
||||
return field_trial::FindFullName(std::string(key));
|
||||
if (uses_global_) {
|
||||
return field_trial::FindFullName(std::string(key));
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#ifndef API_FIELD_TRIALS_H_
|
||||
#define API_FIELD_TRIALS_H_
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "absl/strings/string_view.h"
|
||||
|
@ -32,14 +33,21 @@ namespace webrtc {
|
|||
//
|
||||
// NOTE: Creating multiple FieldTrials-object is currently prohibited
|
||||
// until we remove the global string (TODO(bugs.webrtc.org/10335))
|
||||
// (unless using CreateNoGlobal):
|
||||
class FieldTrials : public FieldTrialsView {
|
||||
public:
|
||||
explicit FieldTrials(const std::string& s);
|
||||
~FieldTrials();
|
||||
|
||||
// Create a FieldTrials object that is not reading/writing from
|
||||
// global variable (i.e can not be used for all parts of webrtc).
|
||||
static std::unique_ptr<FieldTrials> CreateNoGlobal(const std::string& s);
|
||||
|
||||
std::string Lookup(absl::string_view key) const override;
|
||||
|
||||
private:
|
||||
explicit FieldTrials(const std::string& s, bool);
|
||||
const bool uses_global_;
|
||||
const std::string field_trial_string_;
|
||||
const char* const previous_field_trial_string_;
|
||||
const flat_map<std::string, std::string> key_value_map_;
|
||||
|
|
|
@ -70,4 +70,34 @@ TEST(FieldTrials, SequentialInstances) {
|
|||
{ FieldTrials f("SomeOtherString/Enabled/"); }
|
||||
}
|
||||
|
||||
TEST(FieldTrials, NoGlobals) {
|
||||
auto f1 = FieldTrials::CreateNoGlobal("SomeString/Enabled/");
|
||||
EXPECT_TRUE(f1);
|
||||
}
|
||||
|
||||
TEST(FieldTrials, SeveralNoGlobals) {
|
||||
auto f1 = FieldTrials::CreateNoGlobal("SomeString/Enabled/");
|
||||
auto f2 = FieldTrials::CreateNoGlobal("SomeOtherString/Enabled/");
|
||||
ASSERT_TRUE(f1);
|
||||
ASSERT_TRUE(f2);
|
||||
|
||||
EXPECT_TRUE(f1->IsEnabled("SomeString"));
|
||||
EXPECT_FALSE(f1->IsEnabled("SomeOtherString"));
|
||||
|
||||
EXPECT_FALSE(f2->IsEnabled("SomeString"));
|
||||
EXPECT_TRUE(f2->IsEnabled("SomeOtherString"));
|
||||
}
|
||||
|
||||
TEST(FieldTrials, GlobalAndNoGlobals) {
|
||||
FieldTrials f0("SomeString/Enabled/");
|
||||
auto f1 = FieldTrials::CreateNoGlobal("SomeOtherString/Enabled/");
|
||||
ASSERT_TRUE(f1);
|
||||
|
||||
EXPECT_TRUE(f0.IsEnabled("SomeString"));
|
||||
EXPECT_FALSE(f0.IsEnabled("SomeOtherString"));
|
||||
|
||||
EXPECT_FALSE(f1->IsEnabled("SomeString"));
|
||||
EXPECT_TRUE(f1->IsEnabled("SomeOtherString"));
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
|
Loading…
Reference in a new issue