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)22std::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)57void InitFieldTrialsFromString(const char* trials_string) { 58 trials_init_string = trials_string; 59 } 60 GetFieldTrialString()61const char* GetFieldTrialString() { 62 return trials_init_string; 63 } 64 65 } // namespace field_trial 66 } // namespace webrtc 67