Add field trial for using different network cost cellular types
This field trial will be used to rollout the cellular costs added
in https://webrtc-review.googlesource.com/c/src/+/172582 in
a controlled fashion.
Bug: webrtc:11473
Change-Id: I14fd5cada187ba161124325a7ff69d355ef52b25
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174880
Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31233}
diff --git a/rtc_base/network.cc b/rtc_base/network.cc
index f30063d..64aee4b 100644
--- a/rtc_base/network.cc
+++ b/rtc_base/network.cc
@@ -35,6 +35,7 @@
#include "rtc_base/string_utils.h"
#include "rtc_base/strings/string_builder.h"
#include "rtc_base/thread.h"
+#include "system_wrappers/include/field_trial.h"
namespace rtc {
namespace {
@@ -85,7 +86,8 @@
return a->key() < b->key();
}
-uint16_t ComputeNetworkCostByType(int type) {
+uint16_t ComputeNetworkCostByType(int type,
+ bool use_differentiated_cellular_costs) {
// TODO(jonaso) : Rollout support for cellular network cost using A/B
// experiment to make sure it does not introduce regressions.
switch (type) {
@@ -95,11 +97,19 @@
case rtc::ADAPTER_TYPE_WIFI:
return kNetworkCostLow;
case rtc::ADAPTER_TYPE_CELLULAR:
- case rtc::ADAPTER_TYPE_CELLULAR_2G:
- case rtc::ADAPTER_TYPE_CELLULAR_3G:
- case rtc::ADAPTER_TYPE_CELLULAR_4G:
- case rtc::ADAPTER_TYPE_CELLULAR_5G:
return kNetworkCostCellular;
+ case rtc::ADAPTER_TYPE_CELLULAR_2G:
+ return use_differentiated_cellular_costs ? kNetworkCostCellular2G
+ : kNetworkCostCellular;
+ case rtc::ADAPTER_TYPE_CELLULAR_3G:
+ return use_differentiated_cellular_costs ? kNetworkCostCellular3G
+ : kNetworkCostCellular;
+ case rtc::ADAPTER_TYPE_CELLULAR_4G:
+ return use_differentiated_cellular_costs ? kNetworkCostCellular4G
+ : kNetworkCostCellular;
+ case rtc::ADAPTER_TYPE_CELLULAR_5G:
+ return use_differentiated_cellular_costs ? kNetworkCostCellular5G
+ : kNetworkCostCellular;
case rtc::ADAPTER_TYPE_ANY:
// Candidates gathered from the any-address/wildcard ports, as backups,
// are given the maximum cost so that if there are other candidates with
@@ -930,7 +940,9 @@
scope_id_(0),
ignored_(false),
type_(ADAPTER_TYPE_UNKNOWN),
- preference_(0) {}
+ preference_(0),
+ use_differentiated_cellular_costs_(webrtc::field_trial::IsEnabled(
+ "WebRTC-UseDifferentiatedCellularCosts")) {}
Network::Network(const std::string& name,
const std::string& desc,
@@ -945,7 +957,9 @@
scope_id_(0),
ignored_(false),
type_(type),
- preference_(0) {}
+ preference_(0),
+ use_differentiated_cellular_costs_(webrtc::field_trial::IsEnabled(
+ "WebRTC-UseDifferentiatedCellularCosts")) {}
Network::Network(const Network&) = default;
@@ -1017,7 +1031,7 @@
uint16_t Network::GetCost() const {
AdapterType type = IsVpn() ? underlying_type_for_vpn_ : type_;
- return ComputeNetworkCostByType(type);
+ return ComputeNetworkCostByType(type, use_differentiated_cellular_costs_);
}
std::string Network::ToString() const {
diff --git a/rtc_base/network.h b/rtc_base/network.h
index bd05b6a..a67d2a2 100644
--- a/rtc_base/network.h
+++ b/rtc_base/network.h
@@ -462,6 +462,7 @@
int preference_;
bool active_ = true;
uint16_t id_ = 0;
+ bool use_differentiated_cellular_costs_ = false;
friend class NetworkManager;
};