# 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.

source_set("surface_id") {
  sources = [
    "frame_sink_id.h",
    "local_frame_id.h",
    "surface_id.h",
    "surface_sequence.h",
    "surface_sequence_generator.cc",
    "surface_sequence_generator.h",
  ]

  deps = [
    "//base",
  ]
}

component("surfaces") {
  output_name = "cc_surfaces"
  sources = [
    "direct_compositor_frame_sink.cc",
    "direct_compositor_frame_sink.h",
    "display.cc",
    "display.h",
    "display_client.h",
    "display_scheduler.cc",
    "display_scheduler.h",
    "surface.cc",
    "surface.h",
    "surface_aggregator.cc",
    "surface_aggregator.h",
    "surface_factory.cc",
    "surface_factory.h",
    "surface_factory_client.h",
    "surface_hittest.cc",
    "surface_hittest.h",
    "surface_hittest_delegate.h",
    "surface_id_allocator.cc",
    "surface_id_allocator.h",
    "surface_manager.cc",
    "surface_manager.h",
    "surface_resource_holder.cc",
    "surface_resource_holder.h",
    "surfaces_export.h",
  ]

  defines = [ "CC_SURFACES_IMPLEMENTATION=1" ]

  public_deps = [
    ":surface_id",
  ]
  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/common",
    "//skia",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (is_android && !is_debug) {
    configs -= [ "//build/config/compiler:default_optimization" ]
    configs += [ "//build/config/compiler:optimize_max" ]
  }
}
