# Copyright 2014 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("//build/config/ui.gni")
import("//third_party/protobuf/proto_library.gni")

source_set("service") {
  sources = [
    "async_pixel_transfer_delegate.cc",
    "async_pixel_transfer_delegate.h",
    "async_pixel_transfer_manager_android.cc",
    "async_pixel_transfer_manager_idle.cc",
    "async_pixel_transfer_manager_idle.h",
    "async_pixel_transfer_manager_linux.cc",
    "async_pixel_transfer_manager_mac.cc",
    "async_pixel_transfer_manager_share_group.cc",
    "async_pixel_transfer_manager_share_group.h",
    "async_pixel_transfer_manager_stub.cc",
    "async_pixel_transfer_manager_stub.h",
    "async_pixel_transfer_manager_sync.cc",
    "async_pixel_transfer_manager_sync.h",
    "async_pixel_transfer_manager_win.cc",
    "async_pixel_transfer_manager.cc",
    "async_pixel_transfer_manager.h",
    "buffer_manager.h",
    "buffer_manager.cc",
    "cmd_buffer_engine.h",
    "cmd_parser.cc",
    "cmd_parser.h",
    "command_buffer_service.cc",
    "command_buffer_service.h",
    "common_decoder.cc",
    "common_decoder.h",
    "context_group.h",
    "context_group.cc",
    "context_state.h",
    "context_state_autogen.h",
    "context_state_impl_autogen.h",
    "context_state.cc",
    "error_state.cc",
    "error_state.h",
    "feature_info.h",
    "feature_info.cc",
    "framebuffer_manager.h",
    "framebuffer_manager.cc",
    "gles2_cmd_copy_texture_chromium.cc",
    "gles2_cmd_copy_texture_chromium.h",
    "gles2_cmd_decoder.h",
    "gles2_cmd_decoder_autogen.h",
    "gles2_cmd_decoder.cc",
    "gles2_cmd_validation.h",
    "gles2_cmd_validation.cc",
    "gles2_cmd_validation_autogen.h",
    "gles2_cmd_validation_implementation_autogen.h",
    "gl_context_virtual.cc",
    "gl_context_virtual.h",
    "gl_state_restorer_impl.cc",
    "gl_state_restorer_impl.h",
    "gl_utils.h",
    "gpu_scheduler.cc",
    "gpu_scheduler.h",
    "gpu_scheduler_mock.h",
    "gpu_state_tracer.cc",
    "gpu_state_tracer.h",
    "gpu_switches.cc",
    "gpu_switches.h",
    "gpu_tracer.cc",
    "gpu_tracer.h",
    "id_manager.h",
    "id_manager.cc",
    "image_manager.cc",
    "image_manager.h",
    "in_process_command_buffer.cc",
    "in_process_command_buffer.h",
    "logger.cc",
    "logger.h",
    "mailbox_manager.h",
    "mailbox_manager_impl.cc",
    "mailbox_manager_impl.h",
    "mailbox_manager_sync.cc",
    "mailbox_manager_sync.h",
    "memory_program_cache.h",
    "memory_program_cache.cc",
    "mocks.h",
    "program_manager.h",
    "program_manager.cc",
    "query_manager.h",
    "query_manager.cc",
    "renderbuffer_manager.h",
    "renderbuffer_manager.cc",
    "program_cache.h",
    "program_cache.cc",
    "shader_manager.h",
    "shader_manager.cc",
    "shader_translator.h",
    "shader_translator.cc",
    "shader_translator_cache.h",
    "shader_translator_cache.cc",
    "stream_texture_manager_in_process_android.h",
    "stream_texture_manager_in_process_android.cc",
    "texture_definition.h",
    "texture_definition.cc",
    "texture_manager.h",
    "texture_manager.cc",
    "transfer_buffer_manager.cc",
    "transfer_buffer_manager.h",
    "vertex_array_manager.h",
    "vertex_array_manager.cc",
    "vertex_attrib_manager.h",
    "vertex_attrib_manager.cc",
  ]

  defines = [ "GPU_IMPLEMENTATION" ]

  configs += [
    "//third_party/khronos:khronos_headers",
  ]

  # Prefer mesa GL headers to system headers, which cause problems on Win.
  include_dirs = [ "//third_party/mesa/src/include" ]

  public_deps = [
    "//gpu/command_buffer/common",
  ]
  deps = [
    ":disk_cache_proto",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//crypto",
    "//third_party/angle:translator",
    "//third_party/protobuf:protobuf_lite",
    "//third_party/re2",
    "//third_party/smhasher:cityhash",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  if (ui_compositor_image_transport) {
    include_dirs += [ "//third_party/khronos" ]
  }

  if (is_win || is_android || (is_linux && use_x11)) {
    sources += [
      "async_pixel_transfer_manager_egl.cc",
      "async_pixel_transfer_manager_egl.h",
    ]
  }

  if (is_android && !is_debug) {
    # On Android optimize more since this component can be a bottleneck.
    configs -= [ "//build/config/compiler:optimize" ]
    configs += [ "//build/config/compiler:optimize_max" ]
  }
}

proto_library("disk_cache_proto") {
  sources = [ "disk_cache_proto.proto" ]
}
