# 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",
    ]
  }
}

if (false) {

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/surfaces",
    "//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" ]
  }
}

}  # if (false)

# 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" ]
#  }
#}
