blob: e8d8917874d36daa1ec6c0ed193c15fa5e1c1fd4 [file] [log] [blame]
andresp@webrtc.orga36ad692014-05-14 12:24:04 +00001// Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
2//
3// Use of this source code is governed by a BSD-style license
4// that can be found in the LICENSE file in the root of the source
5// tree. An additional intellectual property rights grant can be found
6// in the file PATENTS. All contributing project authors may
7// be found in the AUTHORS file in the root of the source tree.
8//
9
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020010#include "system_wrappers/include/field_trial_default.h"
Karl Wiberg79eb1d92017-11-08 12:26:07 +010011#include "system_wrappers/include/field_trial.h"
andresp@webrtc.orga36ad692014-05-14 12:24:04 +000012
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000013#include <string>
14
15// Simple field trial implementation, which allows client to
16// specify desired flags in InitFieldTrialsFromString.
andresp@webrtc.orga36ad692014-05-14 12:24:04 +000017namespace webrtc {
18namespace field_trial {
19
Karl Wiberg79eb1d92017-11-08 12:26:07 +010020static const char* trials_init_string = NULL;
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000021
andresp@webrtc.orga36ad692014-05-14 12:24:04 +000022std::string FindFullName(const std::string& name) {
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000023 if (trials_init_string == NULL)
24 return std::string();
25
26 std::string trials_string(trials_init_string);
27 if (trials_string.empty())
28 return std::string();
29
30 static const char kPersistentStringSeparator = '/';
31 size_t next_item = 0;
32 while (next_item < trials_string.length()) {
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000033 // Find next name/value pair in field trial configuration string.
Karl Wiberg79eb1d92017-11-08 12:26:07 +010034 size_t field_name_end =
35 trials_string.find(kPersistentStringSeparator, next_item);
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000036 if (field_name_end == trials_string.npos || field_name_end == next_item)
37 break;
Karl Wiberg79eb1d92017-11-08 12:26:07 +010038 size_t field_value_end =
39 trials_string.find(kPersistentStringSeparator, field_name_end + 1);
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000040 if (field_value_end == trials_string.npos ||
41 field_value_end == field_name_end + 1)
42 break;
43 std::string field_name(trials_string, next_item,
Karl Wiberg79eb1d92017-11-08 12:26:07 +010044 field_name_end - next_item);
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000045 std::string field_value(trials_string, field_name_end + 1,
Karl Wiberg79eb1d92017-11-08 12:26:07 +010046 field_value_end - field_name_end - 1);
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000047 next_item = field_value_end + 1;
48
49 if (name == field_name)
50 return field_value;
51 }
andresp@webrtc.orga36ad692014-05-14 12:24:04 +000052 return std::string();
53}
54
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000055// Optionally initialize field trial from a string.
56void InitFieldTrialsFromString(const char* trials_string) {
57 trials_init_string = trials_string;
58}
59
phoglund37ebcf02016-01-08 05:04:57 -080060const char* GetFieldTrialString() {
61 return trials_init_string;
62}
63
andresp@webrtc.orga36ad692014-05-14 12:24:04 +000064} // namespace field_trial
65} // namespace webrtc