# Copyright 2018 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("//media/gpu/args.gni")

source_set("gpu_host") {
  sources = [
    "gpu_host.cc",
    "gpu_host.h",
    "gpu_host_delegate.h",
  ]

  deps = [
    "//base",
    "//components/discardable_memory/service",
    "//components/viz/common",
    "//components/viz/host",
    "//components/viz/service/main",  # TODO(crbug/912221): Remove after GPU process split.
    "//gpu/command_buffer/client",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/service",
    "//gpu/ipc/client",
    "//gpu/ipc/common",
    "//gpu/ipc/host",
    "//gpu/ipc/service",  # TODO(crbug/912221): Remove after GPU process split.
    "//media/gpu:buildflags",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//services/service_manager/public/cpp",
    "//ui/gfx",
    "//ui/gl",
  ]

  public_deps = [
    "//services/viz/privileged/interfaces",
    "//services/viz/public/interfaces",
    "//services/ws/public/mojom",
  ]

  if (is_chromeos) {
    sources += [
      "arc_gpu_client.cc",
      "arc_gpu_client.h",
    ]
  }

  if (use_vaapi) {
    deps += [ "//media/gpu/vaapi" ]
  }

  # ui service should not depend on below components.
  assert_no_deps = [
    "//ash",
    "//content/public/browser",
    "//content/public/common",
    "//ui/aura",
    "//ui/views",
  ]
}

source_set("test_support") {
  testonly = true

  sources = [
    "gpu_host_test_api.cc",
    "gpu_host_test_api.h",
  ]

  deps = [
    ":gpu_host",
    "//base",
    "//components/viz/host",
    "//components/viz/test:test_support",
    "//services/viz/privileged/interfaces",
  ]
}

source_set("tests") {
  testonly = true

  sources = [
    "gpu_host_unittest.cc",
  ]

  deps = [
    ":gpu_host",
    ":test_support",
    "//base",
    "//base/test:test_config",
    "//base/test:test_support",
    "//components/discardable_memory/service",
    "//components/viz/host",
    "//components/viz/service",
    "//components/viz/service/main",
    "//components/viz/test:test_support",
    "//gpu/ipc/client",
    "//mojo/public/cpp/bindings:bindings",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
    "//services/ws/common",
    "//services/ws/common:task_runner_test_base",
    "//services/ws/public/cpp",
    "//services/ws/public/mojom",
    "//testing/gtest",
    "//third_party/mesa_headers",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
    "//ui/gfx/geometry/mojo",
    "//ui/gl",
    "//ui/gl/init",
  ]
}
