# 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_source_set("task_queue") {
  visibility = [ "*" ]
  public = [
    "queued_task.h",
    "task_queue_priority.h",
  ]
}

# TODO(bugs.webrtc.org/10191): Merge the target into task_queue target above
# when support for link-time injection is dropped.
rtc_source_set("task_queue_factory") {
  visibility = [ "*" ]
  public = [
    "task_queue_base.h",
    "task_queue_factory.h",
  ]
  sources = [
    "task_queue_base.cc",
    "task_queue_impl.cc",
    "task_queue_impl.h",
  ]

  deps = [
    ":task_queue",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_task_queue_api",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

rtc_source_set("task_queue_test") {
  visibility = [ "*" ]
  testonly = true
  sources = [
    "task_queue_test.cc",
    "task_queue_test.h",
  ]
  deps = [
    ":task_queue",
    ":task_queue_factory",
    "../../rtc_base:rtc_event",
    "../../rtc_base:rtc_task_queue_api",
    "../../rtc_base:timeutils",
    "../../test:test_support",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

rtc_source_set("default_task_queue_factory") {
  # TODO(bugs.webrtc.org/10191): Make public when implemented for all
  # supported platforms.
  visibility = [ ":global_task_queue_factory" ]
  sources = [
    "default_task_queue_factory.h",
  ]
  deps = [
    ":task_queue_factory",
  ]

  # TODO(bugs.webrtc.org/10284): Include implementation unconditionally when
  # global task queue factory is removed.
  if (rtc_link_task_queue_impl) {
    deps += [ ":default_task_queue_factory_impl" ]
  }
}

# TODO(bugs.webrtc.org/10191): Merge back to default_task_queue_factory when
# rtc_task_queue_impl build target is removed.
rtc_source_set("default_task_queue_factory_impl") {
  # Include the implementation when rtc_link_task_queue_impl is set to default
  # value of true or when explicit dependency on "rtc_task_queue_impl" is added.
  visibility = [
    ":default_task_queue_factory",
    "../../rtc_base:rtc_task_queue_impl",
  ]
  deps = [
    ":task_queue_factory",
  ]
  if (rtc_enable_libevent) {
    sources = [
      "default_task_queue_factory_libevent.cc",
    ]
    deps += [ "../../rtc_base:rtc_task_queue_libevent" ]
  } else {
    sources = [
      "default_task_queue_factory_unimplemented.cc",
    ]
    deps += [ "../../rtc_base:checks" ]
  }
}

# Linking with global_task_queue_factory adds link-time implementation of the
# rtc::TaskQueue that allows run-time injection of the TaskQueue implementaion.
rtc_source_set("global_task_queue_factory") {
  # TODO(bugs.webrtc.org/10284): Remove this target when task queue factory
  # propagated to all components that create TaskQueues.
  visibility = [ "*" ]
  sources = [
    "global_task_queue_factory.cc",
    "global_task_queue_factory.h",

    # TODO(bugs.webrtc.org/10191): Move task_queue.cc to private build
    # "rtc_task_queue" when "rtc_task_queue_api", "rtc_task_queue",
    # and "rtc_task_queue_impl" can be joined.
    "task_queue.cc",
  ]
  deps = [
    ":default_task_queue_factory",
    ":task_queue_factory",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_task_queue_api",
  ]
}
