Home | History | Annotate | Download | only in source
      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 
     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.
     57 void InitFieldTrialsFromString(const char* trials_string) {
     58   trials_init_string = trials_string;
     59 }
     60 
     61 const char* GetFieldTrialString() {
     62   return trials_init_string;
     63 }
     64 
     65 }  // namespace field_trial
     66 }  // namespace webrtc
     67