# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//components/scheduler/scheduler.gni")

# GYP version: components/scheduler.gypi:scheduler
component("scheduler") {
  sources = rebase_path(scheduler_gypi_values.scheduler_sources,
                        ".",
                        "//components/scheduler")

  defines = [ "SCHEDULER_IMPLEMENTATION" ]

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  deps = [
    ":common",
    "//base",
    "//cc:cc",
    "//third_party/WebKit/public:blink",
    "//ui/gfx:gfx",
  ]

  public_deps = [
    "//third_party/WebKit/public:blink",
  ]
}

# GYP version: components/scheduler.gypi:scheduler_common
source_set("common") {
  sources = rebase_path(scheduler_gypi_values.scheduler_common_sources,
                        ".",
                        "//components/scheduler")
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "base/task_queue_manager_delegate_for_test.cc",
    "base/task_queue_manager_delegate_for_test.h",
    "base/task_queue_manager_unittest.cc",
    "base/task_queue_selector_unittest.cc",
    "base/task_queue_sets_unittest.cc",
    "base/test_always_fail_time_source.cc",
    "base/test_always_fail_time_source.h",
    "base/test_time_source.cc",
    "base/test_time_source.h",
    "child/idle_helper_unittest.cc",
    "child/scheduler_helper_unittest.cc",
    "child/scheduler_tqm_delegate_for_test.cc",
    "child/scheduler_tqm_delegate_for_test.h",
    "child/scheduler_tqm_delegate_impl_unittest.cc",
    "child/virtual_time_tqm_delegate_unittest.cc",
    "child/webthread_impl_for_worker_scheduler_unittest.cc",
    "child/worker_scheduler_impl_unittest.cc",
    "renderer/deadline_task_runner_unittest.cc",
    "renderer/idle_time_estimator_unittest.cc",
    "renderer/render_widget_signals_unittest.cpp",
    "renderer/renderer_scheduler_impl_unittest.cc",
    "renderer/task_cost_estimator_unittest.cc",
    "renderer/user_model_unittest.cc",
    "renderer/web_frame_host_scheduler_impl_unittest.cc",
    "renderer/webthread_impl_for_renderer_scheduler_unittest.cc",
  ]

  deps = [
    ":scheduler",
    "//cc:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

# GYP version: components/scheduler.gypi:scheduler_test_support
static_library("test_support") {
  sources = rebase_path(scheduler_gypi_values.scheduler_test_support_sources,
                        ".",
                        "//components/scheduler")

  deps = [
    "//base",
  ]
}
