1*d9f75844SAndroid Build Coastguard Worker/* 2*d9f75844SAndroid Build Coastguard Worker * Copyright 2016 The WebRTC Project Authors. All rights reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker#import "RTCFieldTrials.h" 12*d9f75844SAndroid Build Coastguard Worker 13*d9f75844SAndroid Build Coastguard Worker#include <memory> 14*d9f75844SAndroid Build Coastguard Worker 15*d9f75844SAndroid Build Coastguard Worker#import "base/RTCLogging.h" 16*d9f75844SAndroid Build Coastguard Worker 17*d9f75844SAndroid Build Coastguard Worker#include "system_wrappers/include/field_trial.h" 18*d9f75844SAndroid Build Coastguard Worker 19*d9f75844SAndroid Build Coastguard WorkerNSString *const kRTCFieldTrialAudioForceABWENoTWCCKey = @"WebRTC-Audio-ABWENoTWCC"; 20*d9f75844SAndroid Build Coastguard WorkerNSString * const kRTCFieldTrialFlexFec03AdvertisedKey = @"WebRTC-FlexFEC-03-Advertised"; 21*d9f75844SAndroid Build Coastguard WorkerNSString * const kRTCFieldTrialFlexFec03Key = @"WebRTC-FlexFEC-03"; 22*d9f75844SAndroid Build Coastguard WorkerNSString * const kRTCFieldTrialH264HighProfileKey = @"WebRTC-H264HighProfile"; 23*d9f75844SAndroid Build Coastguard WorkerNSString * const kRTCFieldTrialMinimizeResamplingOnMobileKey = 24*d9f75844SAndroid Build Coastguard Worker @"WebRTC-Audio-MinimizeResamplingOnMobile"; 25*d9f75844SAndroid Build Coastguard WorkerNSString *const kRTCFieldTrialUseNWPathMonitor = @"WebRTC-Network-UseNWPathMonitor"; 26*d9f75844SAndroid Build Coastguard WorkerNSString * const kRTCFieldTrialEnabledValue = @"Enabled"; 27*d9f75844SAndroid Build Coastguard Worker 28*d9f75844SAndroid Build Coastguard Worker// InitFieldTrialsFromString stores the char*, so the char array must outlive 29*d9f75844SAndroid Build Coastguard Worker// the application. 30*d9f75844SAndroid Build Coastguard Workerstatic char *gFieldTrialInitString = nullptr; 31*d9f75844SAndroid Build Coastguard Worker 32*d9f75844SAndroid Build Coastguard Workervoid RTCInitFieldTrialDictionary(NSDictionary<NSString *, NSString *> *fieldTrials) { 33*d9f75844SAndroid Build Coastguard Worker if (!fieldTrials) { 34*d9f75844SAndroid Build Coastguard Worker RTCLogWarning(@"No fieldTrials provided."); 35*d9f75844SAndroid Build Coastguard Worker return; 36*d9f75844SAndroid Build Coastguard Worker } 37*d9f75844SAndroid Build Coastguard Worker // Assemble the keys and values into the field trial string. 38*d9f75844SAndroid Build Coastguard Worker // We don't perform any extra format checking. That should be done by the underlying WebRTC calls. 39*d9f75844SAndroid Build Coastguard Worker NSMutableString *fieldTrialInitString = [NSMutableString string]; 40*d9f75844SAndroid Build Coastguard Worker for (NSString *key in fieldTrials) { 41*d9f75844SAndroid Build Coastguard Worker NSString *fieldTrialEntry = [NSString stringWithFormat:@"%@/%@/", key, fieldTrials[key]]; 42*d9f75844SAndroid Build Coastguard Worker [fieldTrialInitString appendString:fieldTrialEntry]; 43*d9f75844SAndroid Build Coastguard Worker } 44*d9f75844SAndroid Build Coastguard Worker size_t len = fieldTrialInitString.length + 1; 45*d9f75844SAndroid Build Coastguard Worker if (gFieldTrialInitString != nullptr) { 46*d9f75844SAndroid Build Coastguard Worker delete[] gFieldTrialInitString; 47*d9f75844SAndroid Build Coastguard Worker } 48*d9f75844SAndroid Build Coastguard Worker gFieldTrialInitString = new char[len]; 49*d9f75844SAndroid Build Coastguard Worker if (![fieldTrialInitString getCString:gFieldTrialInitString 50*d9f75844SAndroid Build Coastguard Worker maxLength:len 51*d9f75844SAndroid Build Coastguard Worker encoding:NSUTF8StringEncoding]) { 52*d9f75844SAndroid Build Coastguard Worker RTCLogError(@"Failed to convert field trial string."); 53*d9f75844SAndroid Build Coastguard Worker return; 54*d9f75844SAndroid Build Coastguard Worker } 55*d9f75844SAndroid Build Coastguard Worker webrtc::field_trial::InitFieldTrialsFromString(gFieldTrialInitString); 56*d9f75844SAndroid Build Coastguard Worker} 57