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:
parent
ca27236272
commit
6a8a6723d3
67
webrtc/system_wrappers/interface/field_trial.h
Normal file
67
webrtc/system_wrappers/interface/field_trial.h
Normal 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_
|
30
webrtc/system_wrappers/source/field_trial.cc
Normal file
30
webrtc/system_wrappers/source/field_trial.cc
Normal 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
|
@ -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',
|
||||
|
Loading…
Reference in New Issue
Block a user