gnish 6dcdf10c76 This is an initial cl, which contains small amount of implemented functions, and large amount of unimplemented ones.
Code should implement BBR which is the congestion controlling algorithm. BBR tries to estimate two values bottle-neck bandwidth(bw) and round trip time(rtt),then use these two values to set two control parameters pacing rate(pacing_rate),the rate at which data should be sent and congestion window size (cwnd), cwnd is the upper bound for data in flight,data_in_flight <= cwnd at all time.
BBR has four modes:
1)Startup-ramping up throughput discovering estimated bw.
2)Drain-after Startup decrease throughput to drain queues.
3)Probe Bandwidth-most of the time BBR should be in this mode,
sending data at the rate of estimated bw, while sometimes trying to discover new bandwidth.
4)Probe Rtt-in this mode BBR tries to discover new rtt for the connection.

The key moment in BBR is when we receive feedback from the receiver,as this is the only moment which should effect our two estimators. At this moment all the switches between modes should happen, except switch to ProbeRtt mode (switching to ProbeRtt mode should happen when current min_rtt value expires).

This cl serves to emphasize the structure of Bbr, when switches happen and what key classes/functions should be implemented for proper functionality.

BUG=webrtc:7713
NOTRY=True

Review-Url: https://codereview.webrtc.org/2904183002
Cr-Commit-Position: refs/heads/master@{#18444}
2017-06-05 13:01:26 +00:00

261 lines
10 KiB
Plaintext

# Copyright (c) 2016 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.
import("../webrtc.gni")
import("audio_coding/audio_coding.gni")
group("modules") {
public_deps = [
"audio_coding",
"audio_conference_mixer",
"audio_device",
"audio_mixer",
"audio_processing",
"bitrate_controller",
"congestion_controller",
"desktop_capture",
"media_file",
"pacing",
"remote_bitrate_estimator",
"rtp_rtcp",
"utility",
"video_coding",
"video_processing",
]
}
rtc_source_set("module_api") {
sources = [
"include/module.h",
"include/module_common_types.h",
]
deps = [
"..:webrtc_common",
"../api:video_frame_api",
"../base:rtc_base_approved",
]
}
if (rtc_include_tests) {
modules_tests_resources = [
"//resources/audio_coding/testfile32kHz.pcm",
"//resources/audio_coding/teststereo32kHz.pcm",
"//resources/foreman_cif.yuv",
"//resources/paris_qcif.yuv",
]
if (is_ios) {
bundle_data("modules_tests_bundle_data") {
testonly = true
sources = modules_tests_resources
outputs = [
"{{bundle_resources_dir}}/{{source_file_part}}",
]
}
}
rtc_test("modules_tests") {
testonly = true
deps = [
"../test:test_main",
"../test:video_test_common",
"audio_coding:audio_coding_modules_tests",
"desktop_capture:desktop_capture_modules_tests",
"rtp_rtcp:rtp_rtcp_modules_tests",
"video_coding:video_coding_modules_tests",
"//testing/gmock",
"//testing/gtest",
]
data = modules_tests_resources
if (is_android) {
deps += [ "//testing/android/native_test:native_test_native_code" ]
shard_timeout = 900
}
if (is_ios) {
deps += [ ":modules_tests_bundle_data" ]
}
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
if (is_win) {
cflags = [
# TODO(phoglund): get rid of 4373 supression when
# http://code.google.com/p/webrtc/issues/detail?id=261 is solved.
# legacy warning for ignoring const / volatile in signatures.
"/wd4373",
]
}
}
modules_unittests_resources = [
"//resources/att-downlink.rx",
"//resources/att-uplink.rx",
"//resources/audio_coding/neteq_opus.rtp",
"//resources/audio_coding/neteq_universal_new.rtp",
"//resources/audio_coding/speech_mono_16kHz.pcm",
"//resources/audio_coding/speech_mono_32_48kHz.pcm",
"//resources/audio_coding/testfile32kHz.pcm",
"//resources/audio_coding/teststereo32kHz.pcm",
"//resources/audio_device/audio_short16.pcm",
"//resources/audio_device/audio_short44.pcm",
"//resources/audio_device/audio_short48.pcm",
"//resources/audio_processing/agc/agc_audio.pcm",
"//resources/audio_processing/agc/agc_no_circular_buffer.dat",
"//resources/audio_processing/agc/agc_pitch_gain.dat",
"//resources/audio_processing/agc/agc_pitch_lag.dat",
"//resources/audio_processing/agc/agc_spectral_peak.dat",
"//resources/audio_processing/agc/agc_vad.dat",
"//resources/audio_processing/agc/agc_voicing_prob.dat",
"//resources/audio_processing/agc/agc_with_circular_buffer.dat",
"//resources/audio_processing/output_data_fixed.pb",
"//resources/audio_processing/output_data_float.pb",
"//resources/audio_processing/output_data_mac.pb",
"//resources/audio_processing/transient/ajm-macbook-1-spke16m.pcm",
"//resources/audio_processing/transient/audio16kHz.pcm",
"//resources/audio_processing/transient/audio32kHz.pcm",
"//resources/audio_processing/transient/audio48kHz.pcm",
"//resources/audio_processing/transient/audio8kHz.pcm",
"//resources/audio_processing/transient/detect16kHz.dat",
"//resources/audio_processing/transient/detect32kHz.dat",
"//resources/audio_processing/transient/detect48kHz.dat",
"//resources/audio_processing/transient/detect8kHz.dat",
"//resources/audio_processing/transient/double-utils.dat",
"//resources/audio_processing/transient/float-utils.dat",
"//resources/audio_processing/transient/suppressed16kHz.pcm",
"//resources/audio_processing/transient/suppressed32kHz.pcm",
"//resources/audio_processing/transient/suppressed8kHz.pcm",
"//resources/audio_processing/transient/wpd0.dat",
"//resources/audio_processing/transient/wpd1.dat",
"//resources/audio_processing/transient/wpd2.dat",
"//resources/audio_processing/transient/wpd3.dat",
"//resources/audio_processing/transient/wpd4.dat",
"//resources/audio_processing/transient/wpd5.dat",
"//resources/audio_processing/transient/wpd6.dat",
"//resources/audio_processing/transient/wpd7.dat",
"//resources/deflicker_before_cif_short.yuv",
"//resources/far16_stereo.pcm",
"//resources/far32_stereo.pcm",
"//resources/far44_stereo.pcm",
"//resources/far48_stereo.pcm",
"//resources/far8_stereo.pcm",
"//resources/foremanColorEnhanced_cif_short.yuv",
"//resources/foreman_cif.yuv",
"//resources/foreman_cif_short.yuv",
"//resources/near16_stereo.pcm",
"//resources/near32_stereo.pcm",
"//resources/near44_stereo.pcm",
"//resources/near48_stereo.pcm",
"//resources/near8_stereo.pcm",
"//resources/ref03.aecdump",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_0_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_0_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_1_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke1_1_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_0_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_0_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_1_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingChoke2_1_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingDelay1_0_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingDelay1_0_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingLoss1_0_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_IncreasingLoss1_0_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_Multi1_1_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_Multi1_1_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_0_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_0_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_1_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyChoke_1_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyDelay_0_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyDelay_0_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyLoss_0_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_SteadyLoss_0_TOF.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_UnlimitedSpeed_0_AST.bin",
"//resources/remote_bitrate_estimator/VideoSendersTest_BweTest_UnlimitedSpeed_0_TOF.bin",
"//resources/short_mixed_mono_48.dat",
"//resources/short_mixed_mono_48_arm.dat",
"//resources/short_mixed_mono_48.pcm",
"//resources/short_mixed_stereo_48.dat",
"//resources/short_mixed_stereo_48.pcm",
"//resources/sprint-downlink.rx",
"//resources/sprint-uplink.rx",
"//resources/synthetic-trace.rx",
"//resources/tmobile-downlink.rx",
"//resources/tmobile-uplink.rx",
"//resources/verizon3g-downlink.rx",
"//resources/verizon3g-uplink.rx",
"//resources/verizon4g-downlink.rx",
"//resources/verizon4g-uplink.rx",
"//resources/voice_engine/audio_tiny48.wav",
]
if (is_ios) {
bundle_data("modules_unittests_bundle_data") {
testonly = true
sources = modules_unittests_resources
outputs = [
"{{bundle_resources_dir}}/{{source_file_part}}",
]
}
}
rtc_test("modules_unittests") {
testonly = true
defines = []
sources = [
"module_common_types_unittest.cc",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
deps = [
":module_api",
"../test:test_main",
"audio_coding:audio_coding_unittests",
"audio_conference_mixer:audio_conference_mixer_unittests",
"audio_device:audio_device_unittests",
"audio_mixer:audio_mixer_unittests",
"audio_processing:audio_processing_unittests",
"bitrate_controller:bitrate_controller_unittests",
"congestion_controller:congestion_controller_unittests",
"desktop_capture:desktop_capture_unittests",
"media_file:media_file_unittests",
"pacing:pacing_unittests",
"remote_bitrate_estimator:remote_bitrate_estimator_unittests",
"rtp_rtcp:rtp_rtcp_unittests",
"utility:utility_unittests",
"video_capture",
"video_coding:video_coding_unittests",
"video_processing:video_processing_unittests",
]
data = modules_unittests_resources
if (is_android) {
deps += [
"//testing/android/native_test:native_test_support",
"//webrtc/sdk/android:libjingle_peerconnection_java",
]
shard_timeout = 900
}
if (is_ios) {
info_plist = "//webrtc/test/ios/Info.plist"
deps += [ ":modules_unittests_bundle_data" ]
configs += [ "..:common_objc" ]
ldflags = [ "-ObjC" ]
}
}
}