# 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")

component("compositor") {
  sources = [
    "closure_animation_observer.cc",
    "closure_animation_observer.h",
    "compositor.cc",
    "compositor.h",
    "compositor_animation_observer.h",
    "compositor_export.h",
    "compositor_observer.cc",
    "compositor_observer.h",
    "compositor_vsync_manager.cc",
    "compositor_vsync_manager.h",
    "compositor_switches.cc",
    "compositor_switches.h",
    "debug_utils.cc",
    "debug_utils.h",
    "dip_util.cc",
    "dip_util.h",
    "float_animation_curve_adapter.cc",
    "float_animation_curve_adapter.h",
    "layer.cc",
    "layer.h",
    "layer_animation_delegate.h",
    "layer_animation_element.cc",
    "layer_animation_element.h",
    "layer_animation_observer.cc",
    "layer_animation_observer.h",
    "layer_animation_sequence.cc",
    "layer_animation_sequence.h",
    "layer_animator.cc",
    "layer_animator.h",
    "layer_animator_collection.cc",
    "layer_animator_collection.h",
    "layer_delegate.h",
    "layer_owner.cc",
    "layer_owner.h",
    "layer_tree_owner.cc",
    "layer_tree_owner.h",
    "layer_type.h",
    "reflector.h",
    "scoped_animation_duration_scale_mode.cc",
    "scoped_animation_duration_scale_mode.h",
    "scoped_layer_animation_settings.cc",
    "scoped_layer_animation_settings.h",
    "transform_animation_curve_adapter.cc",
    "transform_animation_curve_adapter.h",
  ]

  defines = [ "COMPOSITOR_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//cc/surfaces",
    "//gpu/command_buffer/common",
    "//skia",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  if (is_win && use_aura) {
    # TODO(sky): before we make this real need to remove
    # IDR_BITMAP_BRUSH_IMAGE.
    deps += [
      "//ui/resources",
      "//third_party/angle:libEGL",
      "//third_party/angle:libGLESv2",
    ]
  }
}

source_set("test_support") {
  testonly = true
  sources = [
    "test/context_factories_for_test.cc",
    "test/context_factories_for_test.h",
    "test/draw_waiter_for_test.cc",
    "test/draw_waiter_for_test.h",
    "test/in_process_context_factory.cc",
    "test/in_process_context_factory.h",
    "test/layer_animator_test_controller.cc",
    "test/layer_animator_test_controller.h",
    "test/test_compositor_host.h",
    "test/test_compositor_host_mac.mm",
    "test/test_compositor_host_win.cc",
    "test/test_layer_animation_delegate.cc",
    "test/test_layer_animation_delegate.h",
    "test/test_layer_animation_observer.cc",
    "test/test_layer_animation_observer.h",
    "test/test_layers.cc",
    "test/test_layers.h",
    "test/test_suite.cc",
    "test/test_suite.h",
    "test/test_utils.cc",
    "test/test_utils.h",
  ]

  public_deps = [
    ":compositor",
  ]
  deps = [
    "//base/test:test_support",
    "//cc",
    "//cc:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/WebKit/public:blink_minimal",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//webkit/common/gpu",
  ]

  if (use_x11) {
    configs += [ "//build/config/linux:x11" ]
    deps += [ "//ui/gfx/x" ]
  }

  if (use_ozone) {
    sources += [ "test/test_compositor_host_ozone.cc" ]
  } else if (use_x11) {
    sources += [ "test/test_compositor_host_x11.cc" ]
  }
}

# TODO(GYP) enable this when all dependencies are complete and it links.
#test("compositor_unittests") {
#  sources = [
#    "layer_animation_element_unittest.cc",
#    "layer_animation_sequence_unittest.cc",
#    "layer_animator_unittest.cc",
#    "layer_owner_unittest.cc",
#    "layer_unittest.cc",
#    "run_all_unittests.cc",
#    "transform_animation_curve_adapter_unittest.cc",
#  ]
#
#  deps = [
#    ":compositor",
#    ":test_support",
#    "//base",
#    "//base/allocator",
#    "//base/test:test_support",
#    "//cc",
#    "//cc:test_support",
#    "//skia",
#    "//testing/gtest",
#    "//ui/base",
#    "//ui/gfx",
#    "//ui/gfx/geometry",
#    "//ui/gl",
#    "//ui/resources",
#  ]
#
#  if (is_linux) {
#    deps += [ "//third_party/mesa:osmesa" ]
#  }
#}
