# Copyright (c) 2016 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")
if (rtc_enable_protobuf) {
  import("//third_party/protobuf/proto_library.gni")
}
if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

group("logging") {
  deps = [
    ":rtc_event_audio",
    ":rtc_event_bwe",
    ":rtc_event_log_impl_encoder",
    ":rtc_event_pacing",
    ":rtc_event_rtp_rtcp",
    ":rtc_event_video",
  ]
}

rtc_source_set("rtc_event_log_api") {
  sources = [ "rtc_event_log/encoder/rtc_event_log_encoder.h" ]

  deps = [ "../api/rtc_event_log" ]
}

rtc_library("rtc_stream_config") {
  sources = [
    "rtc_event_log/rtc_stream_config.cc",
    "rtc_event_log/rtc_stream_config.h",
  ]

  deps = [
    "../api:rtp_headers",
    "../api:rtp_parameters",
  ]
}

rtc_library("rtc_event_pacing") {
  sources = [
    "rtc_event_log/events/rtc_event_alr_state.cc",
    "rtc_event_log/events/rtc_event_alr_state.h",
  ]

  deps = [
    "../api:scoped_refptr",
    "../api/rtc_event_log",
    "../api/units:timestamp",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
}

rtc_library("rtc_event_audio") {
  sources = [
    "rtc_event_log/events/rtc_event_audio_network_adaptation.cc",
    "rtc_event_log/events/rtc_event_audio_network_adaptation.h",
    "rtc_event_log/events/rtc_event_audio_playout.cc",
    "rtc_event_log/events/rtc_event_audio_playout.h",
    "rtc_event_log/events/rtc_event_audio_receive_stream_config.cc",
    "rtc_event_log/events/rtc_event_audio_receive_stream_config.h",
    "rtc_event_log/events/rtc_event_audio_send_stream_config.cc",
    "rtc_event_log/events/rtc_event_audio_send_stream_config.h",
  ]

  deps = [
    ":rtc_stream_config",
    "../api:scoped_refptr",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../modules/audio_coding:audio_network_adaptor_config",
    "../rtc_base:checks",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
}

rtc_library("rtc_event_bwe") {
  sources = [
    "rtc_event_log/events/rtc_event_bwe_update_delay_based.cc",
    "rtc_event_log/events/rtc_event_bwe_update_delay_based.h",
    "rtc_event_log/events/rtc_event_bwe_update_loss_based.cc",
    "rtc_event_log/events/rtc_event_bwe_update_loss_based.h",
    "rtc_event_log/events/rtc_event_probe_cluster_created.cc",
    "rtc_event_log/events/rtc_event_probe_cluster_created.h",
    "rtc_event_log/events/rtc_event_probe_result_failure.cc",
    "rtc_event_log/events/rtc_event_probe_result_failure.h",
    "rtc_event_log/events/rtc_event_probe_result_success.cc",
    "rtc_event_log/events/rtc_event_probe_result_success.h",
    "rtc_event_log/events/rtc_event_remote_estimate.h",
    "rtc_event_log/events/rtc_event_route_change.cc",
    "rtc_event_log/events/rtc_event_route_change.h",
  ]

  deps = [
    "../api:network_state_predictor_api",
    "../api:scoped_refptr",
    "../api/rtc_event_log",
    "../api/units:data_rate",
    "../api/units:timestamp",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("rtc_event_frame_events") {
  sources = [
    "rtc_event_log/events/rtc_event_frame_decoded.cc",
    "rtc_event_log/events/rtc_event_frame_decoded.h",
  ]
  deps = [
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../api/video:video_frame",
    "../rtc_base:timeutils",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("rtc_event_generic_packet_events") {
  visibility = [ "*" ]
  sources = [
    "rtc_event_log/events/rtc_event_generic_ack_received.cc",
    "rtc_event_log/events/rtc_event_generic_ack_received.h",
    "rtc_event_log/events/rtc_event_generic_packet_received.cc",
    "rtc_event_log/events/rtc_event_generic_packet_received.h",
    "rtc_event_log/events/rtc_event_generic_packet_sent.cc",
    "rtc_event_log/events/rtc_event_generic_packet_sent.h",
  ]
  deps = [
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../rtc_base:timeutils",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("rtc_event_rtp_rtcp") {
  sources = [
    "rtc_event_log/events/rtc_event_rtcp_packet_incoming.cc",
    "rtc_event_log/events/rtc_event_rtcp_packet_incoming.h",
    "rtc_event_log/events/rtc_event_rtcp_packet_outgoing.cc",
    "rtc_event_log/events/rtc_event_rtcp_packet_outgoing.h",
    "rtc_event_log/events/rtc_event_rtp_packet_incoming.cc",
    "rtc_event_log/events/rtc_event_rtp_packet_incoming.h",
    "rtc_event_log/events/rtc_event_rtp_packet_outgoing.cc",
    "rtc_event_log/events/rtc_event_rtp_packet_outgoing.h",
  ]

  deps = [
    "../api:array_view",
    "../api:scoped_refptr",
    "../api/rtc_event_log",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
}

rtc_library("rtc_event_video") {
  sources = [
    "rtc_event_log/events/rtc_event_video_receive_stream_config.cc",
    "rtc_event_log/events/rtc_event_video_receive_stream_config.h",
    "rtc_event_log/events/rtc_event_video_send_stream_config.cc",
    "rtc_event_log/events/rtc_event_video_send_stream_config.h",
  ]

  deps = [
    ":rtc_stream_config",
    "../api:scoped_refptr",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../rtc_base:checks",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
}

# TODO(eladalon): Break down into (1) encoder and (2) decoder; we don't need
# the decoder code in the WebRTC library, only in unit tests and tools.
rtc_library("rtc_event_log_impl_encoder") {
  sources = [
    "rtc_event_log/encoder/blob_encoding.cc",
    "rtc_event_log/encoder/blob_encoding.h",
    "rtc_event_log/encoder/delta_encoding.cc",
    "rtc_event_log/encoder/delta_encoding.h",
    "rtc_event_log/encoder/rtc_event_log_encoder_common.cc",
    "rtc_event_log/encoder/rtc_event_log_encoder_common.h",
    "rtc_event_log/encoder/var_int.cc",
    "rtc_event_log/encoder/var_int.h",
  ]

  defines = []

  deps = [
    "../api:rtp_headers",
    "../api:rtp_parameters",
    "../api/transport:network_control",
    "../rtc_base:checks",
    "../rtc_base:ignore_wundef",
    "../rtc_base:rtc_base_approved",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]

  if (rtc_enable_protobuf) {
    deps += [
      ":ice_log",
      ":rtc_event_audio",
      ":rtc_event_bwe",
      ":rtc_event_frame_events",
      ":rtc_event_generic_packet_events",
      ":rtc_event_log2_proto",
      ":rtc_event_log_api",
      ":rtc_event_log_proto",
      ":rtc_event_pacing",
      ":rtc_event_rtp_rtcp",
      ":rtc_event_video",
      ":rtc_stream_config",
      "../api:array_view",
      "../api:network_state_predictor_api",
      "../modules/audio_coding:audio_network_adaptor",
      "../modules/rtp_rtcp:rtp_rtcp_format",
    ]
    sources += [
      "rtc_event_log/encoder/rtc_event_log_encoder_legacy.cc",
      "rtc_event_log/encoder/rtc_event_log_encoder_legacy.h",
      "rtc_event_log/encoder/rtc_event_log_encoder_new_format.cc",
      "rtc_event_log/encoder/rtc_event_log_encoder_new_format.h",
    ]
  }
}

# TODO(bugs.webrtc.org/6463): For backwards compatibility; delete as
# soon as downstream dependencies are updated.
rtc_source_set("rtc_event_log_impl_output") {
  sources = [ "rtc_event_log/output/rtc_event_log_output_file.h" ]
  deps = [ "../api:rtc_event_log_output_file" ]
}

if (rtc_enable_protobuf) {
  rtc_library("rtc_event_log_impl") {
    visibility = [ "../api/rtc_event_log:rtc_event_log_factory" ]
    sources = [
      "rtc_event_log/rtc_event_log_impl.cc",
      "rtc_event_log/rtc_event_log_impl.h",
    ]
    deps = [
      ":ice_log",
      ":rtc_event_log_api",
      ":rtc_event_log_impl_encoder",
      "../api:libjingle_logging_api",
      "../api:sequence_checker",
      "../api/rtc_event_log",
      "../api/task_queue",
      "../rtc_base:checks",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_task_queue",
      "../rtc_base:safe_minmax",
      "../rtc_base/system:no_unique_address",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
  }
}

rtc_library("fake_rtc_event_log") {
  testonly = true
  sources = [
    "rtc_event_log/fake_rtc_event_log.cc",
    "rtc_event_log/fake_rtc_event_log.h",
    "rtc_event_log/fake_rtc_event_log_factory.cc",
    "rtc_event_log/fake_rtc_event_log_factory.h",
  ]

  deps = [
    "../api/rtc_event_log",
    "../rtc_base",
    "../rtc_base/synchronization:mutex",
  ]
}

if (rtc_enable_protobuf) {
  proto_library("rtc_event_log_proto") {
    visibility = [ "*" ]
    sources = [ "rtc_event_log/rtc_event_log.proto" ]
    proto_out_dir = "logging/rtc_event_log"
  }

  proto_library("rtc_event_log2_proto") {
    visibility = [ "*" ]
    sources = [ "rtc_event_log/rtc_event_log2.proto" ]
    proto_out_dir = "logging/rtc_event_log"
  }

  rtc_library("rtc_event_log_parser") {
    visibility = [ "*" ]
    sources = [
      "rtc_event_log/logged_events.cc",
      "rtc_event_log/logged_events.h",
      "rtc_event_log/rtc_event_log_parser.cc",
      "rtc_event_log/rtc_event_log_parser.h",
      "rtc_event_log/rtc_event_processor.cc",
      "rtc_event_log/rtc_event_processor.h",
    ]

    deps = [
      ":ice_log",
      ":rtc_event_audio",
      ":rtc_event_bwe",
      ":rtc_event_frame_events",
      ":rtc_event_generic_packet_events",
      ":rtc_event_log2_proto",
      ":rtc_event_log_impl_encoder",
      ":rtc_event_log_proto",
      ":rtc_event_pacing",
      ":rtc_event_rtp_rtcp",
      ":rtc_event_video",
      ":rtc_stream_config",
      "../api:function_view",
      "../api:network_state_predictor_api",
      "../api:rtp_headers",
      "../api:rtp_parameters",
      "../api/rtc_event_log",
      "../api/units:data_rate",
      "../api/units:time_delta",
      "../api/units:timestamp",
      "../api/video:video_frame",
      "../call:video_stream_api",
      "../modules:module_api_public",
      "../modules/audio_coding:audio_network_adaptor",
      "../modules/rtp_rtcp",
      "../modules/rtp_rtcp:rtp_rtcp_format",
      "../rtc_base:checks",
      "../rtc_base:ignore_wundef",
      "../rtc_base:protobuf_utils",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_numerics",
      "../rtc_base/system:file_wrapper",
    ]
    absl_deps = [
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }

  if (rtc_include_tests) {
    rtc_library("rtc_event_log_tests") {
      testonly = true
      assert(rtc_enable_protobuf)
      sources = [
        "rtc_event_log/encoder/blob_encoding_unittest.cc",
        "rtc_event_log/encoder/delta_encoding_unittest.cc",
        "rtc_event_log/encoder/rtc_event_log_encoder_common_unittest.cc",
        "rtc_event_log/encoder/rtc_event_log_encoder_unittest.cc",
        "rtc_event_log/rtc_event_log_unittest.cc",
        "rtc_event_log/rtc_event_log_unittest_helper.cc",
        "rtc_event_log/rtc_event_log_unittest_helper.h",
        "rtc_event_log/rtc_event_processor_unittest.cc",
      ]
      deps = [
        ":ice_log",
        ":rtc_event_audio",
        ":rtc_event_bwe",
        ":rtc_event_frame_events",
        ":rtc_event_generic_packet_events",
        ":rtc_event_log2_proto",
        ":rtc_event_log_impl_encoder",
        ":rtc_event_log_parser",
        ":rtc_event_log_proto",
        ":rtc_event_pacing",
        ":rtc_event_rtp_rtcp",
        ":rtc_event_video",
        ":rtc_stream_config",
        "../api:array_view",
        "../api:network_state_predictor_api",
        "../api:rtc_event_log_output_file",
        "../api:rtp_headers",
        "../api:rtp_parameters",
        "../api/rtc_event_log",
        "../api/rtc_event_log:rtc_event_log_factory",
        "../api/task_queue:default_task_queue_factory",
        "../call",
        "../call:call_interfaces",
        "../modules/audio_coding:audio_network_adaptor",
        "../modules/rtp_rtcp:rtp_rtcp_format",
        "../rtc_base:checks",
        "../rtc_base:rtc_base_approved",
        "../rtc_base:rtc_base_tests_utils",
        "../system_wrappers",
        "../test:fileutils",
        "../test:test_support",
        "//testing/gtest",
      ]
      absl_deps = [
        "//third_party/abseil-cpp/absl/memory",
        "//third_party/abseil-cpp/absl/types:optional",
      ]
    }

    if (!build_with_chromium) {
      rtc_executable("rtc_event_log_rtp_dump") {
        testonly = true
        sources = [ "rtc_event_log/rtc_event_log2rtp_dump.cc" ]
        deps = [
          ":rtc_event_log_parser",
          "../api:array_view",
          "../api:rtp_headers",
          "../api/rtc_event_log",
          "../modules/rtp_rtcp",
          "../modules/rtp_rtcp:rtp_rtcp_format",
          "../rtc_base:checks",
          "../rtc_base:protobuf_utils",
          "../rtc_base:rtc_base_approved",
          "../test:rtp_test_utils",
          "//third_party/abseil-cpp/absl/flags:flag",
          "//third_party/abseil-cpp/absl/flags:parse",
          "//third_party/abseil-cpp/absl/flags:usage",
          "//third_party/abseil-cpp/absl/memory",
          "//third_party/abseil-cpp/absl/types:optional",
        ]
      }
    }
  }
}

rtc_library("ice_log") {
  sources = [
    "rtc_event_log/events/rtc_event_dtls_transport_state.cc",
    "rtc_event_log/events/rtc_event_dtls_transport_state.h",
    "rtc_event_log/events/rtc_event_dtls_writable_state.cc",
    "rtc_event_log/events/rtc_event_dtls_writable_state.h",
    "rtc_event_log/events/rtc_event_ice_candidate_pair.cc",
    "rtc_event_log/events/rtc_event_ice_candidate_pair.h",
    "rtc_event_log/events/rtc_event_ice_candidate_pair_config.cc",
    "rtc_event_log/events/rtc_event_ice_candidate_pair_config.h",
    "rtc_event_log/ice_logger.cc",
    "rtc_event_log/ice_logger.h",
  ]

  deps = [
    "../api:libjingle_logging_api",
    "../api:libjingle_peerconnection_api",  # For api/dtls_transport_interface.h
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../rtc_base:rtc_base_approved",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
}

if (rtc_include_tests) {
  rtc_library("mocks") {
    testonly = true
    sources = [
      "rtc_event_log/mock/mock_rtc_event_log.cc",
      "rtc_event_log/mock/mock_rtc_event_log.h",
    ]
    deps = [
      "../api/rtc_event_log",
      "../test:test_support",
    ]
  }
}
