Delete field_trial::FindFullName
Thus remove support for providing field trials implementation link-time.
Bug: webrtc:42220378
Change-Id: Ifd1240d81485820831195ebb915a3037d7dd8986
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/396880
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45273}
diff --git a/api/transport/field_trial_based_config.cc b/api/transport/field_trial_based_config.cc
index bd9313a..bd9adaa 100644
--- a/api/transport/field_trial_based_config.cc
+++ b/api/transport/field_trial_based_config.cc
@@ -9,6 +9,7 @@
*/
#include "api/transport/field_trial_based_config.h"
+#include <cstddef>
#include <string>
#include "absl/strings/string_view.h"
@@ -18,7 +19,35 @@
std::string FieldTrialBasedConfig::GetValue(absl::string_view key) const {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- return field_trial::FindFullName(std::string(key));
+ const char* global_field_trial_string = field_trial::GetFieldTrialString();
#pragma clang diagnostic pop
+
+ if (global_field_trial_string == nullptr)
+ return std::string();
+
+ absl::string_view trials_string(global_field_trial_string);
+ if (trials_string.empty())
+ return std::string();
+
+ size_t next_item = 0;
+ while (next_item < trials_string.length()) {
+ // Find next name/value pair in field trial configuration string.
+ size_t field_name_end = trials_string.find('/', next_item);
+ if (field_name_end == trials_string.npos || field_name_end == next_item)
+ break;
+ size_t field_value_end = trials_string.find('/', field_name_end + 1);
+ if (field_value_end == trials_string.npos ||
+ field_value_end == field_name_end + 1)
+ break;
+ absl::string_view field_name =
+ trials_string.substr(next_item, field_name_end - next_item);
+ absl::string_view field_value = trials_string.substr(
+ field_name_end + 1, field_value_end - field_name_end - 1);
+ next_item = field_value_end + 1;
+
+ if (key == field_name)
+ return std::string(field_value);
+ }
+ return std::string();
}
} // namespace webrtc
diff --git a/native-api.md b/native-api.md
index 6644520..ec100a3 100644
--- a/native-api.md
+++ b/native-api.md
@@ -84,18 +84,6 @@
argument `rtc_builtin_ssl_root_certificates` to false and GN will define the
macro for you.
-## `WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT`
-If you want to provide your own implementation of `webrtc::field_trial` functions
-(more info [here][field_trial_h]) you will have to exclude WebRTC's default
-implementation.
-
-You can achieve this by defining the preprocessor macro
-`WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT`. If you use GN, you can just set the GN
-argument `rtc_exclude_field_trial_default` to true and GN will define the
-macro for you.
-
-[field_trial_h]: https://webrtc.googlesource.com/src/+/main/system_wrappers/include/field_trial.h
-
## `WEBRTC_EXCLUDE_METRICS_DEFAULT`
If you want to provide your own implementation of `webrtc::metrics` functions
(more info [here][metrics_h]) you will have to exclude WebRTC's default
diff --git a/system_wrappers/BUILD.gn b/system_wrappers/BUILD.gn
index 52efbf7..822b565 100644
--- a/system_wrappers/BUILD.gn
+++ b/system_wrappers/BUILD.gn
@@ -51,16 +51,10 @@
"include/field_trial.h",
"source/field_trial.cc",
]
- if (rtc_exclude_field_trial_default) {
- defines = [ "WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT" ]
- }
deps = [
- "../experiments:registered_field_trials",
"../rtc_base:checks",
"../rtc_base:logging",
"../rtc_base:stringutils",
- "../rtc_base/containers:flat_set",
- "//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/strings:string_view",
]
}
diff --git a/system_wrappers/include/field_trial.h b/system_wrappers/include/field_trial.h
index 3647c35..ee70cbb 100644
--- a/system_wrappers/include/field_trial.h
+++ b/system_wrappers/include/field_trial.h
@@ -25,14 +25,6 @@
namespace webrtc {
namespace field_trial {
-// Returns the group name chosen for the named trial, or the empty string
-// if the trial does not exists.
-//
-// Note: To keep things tidy append all the trial names with WebRTC.
-// TODO: bugs.webrtc.org/42220378 - Remove from api after August 1, 2025.
-[[deprecated]]
-std::string FindFullName(absl::string_view name);
-
// Optionally initialize field trial from a string.
// This method can be called at most once before any other call into webrtc.
// E.g. before the peer connection factory is constructed.
diff --git a/system_wrappers/source/field_trial.cc b/system_wrappers/source/field_trial.cc
index 569e6cb..b426f42 100644
--- a/system_wrappers/source/field_trial.cc
+++ b/system_wrappers/source/field_trial.cc
@@ -15,15 +15,11 @@
#include <utility>
#include <vector>
-#include "absl/algorithm/container.h" // IWYU pragma: keep
#include "absl/strings/string_view.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
#include "rtc_base/string_encode.h"
-// Generated file.
-#include "experiments/registered_field_trials.h" // IWYU pragma: keep
-
// Simple field trial implementation, which allows client to
// specify desired flags in InitFieldTrialsFromString.
namespace webrtc {
@@ -110,48 +106,6 @@
return merged;
}
-#ifndef WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT
-std::string FindFullName(absl::string_view name) {
-#if WEBRTC_STRICT_FIELD_TRIALS == 1
- RTC_DCHECK(absl::c_linear_search(kRegisteredFieldTrials, name))
- << name << " is not registered, see g3doc/field-trials.md.";
-#elif WEBRTC_STRICT_FIELD_TRIALS == 2
- RTC_LOG_IF(LS_WARNING, !absl::c_linear_search(kRegisteredFieldTrials, name))
- << name << " is not registered, see g3doc/field-trials.md.";
-#endif
-
- if (trials_init_string == nullptr)
- return std::string();
-
- absl::string_view trials_string(trials_init_string);
- if (trials_string.empty())
- return std::string();
-
- size_t next_item = 0;
- while (next_item < trials_string.length()) {
- // Find next name/value pair in field trial configuration string.
- size_t field_name_end =
- trials_string.find(kPersistentStringSeparator, next_item);
- if (field_name_end == trials_string.npos || field_name_end == next_item)
- break;
- size_t field_value_end =
- trials_string.find(kPersistentStringSeparator, field_name_end + 1);
- if (field_value_end == trials_string.npos ||
- field_value_end == field_name_end + 1)
- break;
- absl::string_view field_name =
- trials_string.substr(next_item, field_name_end - next_item);
- absl::string_view field_value = trials_string.substr(
- field_name_end + 1, field_value_end - field_name_end - 1);
- next_item = field_value_end + 1;
-
- if (name == field_name)
- return std::string(field_value);
- }
- return std::string();
-}
-#endif // WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT
-
// Optionally initialize field trial from a string.
void InitFieldTrialsFromString(const char* trials_string) {
RTC_LOG(LS_INFO) << "Setting field trial string:" << trials_string;
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index 6bdaf14..9d61ce6 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -19,10 +19,9 @@
]
# When WebRTC fuzzer tests are built on Chromium bots they need to link
- # with Chromium's implementation of metrics, field trial, and system time.
+ # with Chromium's implementation of metrics and system time.
if (build_with_chromium) {
deps += [
- "../../../webrtc_overrides:field_trial",
"../../../webrtc_overrides:metrics",
"../../../webrtc_overrides:system_time",
]
diff --git a/webrtc.gni b/webrtc.gni
index 112233b..481a652 100644
--- a/webrtc.gni
+++ b/webrtc.gni
@@ -69,18 +69,9 @@
# annotated symbols.
rtc_enable_objc_symbol_export = rtc_enable_symbol_export
- # Setting this to true will define WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT which
- # will tell the pre-processor to remove the default definition of symbols
- # needed to use field_trial. In that case a new implementation needs to be
- # provided.
- if (build_with_chromium) {
- # When WebRTC is built as part of Chromium it should exclude the default
- # implementation of field_trial unless it is building for NACL or
- # Chromecast.
- rtc_exclude_field_trial_default = !is_nacl && !is_castos && !is_cast_android
- } else {
- rtc_exclude_field_trial_default = false
- }
+ # Deprecated, this flag has no effect.
+ # TODO: bugs.webrtc.org/42220378 - Delete after August 15, 2025.
+ rtc_exclude_field_trial_default = false
# Setting this to true will define WEBRTC_EXCLUDE_METRICS_DEFAULT which
# will tell the pre-processor to remove the default definition of symbols