blob: 0e2c286117a1a2cc96687c61b5f6c2483b0e4c37 [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
Henrik Kjellander98f53512015-10-28 18:17:40 +010010#include "webrtc/system_wrappers/include/field_trial.h"
11#include "webrtc/system_wrappers/include/field_trial_default.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
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000020static const char *trials_init_string = NULL;
21
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()) {
33
34 // Find next name/value pair in field trial configuration string.
35 size_t field_name_end = trials_string.find(
36 kPersistentStringSeparator, next_item);
37 if (field_name_end == trials_string.npos || field_name_end == next_item)
38 break;
39 size_t field_value_end = trials_string.find(
40 kPersistentStringSeparator, field_name_end + 1);
41 if (field_value_end == trials_string.npos ||
42 field_value_end == field_name_end + 1)
43 break;
44 std::string field_name(trials_string, next_item,
45 field_name_end - next_item);
46 std::string field_value(trials_string, field_name_end + 1,
47 field_value_end - field_name_end - 1);
48 next_item = field_value_end + 1;
49
50 if (name == field_name)
51 return field_value;
52 }
andresp@webrtc.orga36ad692014-05-14 12:24:04 +000053 return std::string();
54}
55
glaznev@webrtc.org669bc7e2015-02-09 18:17:46 +000056// Optionally initialize field trial from a string.
57void InitFieldTrialsFromString(const char* trials_string) {
58 trials_init_string = trials_string;
59}
60
phoglund37ebcf02016-01-08 05:04:57 -080061const char* GetFieldTrialString() {
62 return trials_init_string;
63}
64
andresp@webrtc.orga36ad692014-05-14 12:24:04 +000065} // namespace field_trial
66} // namespace webrtc