Chromium Code Reviews| Index: webrtc/modules/pacing/alr_detector.cc |
| diff --git a/webrtc/modules/pacing/alr_detector.cc b/webrtc/modules/pacing/alr_detector.cc |
| index 993c6cd07edde5b87d2ea5f4b061dc5c183c5a40..194ddbccf83c305e221bae1771c2584b4cf64961 100644 |
| --- a/webrtc/modules/pacing/alr_detector.cc |
| +++ b/webrtc/modules/pacing/alr_detector.cc |
| @@ -10,6 +10,7 @@ |
| #include "webrtc/modules/pacing/alr_detector.h" |
| +#include <map> |
| #include <string> |
| #include "webrtc/rtc_base/checks.h" |
| @@ -81,6 +82,16 @@ AlrDetector::ParseAlrSettingsFromFieldTrial(const char* experiment_name) { |
| rtc::Optional<AlrExperimentSettings> ret; |
| std::string group_name = field_trial::FindFullName(experiment_name); |
| + static std::map<const char*, |
| + rtc::Optional<AlrDetector::AlrExperimentSettings>> |
| + computed_results; |
| + |
| + auto it = computed_results.find(experiment_name); |
| + if (it != computed_results.end()) { |
| + return it->second; |
| + } |
| + computed_results[experiment_name] = ret; |
|
sprang_webrtc
2017/08/24 09:13:16
Looks like you can drop this insertion?
ilnik
2017/08/25 12:35:07
No. Currently the function may exit below if it fa
|
| + |
| const std::string kIgnoredSuffix = "_Dogfood"; |
| if (group_name.rfind(kIgnoredSuffix) == |
| group_name.length() - kIgnoredSuffix.length()) { |
| @@ -91,11 +102,12 @@ AlrDetector::ParseAlrSettingsFromFieldTrial(const char* experiment_name) { |
| return ret; |
| AlrExperimentSettings settings; |
| - if (sscanf(group_name.c_str(), "%f,%" PRId64 ",%d,%d,%d", |
| + if (sscanf(group_name.c_str(), "%f,%" PRId64 ",%d,%d,%d,%d", |
| &settings.pacing_factor, &settings.max_paced_queue_time, |
| &settings.alr_bandwidth_usage_percent, |
| &settings.alr_start_budget_level_percent, |
| - &settings.alr_stop_budget_level_percent) == 5) { |
| + &settings.alr_stop_budget_level_percent, |
| + &settings.group_id) == 6) { |
| ret.emplace(settings); |
| LOG(LS_INFO) << "Using ALR experiment settings: " |
| "pacing factor: " |
| @@ -106,11 +118,13 @@ AlrDetector::ParseAlrSettingsFromFieldTrial(const char* experiment_name) { |
| << ", ALR end budget level percent: " |
| << settings.alr_start_budget_level_percent |
| << ", ALR end budget level percent: " |
| - << settings.alr_stop_budget_level_percent; |
| + << settings.alr_stop_budget_level_percent |
| + << ", ALR experiment group ID: " << settings.group_id; |
| } else { |
| LOG(LS_INFO) << "Failed to parse ALR experiment: " << experiment_name; |
| } |
| + computed_results[experiment_name] = ret; |
| return ret; |
| } |