# 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 = [
    ":field_trial_parser",
    "../: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" ]
  }
}
