# 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("alr_experiment") {
  sources = [
    "alr_experiment.cc",
    "alr_experiment.h",
  ]
  deps = [
    "../:rtc_base_approved",
    "../../api/transport:field_trial_based_config",
    "../../api/transport:webrtc_key_value_config",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("field_trial_parser") {
  sources = [
    "field_trial_list.cc",
    "field_trial_list.h",
    "field_trial_parser.cc",
    "field_trial_parser.h",
    "field_trial_units.cc",
    "field_trial_units.h",
    "struct_parameters_parser.cc",
    "struct_parameters_parser.h",
  ]
  deps = [
    "../../api/units:data_rate",
    "../../api/units:data_size",
    "../../api/units:time_delta",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "../../rtc_base:safe_conversions",
    "../../rtc_base:stringutils",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("quality_rampup_experiment") {
  sources = [
    "quality_rampup_experiment.cc",
    "quality_rampup_experiment.h",
  ]
  deps = [
    ":field_trial_parser",
    "../:rtc_base_approved",
    "../../api/transport:field_trial_based_config",
    "../../api/transport:webrtc_key_value_config",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("quality_scaler_settings") {
  sources = [
    "quality_scaler_settings.cc",
    "quality_scaler_settings.h",
  ]
  deps = [
    ":field_trial_parser",
    "../:rtc_base_approved",
    "../../api/transport:field_trial_based_config",
    "../../api/transport:webrtc_key_value_config",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("quality_scaling_experiment") {
  sources = [
    "quality_scaling_experiment.cc",
    "quality_scaling_experiment.h",
  ]
  deps = [
    "../:rtc_base_approved",
    "../../api/video_codecs:video_codecs_api",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("normalize_simulcast_size_experiment") {
  sources = [
    "normalize_simulcast_size_experiment.cc",
    "normalize_simulcast_size_experiment.h",
  ]
  deps = [
    "../:rtc_base_approved",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("balanced_degradation_settings") {
  sources = [
    "balanced_degradation_settings.cc",
    "balanced_degradation_settings.h",
  ]
  deps = [
    ":field_trial_parser",
    "../:rtc_base_approved",
    "../../api/video_codecs:video_codecs_api",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("cpu_speed_experiment") {
  sources = [
    "cpu_speed_experiment.cc",
    "cpu_speed_experiment.h",
  ]
  deps = [
    "../:rtc_base_approved",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("rtt_mult_experiment") {
  sources = [
    "rtt_mult_experiment.cc",
    "rtt_mult_experiment.h",
  ]
  deps = [
    "../:rtc_base_approved",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("jitter_upper_bound_experiment") {
  sources = [
    "jitter_upper_bound_experiment.cc",
    "jitter_upper_bound_experiment.h",
  ]
  deps = [
    "../:rtc_base_approved",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("rate_control_settings") {
  sources = [
    "rate_control_settings.cc",
    "rate_control_settings.h",
  ]
  deps = [
    ":field_trial_parser",
    "../:rtc_base_approved",
    "../../api/transport:field_trial_based_config",
    "../../api/transport:webrtc_key_value_config",
    "../../api/units:data_size",
    "../../api/video_codecs:video_codecs_api",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("keyframe_interval_settings_experiment") {
  sources = [
    "keyframe_interval_settings.cc",
    "keyframe_interval_settings.h",
  ]
  deps = [
    ":field_trial_parser",
    "../../api/transport:field_trial_based_config",
    "../../api/transport:webrtc_key_value_config",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("stable_target_rate_experiment") {
  sources = [
    "stable_target_rate_experiment.cc",
    "stable_target_rate_experiment.h",
  ]
  deps = [
    ":field_trial_parser",
    ":rate_control_settings",
    "../../api/transport:field_trial_based_config",
    "../../api/transport:webrtc_key_value_config",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("min_video_bitrate_experiment") {
  sources = [
    "min_video_bitrate_experiment.cc",
    "min_video_bitrate_experiment.h",
  ]
  deps = [
    ":field_trial_parser",
    "../../api/units:data_rate",
    "../../api/video:video_frame",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "../../system_wrappers:field_trial",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

if (rtc_include_tests) {
  rtc_library("experiments_unittests") {
    testonly = true

    sources = [
      "balanced_degradation_settings_unittest.cc",
      "cpu_speed_experiment_unittest.cc",
      "field_trial_list_unittest.cc",
      "field_trial_parser_unittest.cc",
      "field_trial_units_unittest.cc",
      "keyframe_interval_settings_unittest.cc",
      "min_video_bitrate_experiment_unittest.cc",
      "normalize_simulcast_size_experiment_unittest.cc",
      "quality_rampup_experiment_unittest.cc",
      "quality_scaler_settings_unittest.cc",
      "quality_scaling_experiment_unittest.cc",
      "rate_control_settings_unittest.cc",
      "rtt_mult_experiment_unittest.cc",
      "stable_target_rate_experiment_unittest.cc",
      "struct_parameters_parser_unittest.cc",
    ]
    deps = [
      ":balanced_degradation_settings",
      ":cpu_speed_experiment",
      ":field_trial_parser",
      ":keyframe_interval_settings_experiment",
      ":min_video_bitrate_experiment",
      ":normalize_simulcast_size_experiment",
      ":quality_rampup_experiment",
      ":quality_scaler_settings",
      ":quality_scaling_experiment",
      ":rate_control_settings",
      ":rtt_mult_experiment",
      ":stable_target_rate_experiment",
      "..:gunit_helpers",
      "../:rtc_base_tests_utils",
      "../../api/units:data_rate",
      "../../api/video:video_frame",
      "../../api/video_codecs:video_codecs_api",
      "../../system_wrappers:field_trial",
      "../../test:field_trial",
      "../../test:test_main",
      "../../test:test_support",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
  }
}