• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // 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 
10 #include "webrtc/system_wrappers/include/field_trial.h"
11 #include "webrtc/system_wrappers/include/field_trial_default.h"
12 
13 #include <string>
14 
15 // Simple field trial implementation, which allows client to
16 // specify desired flags in InitFieldTrialsFromString.
17 namespace webrtc {
18 namespace field_trial {
19 
20 static const char *trials_init_string = NULL;
21 
FindFullName(const std::string & name)22 std::string FindFullName(const std::string& name) {
23   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   }
53   return std::string();
54 }
55 
56 // Optionally initialize field trial from a string.
InitFieldTrialsFromString(const char * trials_string)57 void InitFieldTrialsFromString(const char* trials_string) {
58   trials_init_string = trials_string;
59 }
60 
GetFieldTrialString()61 const char* GetFieldTrialString() {
62   return trials_init_string;
63 }
64 
65 }  // namespace field_trial
66 }  // namespace webrtc
67