iOS: Add trendline filter to field trials.

NOTRY=True
BUG=webrtc:6902

Review-Url: https://codereview.webrtc.org/2583643002
Cr-Commit-Position: refs/heads/master@{#15643}
This commit is contained in:
tkchin 2016-12-15 13:17:54 -08:00 committed by Commit bot
parent 5bc3945f8f
commit 4cd6221127
3 changed files with 43 additions and 24 deletions

View File

@ -25,7 +25,10 @@
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
RTCInitFieldTrials(RTCFieldTrialOptionsImprovedBitrateEstimate);
NSDictionary *fieldTrials = @{
kRTCFieldTrialImprovedBitrateEstimateKey: kRTCFieldTrialEnabledValue,
};
RTCInitFieldTrialDictionary(fieldTrials);
RTCInitializeSSL();
RTCSetupInternalTracer();
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

View File

@ -16,24 +16,31 @@
#include "webrtc/system_wrappers/include/field_trial_default.h"
static NSString * const kRTCEnableImprovedBitrateEstimateString =
@"WebRTC-ImprovedBitrateEstimate/Enabled/";
static NSString * const kRTCEnableAudioSendSideBweString =
@"WebRTC-Audio-SendSideBwe/Enabled/";
static NSString * const kRTCEnableFlexFec03String =
@"WebRTC-FlexFEC-03/Enabled/";
NSString * const kRTCFieldTrialAudioSendSideBweKey = @"WebRTC-Audio-SendSideBwe";
NSString * const kRTCFieldTrialFlexFec03Key = @"WebRTC-FlexFEC-03";
NSString * const kRTCFieldTrialImprovedBitrateEstimateKey = @"WebRTC-ImprovedBitrateEstimate";
NSString * const kRTCFieldTrialTrendlineFilterKey = @"WebRTC-BweTrendlineFilter";
NSString * const kRTCFieldTrialEnabledValue = @"Enabled";
static std::unique_ptr<char[]> gFieldTrialInitString;
void RTCInitFieldTrials(RTCFieldTrialOptions options) {
NSString *RTCFieldTrialTrendlineFilterValue(
size_t windowSize, double smoothingCoeff, double thresholdGain) {
NSString *format = @"Enabled-%zu,%lf,%lf";
return [NSString stringWithFormat:format, windowSize, smoothingCoeff, thresholdGain];
}
void RTCInitFieldTrialDictionary(NSDictionary<NSString *, NSString *> *fieldTrials) {
if (!fieldTrials) {
RTCLogWarning(@"No fieldTrials provided.");
return;
}
// Assemble the keys and values into the field trial string.
// We don't perform any extra format checking. That should be done by the underlying WebRTC calls.
NSMutableString *fieldTrialInitString = [NSMutableString string];
if (options & RTCFieldTrialOptionsImprovedBitrateEstimate) {
[fieldTrialInitString appendString:kRTCEnableImprovedBitrateEstimateString];
}
if (options & RTCFieldTrialOptionsAudioSendSideBwe) {
[fieldTrialInitString appendString:kRTCEnableAudioSendSideBweString];
}
if (options & RTCFieldTrialOptionsFlexFec03) {
[fieldTrialInitString appendString:kRTCEnableFlexFec03String];
for (NSString *key in fieldTrials) {
NSString *fieldTrialEntry = [NSString stringWithFormat:@"%@/%@/", key, fieldTrials[key]];
[fieldTrialInitString appendString:fieldTrialEntry];
}
size_t len = fieldTrialInitString.length + 1;
gFieldTrialInitString.reset(new char[len]);

View File

@ -12,14 +12,23 @@
#import <WebRTC/RTCMacros.h>
typedef NS_OPTIONS(NSUInteger, RTCFieldTrialOptions) {
RTCFieldTrialOptionsNone = 0,
RTCFieldTrialOptionsImprovedBitrateEstimate = 1 << 0,
RTCFieldTrialOptionsAudioSendSideBwe = 1 << 1,
RTCFieldTrialOptionsFlexFec03 = 1 << 2,
};
/** The only valid value for the following if set is kRTCFieldTrialEnabledValue. */
RTC_EXTERN NSString * const kRTCFieldTrialAudioSendSideBweKey;
RTC_EXTERN NSString * const kRTCFieldTrialFlexFec03Key;
RTC_EXTERN NSString * const kRTCFieldTrialImprovedBitrateEstimateKey;
/** Must be called before any other call into WebRTC. See:
/** The valid value for field trials above. */
RTC_EXTERN NSString * const kRTCFieldTrialEnabledValue;
/** Use a string returned by RTCFieldTrialTrendlineFilterValue as the value. */
RTC_EXTERN NSString * const kRTCFieldTrialTrendlineFilterKey;
/** Returns a valid value for kRTCFieldTrialTrendlineFilterKey. */
RTC_EXTERN NSString *RTCFieldTrialTrendlineFilterValue(
size_t windowSize, double smoothingCoeff, double thresholdGain);
/** Initialize field trials using a dictionary mapping field trial keys to their values. See above
* for valid keys and values.
* Must be called before any other call into WebRTC. See:
* webrtc/system_wrappers/include/field_trial_default.h
*/
RTC_EXTERN void RTCInitFieldTrials(RTCFieldTrialOptions options);
RTC_EXTERN void RTCInitFieldTrialDictionary(NSDictionary<NSString *, NSString *> *fieldTrials);