# 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_source_set("data_transfer_tracker") {
  sources = [
    "data_transfer_tracker.cc",
    "data_transfer_tracker.h",
  ]
  deps = [
    "../../../rtc_base:checks",
    "../../../rtc_base:rtc_base_approved",
    "../network_control",
  ]
}
rtc_source_set("rtt_stats") {
  sources = [
    "rtt_stats.cc",
    "rtt_stats.h",
  ]
  deps = [
    "../../../rtc_base:rtc_base_approved",
    "../network_control",
  ]
}
rtc_source_set("windowed_filter") {
  sources = [
    "windowed_filter.h",
  ]
}
if (rtc_include_tests) {
  rtc_source_set("bbr_unittests") {
    testonly = true
    sources = [
      "data_transfer_tracker_unittest.cc",
      "rtt_stats_unittest.cc",
      "windowed_filter_unittest.cc",
    ]
    deps = [
      ":data_transfer_tracker",
      ":rtt_stats",
      ":windowed_filter",
      "../../../test:test_support",
      "../network_control",
      "../network_control:network_control_test",
    ]
  }
}
