# 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_begin_end",
    ":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_source_set("rtc_event_log_parse_status") {
  sources = [ "rtc_event_log/events/rtc_event_log_parse_status.h" ]
  deps = [
    "../rtc_base:checks",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_field") {
  sources = [
    "rtc_event_log/events/fixed_length_encoding_parameters_v3.cc",
    "rtc_event_log/events/fixed_length_encoding_parameters_v3.h",
    "rtc_event_log/events/rtc_event_definition.h",
    "rtc_event_log/events/rtc_event_field_encoding.cc",
    "rtc_event_log/events/rtc_event_field_encoding.h",
    "rtc_event_log/events/rtc_event_field_encoding_parser.cc",
    "rtc_event_log/events/rtc_event_field_encoding_parser.h",
    "rtc_event_log/events/rtc_event_field_extraction.cc",
    "rtc_event_log/events/rtc_event_field_extraction.h",
  ]

  deps = [
    ":rtc_event_log_parse_status",
    ":rtc_event_number_encodings",
    "../api:array_view",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../rtc_base:bitstream_reader",
    "../rtc_base:checks",
    "../rtc_base:logging",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

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",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

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

  deps = [
    ":rtc_event_field",
    ":rtc_event_log_parse_status",
    "../api:array_view",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_audio") {
  visibility = [ "*" ]
  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",
    "rtc_event_log/events/rtc_event_neteq_set_minimum_delay.cc",
    "rtc_event_log/events/rtc_event_neteq_set_minimum_delay.h",
  ]

  deps = [
    ":rtc_event_field",
    ":rtc_event_log_parse_status",
    ":rtc_stream_config",
    "../api:array_view",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../modules/audio_coding:audio_network_adaptor_config",
    "../rtc_base:checks",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_begin_end") {
  visibility = [ "*" ]
  sources = [
    "rtc_event_log/events/rtc_event_begin_log.cc",
    "rtc_event_log/events/rtc_event_begin_log.h",
    "rtc_event_log/events/rtc_event_end_log.cc",
    "rtc_event_log/events/rtc_event_end_log.h",
  ]
  deps = [
    ":rtc_event_field",
    ":rtc_event_log_parse_status",
    "../api:array_view",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_bwe") {
  visibility = [ "*" ]
  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 = [
    ":rtc_event_field",
    ":rtc_event_log_parse_status",
    "../api:array_view",
    "../api/rtc_event_log",
    "../api/transport:bandwidth_usage",
    "../api/units:data_rate",
    "../api/units:timestamp",
    "../rtc_base:checks",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_frame_events") {
  visibility = [ "*" ]
  sources = [
    "rtc_event_log/events/rtc_event_frame_decoded.cc",
    "rtc_event_log/events/rtc_event_frame_decoded.h",
  ]
  deps = [
    ":rtc_event_field",
    ":rtc_event_log_parse_status",
    "../api:array_view",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../api/video:video_frame",
    "../rtc_base:timeutils",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

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 = [
    ":rtc_event_field",
    ":rtc_event_log_parse_status",
    "../api:array_view",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../rtc_base:timeutils",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_rtp_rtcp") {
  visibility = [ "*" ]
  sources = [
    "rtc_event_log/events/logged_rtp_rtcp.h",
    "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 = [
    ":rtc_event_field",
    ":rtc_event_log_parse_status",
    "../api:array_view",
    "../api:rtp_headers",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base:buffer",
    "../rtc_base:checks",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_video") {
  visibility = [ "*" ]
  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_event_field",
    ":rtc_event_log_parse_status",
    ":rtc_stream_config",
    "../api:array_view",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "../rtc_base:checks",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_number_encodings") {
  sources = [
    "rtc_event_log/encoder/bit_writer.cc",
    "rtc_event_log/encoder/bit_writer.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 = [
    "../rtc_base:bit_buffer",
    "../rtc_base:bitstream_reader",
    "../rtc_base:checks",
    "../rtc_base:macromagic",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_log_blob_encoding") {
  sources = [
    "rtc_event_log/encoder/blob_encoding.cc",
    "rtc_event_log/encoder/blob_encoding.h",
  ]
  deps = [
    ":rtc_event_number_encodings",
    "../rtc_base:checks",
    "../rtc_base:logging",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_log_optional_blob_encoding") {
  sources = [
    "rtc_event_log/encoder/optional_blob_encoding.cc",
    "rtc_event_log/encoder/optional_blob_encoding.h",
  ]
  deps = [
    "../rtc_base:bit_buffer",
    "../rtc_base:bitstream_reader",
    "../rtc_base:checks",
    "../rtc_base:logging",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_log_delta_encoding") {
  sources = [
    "rtc_event_log/encoder/delta_encoding.cc",
    "rtc_event_log/encoder/delta_encoding.h",
  ]
  deps = [
    ":rtc_event_number_encodings",
    "../rtc_base:bit_buffer",
    "../rtc_base:bitstream_reader",
    "../rtc_base:checks",
    "../rtc_base:logging",
    "../rtc_base:safe_conversions",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtc_event_log_impl_encoder") {
  sources = []

  defines = []

  deps = [
    ":rtc_event_number_encodings",
    "../api:field_trials_view",
    "../api:rtp_headers",
    "../api:rtp_parameters",
    "../api/transport:network_control",
    "../rtc_base:bit_buffer",
    "../rtc_base:bitstream_reader",
    "../rtc_base:buffer",
    "../rtc_base:checks",
    "../rtc_base:logging",
    "../rtc_base:safe_conversions",
  ]

  if (rtc_enable_protobuf) {
    deps += [
      ":dependency_descriptor_encoder_decoder",
      ":ice_log",
      ":rtc_event_audio",
      ":rtc_event_begin_end",
      ":rtc_event_bwe",
      ":rtc_event_field",
      ":rtc_event_frame_events",
      ":rtc_event_generic_packet_events",
      ":rtc_event_log2_proto",
      ":rtc_event_log_api",
      ":rtc_event_log_blob_encoding",
      ":rtc_event_log_delta_encoding",
      ":rtc_event_log_proto",
      ":rtc_event_pacing",
      ":rtc_event_rtp_rtcp",
      ":rtc_event_video",
      ":rtc_stream_config",
      "../api:array_view",
      "../api:candidate",
      "../api:dtls_transport_interface",
      "../api/rtc_event_log:rtc_event_log",
      "../api/transport:bandwidth_usage",
      "../api/units:timestamp",
      "../api/video:video_frame",
      "../api/video:video_rtp_headers",
      "../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",
      "rtc_event_log/encoder/rtc_event_log_encoder_v3.cc",
      "rtc_event_log/encoder/rtc_event_log_encoder_v3.h",
    ]
  }
}

if (rtc_enable_protobuf) {
  rtc_library("dependency_descriptor_encoder_decoder") {
    sources = [
      "rtc_event_log/dependency_descriptor_encoder_decoder.cc",
      "rtc_event_log/dependency_descriptor_encoder_decoder.h",
    ]
    deps = [
      ":rtc_event_log2_proto_include",
      ":rtc_event_log_delta_encoding",
      ":rtc_event_log_optional_blob_encoding",
      ":rtc_event_log_parse_status",
      ":rtc_event_log_proto",  # Why does this need to be included here?
      "../api:array_view",
      "../rtc_base:bitstream_reader",
      "../rtc_base:checks",
      "../rtc_base:logging",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }
}

if (rtc_enable_protobuf) {
  rtc_source_set("rtc_event_log2_proto_include") {
    sources = [ "rtc_event_log/rtc_event_log2_proto_include.h" ]
    public_deps +=  # no-presubmit-check TODO(webrtc:8603)
        [ ":rtc_event_log2_proto" ]
  }
}

if (rtc_enable_protobuf) {
  rtc_library("rtc_event_log_impl") {
    visibility = [
      ":rtc_event_log_tests",
      "../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:field_trials_view",
      "../api:libjingle_logging_api",
      "../api:sequence_checker",
      "../api/environment",
      "../api/rtc_event_log",
      "../api/task_queue",
      "../api/units:time_delta",
      "../rtc_base:checks",
      "../rtc_base:logging",
      "../rtc_base:macromagic",
      "../rtc_base:rtc_event",
      "../rtc_base:safe_conversions",
      "../rtc_base:safe_minmax",
      "../rtc_base:timeutils",
      "../rtc_base/synchronization:mutex",
      "../rtc_base/system:no_unique_address",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }
}

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:libjingle_logging_api",
    "../api/environment",
    "../api/rtc_event_log",
    "../api/rtc_event_log:rtc_event_log_factory_interface",
    "../rtc_base:macromagic",
    "../rtc_base/synchronization:mutex",
    "//third_party/abseil-cpp/absl/base:nullability",
  ]
}

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/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",
      "rtc_event_log/rtc_event_processor_order.h",
    ]

    deps = [
      ":dependency_descriptor_encoder_decoder",
      ":ice_log",
      ":rtc_event_audio",
      ":rtc_event_begin_end",
      ":rtc_event_bwe",
      ":rtc_event_frame_events",
      ":rtc_event_generic_packet_events",
      ":rtc_event_log2_proto",
      ":rtc_event_log_blob_encoding",
      ":rtc_event_log_delta_encoding",
      ":rtc_event_log_impl_encoder",
      ":rtc_event_log_parse_status",
      ":rtc_event_log_proto",
      ":rtc_event_number_encodings",
      ":rtc_event_pacing",
      ":rtc_event_rtp_rtcp",
      ":rtc_event_video",
      ":rtc_stream_config",
      "../api:candidate",
      "../api:dtls_transport_interface",
      "../api:function_view",
      "../api:rtp_headers",
      "../api:rtp_parameters",
      "../api/rtc_event_log",
      "../api/transport:bandwidth_usage",
      "../api/units:data_rate",
      "../api/units:time_delta",
      "../api/units:timestamp",
      "../api/video:video_frame",
      "../modules:module_api_public",
      "../modules/audio_coding:audio_network_adaptor",
      "../modules/rtp_rtcp:rtp_rtcp_format",
      "../rtc_base:checks",
      "../rtc_base:copy_on_write_buffer",
      "../rtc_base:logging",
      "../rtc_base:protobuf_utils",
      "../rtc_base:rtc_numerics",
      "../rtc_base:safe_conversions",
      "../rtc_base/system:file_wrapper",
      "//third_party/abseil-cpp/absl/base:core_headers",
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]

    # Normally public deps should not be used, but the proto must be included
    # by all targets depending on rtc_event_log_parser.
    public_deps +=  # no-presubmit-check TODO(webrtc:8603)
        [ ":rtc_event_log_proto" ]
  }

  if (rtc_include_tests) {
    rtc_library("rtc_event_log_tests") {
      testonly = true
      assert(rtc_enable_protobuf)
      sources = [
        "rtc_event_log/dependency_descriptor_encoder_decoder_unittest.cc",
        "rtc_event_log/encoder/blob_encoding_unittest.cc",
        "rtc_event_log/encoder/delta_encoding_unittest.cc",
        "rtc_event_log/encoder/optional_blob_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/events/rtc_event_field_encoding_unittest.cc",
        "rtc_event_log/events/rtc_event_field_extraction_unittest.cc",
        "rtc_event_log/rtc_event_log_impl_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 = [
        ":dependency_descriptor_encoder_decoder",
        ":ice_log",
        ":rtc_event_audio",
        ":rtc_event_begin_end",
        ":rtc_event_bwe",
        ":rtc_event_field",
        ":rtc_event_frame_events",
        ":rtc_event_generic_packet_events",
        ":rtc_event_log2_proto",
        ":rtc_event_log2_proto_include",
        ":rtc_event_log_api",
        ":rtc_event_log_blob_encoding",
        ":rtc_event_log_delta_encoding",
        ":rtc_event_log_impl",
        ":rtc_event_log_impl_encoder",
        ":rtc_event_log_optional_blob_encoding",
        ":rtc_event_log_parser",
        ":rtc_event_log_proto",
        ":rtc_event_number_encodings",
        ":rtc_event_pacing",
        ":rtc_event_rtp_rtcp",
        ":rtc_event_video",
        ":rtc_stream_config",
        "../api:array_view",
        "../api:candidate",
        "../api:dtls_transport_interface",
        "../api:field_trials_view",
        "../api:libjingle_logging_api",
        "../api:rtc_event_log_output_file",
        "../api:rtp_headers",
        "../api:rtp_parameters",
        "../api/environment",
        "../api/environment:environment_factory",
        "../api/rtc_event_log",
        "../api/rtc_event_log:rtc_event_log_factory",
        "../api/transport:bandwidth_usage",
        "../api/units:data_rate",
        "../api/units:time_delta",
        "../api/units:timestamp",
        "../api/video:video_frame",
        "../call",
        "../call:call_interfaces",
        "../modules/audio_coding:audio_network_adaptor",
        "../modules/rtp_rtcp:rtp_rtcp_format",
        "../rtc_base:buffer",
        "../rtc_base:checks",
        "../rtc_base:logging",
        "../rtc_base:random",
        "../rtc_base:rtc_base_tests_utils",
        "../rtc_base:safe_conversions",
        "../rtc_base:timeutils",
        "../system_wrappers",
        "../test:explicit_key_value_config",
        "../test:fileutils",
        "../test:test_support",
        "../test/logging:log_writer",
        "../test/time_controller",
        "//testing/gtest",
        "//third_party/abseil-cpp/absl/algorithm:container",
        "//third_party/abseil-cpp/absl/memory",
        "//third_party/abseil-cpp/absl/strings:string_view",
      ]
    }

    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",
          ":rtc_event_rtp_rtcp",
          "../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:stringutils",
          "../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/strings",
        ]
      }
    }
  }
}

rtc_library("ice_log") {
  visibility = [ "*" ]
  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 = [
    ":rtc_event_field",
    ":rtc_event_log_parse_status",
    "../api:array_view",
    "../api:candidate",
    "../api:dtls_transport_interface",
    "../api:libjingle_logging_api",
    "../api/rtc_event_log",
    "../api/units:timestamp",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

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:libjingle_logging_api",
      "../api/rtc_event_log",
      "../test:test_support",
    ]
  }
}
