FieldTrial implementation for webrtc.

BUG=crbug/367114
R=asvitkine@chromium.org, mflodman@webrtc.org, tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/14399004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6089 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
andresp@webrtc.org 2014-05-09 07:14:34 +00:00
parent ca27236272
commit 6a8a6723d3
3 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,67 @@
//
// Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
//
#ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_FIELD_TRIAL_H_
#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_FIELD_TRIAL_H_
#include <string>
#include "webrtc/common_types.h"
// Field trials allow a client of webrtc (such as Chrome) to turn on feature
// code in binraries out in the field and gather information with that.
// WebRTC field trials are designed to be wired up directly to chrome field
// trials and speed up the time developers need to get features out there by
// spending less time wiring up APIs to control whether the feature is on/off.
// Note, that not every feature is candidate to be controlled by them as it may
// require proper negotiation between involved parties (e.g. SDP negotiation).
//
// E.g.: To experiment with a new method that could lead to a different
// trade-off between CPU/bandwidth:
//
// 1 - Develop the feature with default behaviour off:
//
// if (FieldTrial::FindFullName("WebRTCExperimenMethod2") == "Enabled")
// method2();
// else
// method1();
//
// 2 - Once the changes are rolled to chrome, the new code path can be executed
// by running chrome with --force-fieldtrials=WebRTCExperimentMethod2/Enabled/
// or controled by finch studies.
//
// 3 - Evaluate the new feature and clean the code paths.
//
// TODO(andresp): find out how to get bots and unit tests to run with field
// trials enabled.
namespace webrtc {
namespace field_trial {
typedef std::string (*FindFullNameMethod)(const std::string&);
// Returns the group name chosen for the named trial, or the empty string
// if the trial does not exists.
//
// Note: To keep things tidy append all the trial names with WebRTC.
std::string FindFullName(const std::string& name);
// WebRTC clients MUST call this method to setup field trials.
// Failing to do so will crash the first time code tries to access a field
// trial.
//
// This method must be called before any WebRTC methods. Functions
// provided should be thread-safe.
WEBRTC_DLLEXPORT void Init(FindFullNameMethod find);
} // namespace field_trial
} // namespace webrtc
#endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_FIELD_TRIAL_H_

View File

@ -0,0 +1,30 @@
// Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
//
#include "webrtc/system_wrappers/interface/field_trial.h"
#include <cassert>
namespace webrtc {
namespace field_trial {
namespace {
FindFullNameMethod find_full_name_method_ = NULL;
} // namespace
void Init(FindFullNameMethod method) {
assert(find_full_name_method_ == NULL);
find_full_name_method_ = method;
}
std::string FindFullName(const std::string& name) {
assert(find_full_name_method_ != NULL);
return find_full_name_method_(name);
}
} // namespace field_trial
} // namespace webrtc

View File

@ -35,6 +35,7 @@
'../interface/data_log_impl.h',
'../interface/event_tracer.h',
'../interface/event_wrapper.h',
'../interface/field_trial.h',
'../interface/file_wrapper.h',
'../interface/fix_interlocked_exchange_pointer_win.h',
'../interface/logcat_trace_context.h',
@ -85,6 +86,7 @@
'event_tracer.cc',
'event_win.cc',
'event_win.h',
'field_trial.cc',
'file_impl.cc',
'file_impl.h',
'logcat_trace_context.cc',