# Copyright (c) 2025 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("test/test_resources.gni")

if (rtc_enable_protobuf) {
  rtc_library("simulator") {
    sources = [
      "assembler.cc",
      "assembler.h",
      "decodability_simulator.cc",
      "decodability_simulator.h",
      "decodability_tracker.cc",
      "decodability_tracker.h",
      "frame_base.h",
      "log_classifiers.cc",
      "log_classifiers.h",
      "receiver.cc",
      "receiver.h",
      "rendering_simulator.cc",
      "rendering_simulator.h",
      "rendering_tracker.cc",
      "rendering_tracker.h",
      "results_base.h",
      "rtc_event_log_driver.cc",
      "rtc_event_log_driver.h",
      "rtp_packet_simulator.cc",
      "rtp_packet_simulator.h",
      "stream_base.h",
    ]
    deps = [
      "../../../api:field_trials",
      "../../../api:rtp_headers",
      "../../../api:rtp_packet_info",
      "../../../api:rtp_parameters",
      "../../../api:scoped_refptr",
      "../../../api:sequence_checker",
      "../../../api:transport_api",
      "../../../api/environment",
      "../../../api/environment:environment_factory",
      "../../../api/numerics",
      "../../../api/task_queue",
      "../../../api/task_queue:pending_task_safety_flag",
      "../../../api/units:data_size",
      "../../../api/units:time_delta",
      "../../../api/units:timestamp",
      "../../../api/video:encoded_frame",
      "../../../api/video:frame_buffer",
      "../../../api/video:video_frame",
      "../../../api/video:video_rtp_headers",
      "../../../call:rtp_interfaces",
      "../../../call:rtp_receiver",
      "../../../call:video_receive_stream_api",
      "../../../logging:rtc_event_log_parser",
      "../../../logging:rtc_event_rtp_rtcp",
      "../../../logging:rtc_event_video",
      "../../../modules/rtp_rtcp",
      "../../../modules/rtp_rtcp:rtp_rtcp_format",
      "../../../modules/video_coding:nack_requester",
      "../../../modules/video_coding/timing:timing_module",
      "../../../rtc_base:checks",
      "../../../rtc_base:logging",
      "../../../rtc_base:macromagic",
      "../../../rtc_base:rtc_numerics",
      "../../../test/time_controller:simulated_time_task_queue_controller",
      "../../../video",
      "../../../video:task_queue_frame_decode_scheduler",
      "../../../video:video_stream_buffer_controller",
      "../../../video/render:incoming_video_stream",
      "//third_party/abseil-cpp/absl/algorithm:container",
      "//third_party/abseil-cpp/absl/base:nullability",
      "//third_party/abseil-cpp/absl/container:flat_hash_map",
      "//third_party/abseil-cpp/absl/container:flat_hash_set",
      "//third_party/abseil-cpp/absl/container:inlined_vector",
      "//third_party/abseil-cpp/absl/functional:any_invocable",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  if (rtc_include_tests) {
    rtc_library("simulator_tests") {
      testonly = true
      sources = [
        "assembler_unittest.cc",
        "decodability_simulator_unittest.cc",
        "decodability_tracker_unittest.cc",
        "frame_base_unittest.cc",
        "log_classifiers_unittest.cc",
        "receiver_unittest.cc",
        "rendering_simulator_unittest.cc",
        "rendering_tracker_unittest.cc",
        "results_base_unittest.cc",
        "rtc_event_log_driver_unittest.cc",
        "rtp_packet_simulator_unittest.cc",
        "stream_base_unittest.cc",
      ]
      deps = [
        ":simulator",
        "../../../api:rtp_headers",
        "../../../api:rtp_packet_info",
        "../../../api:sequence_checker",
        "../../../api/environment",
        "../../../api/numerics",
        "../../../api/transport/rtp:dependency_descriptor",
        "../../../api/units:data_size",
        "../../../api/units:time_delta",
        "../../../api/units:timestamp",
        "../../../api/video:encoded_frame",
        "../../../api/video:video_frame",
        "../../../logging:rtc_event_log_parser",
        "../../../logging:rtc_event_rtp_rtcp",
        "../../../modules/rtp_rtcp:rtp_rtcp_format",
        "../../../modules/video_coding/timing:timing_module",
        "../../../rtc_base:checks",
        "../../../rtc_base:macromagic",
        "../../../system_wrappers",
        "../../../test:create_test_environment",
        "../../../test:test_support",
        "test",
        "//third_party/abseil-cpp/absl/algorithm:container",
        "//third_party/abseil-cpp/absl/functional:any_invocable",
        "//third_party/abseil-cpp/absl/strings:string_view",
      ]
      data = VIDEO_TIMING_SIMULATOR_TEST_RESOURCES
      if (is_ios) {
        deps += [ "test:video_timing_simulator_test_resources_bundle_data" ]
      }
    }
  }
}
