# Copyright (c) 2018 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")

rtc_library("bbr") {
  sources = [
    "bbr_factory.cc",
    "bbr_factory.h",
  ]
  deps = [
    ":bbr_controller",
    "../../../api/transport:network_control",
    "../../../api/units:time_delta",
    "../../../rtc_base:rtc_base_approved",
  ]
}

rtc_library("bbr_controller") {
  visibility = [ ":*" ]
  sources = [
    "bbr_network_controller.cc",
    "bbr_network_controller.h",
  ]
  deps = [
    ":bandwidth_sampler",
    ":loss_rate_filter",
    ":rtt_stats",
    ":windowed_filter",
    "../../../api/transport:network_control",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
    "../../../rtc_base/experiments:field_trial_parser",
    "../../../system_wrappers:field_trial",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("bandwidth_sampler") {
  visibility = [ ":*" ]
  sources = [
    "bandwidth_sampler.cc",
    "bandwidth_sampler.h",
  ]
  deps = [
    ":packet_number_indexed_queue",
    "../../../api/units:data_rate",
    "../../../api/units:data_size",
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("data_transfer_tracker") {
  visibility = [ ":*" ]
  sources = [
    "data_transfer_tracker.cc",
    "data_transfer_tracker.h",
  ]
  deps = [
    "../../../api/units:data_size",
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("packet_number_indexed_queue") {
  visibility = [ ":*" ]
  sources = [ "packet_number_indexed_queue.h" ]
  deps = [ "../../../rtc_base:checks" ]
}

rtc_library("loss_rate_filter") {
  visibility = [ ":*" ]
  sources = [
    "loss_rate_filter.cc",
    "loss_rate_filter.h",
  ]
  deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("rtt_stats") {
  visibility = [ ":*" ]
  sources = [
    "rtt_stats.cc",
    "rtt_stats.h",
  ]
  deps = [
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
  ]
}
rtc_source_set("windowed_filter") {
  visibility = [ ":*" ]
  sources = [ "windowed_filter.h" ]
}
if (rtc_include_tests) {
  rtc_library("bbr_unittests") {
    testonly = true
    sources = [
      "bandwidth_sampler_unittest.cc",
      "bbr_network_controller_unittest.cc",
      "data_transfer_tracker_unittest.cc",
      "loss_rate_filter_unittest.cc",
      "packet_number_indexed_queue_unittest.cc",
      "rtt_stats_unittest.cc",
      "windowed_filter_unittest.cc",
    ]
    deps = [
      ":bandwidth_sampler",
      ":bbr",
      ":bbr_controller",
      ":data_transfer_tracker",
      ":loss_rate_filter",
      ":packet_number_indexed_queue",
      ":rtt_stats",
      ":windowed_filter",
      "../../../api/units:data_rate",
      "../../../api/units:time_delta",
      "../../../api/units:timestamp",
      "../../../rtc_base:logging",
      "../../../test:test_support",
      "../../../test/scenario",
    ]
  }
}
