# Copyright 2015 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("//mojo/public/mojo_application.gni")
import("//testing/test.gni")

source_set("common") {
  sources = [
    "backend/gpu_output.cc",
    "backend/gpu_output.h",
    "backend/gpu_rasterizer.cc",
    "backend/gpu_rasterizer.h",
    "backend/output.h",
    "backend/scheduler.cc",
    "backend/scheduler.h",
    "backend/vsync_scheduler.cc",
    "backend/vsync_scheduler.h",
    "compositor_app.cc",
    "compositor_app.h",
    "compositor_engine.cc",
    "compositor_engine.h",
    "compositor_impl.cc",
    "compositor_impl.h",
    "graph/node_def.cc",
    "graph/node_def.h",
    "graph/resource_def.cc",
    "graph/resource_def.h",
    "graph/scene_def.cc",
    "graph/scene_def.h",
    "graph/snapshot.cc",
    "graph/snapshot.h",
    "render/render_frame.cc",
    "render/render_frame.h",
    "render/render_image.cc",
    "render/render_image.h",
    "render/render_layer.cc",
    "render/render_layer.h",
    "renderer_impl.cc",
    "renderer_impl.h",
    "renderer_state.cc",
    "renderer_state.h",
    "scene_impl.cc",
    "scene_impl.h",
    "scene_state.cc",
    "scene_state.h",
  ]

  public_deps = [
    "//base",
    "//mojo/application",
    "//mojo/common",
    "//mojo/common:tracing_impl",
    "//mojo/converters/geometry",
    "//mojo/gpu",
    "//mojo/public/c/gpu",
    "//mojo/public/cpp/bindings:bindings",
    "//mojo/services/geometry/cpp",
    "//mojo/services/geometry/interfaces",
    "//mojo/services/gfx/composition/cpp",
    "//mojo/services/gfx/composition/interfaces",
    "//mojo/services/gpu/interfaces",
    "//mojo/skia",
    "//skia",
  ]
}

mojo_native_application("compositor") {
  output_name = "compositor_service"

  sources = [
    "main.cc",
  ]

  deps = [
    ":common",
    "//mojo/environment:chromium",
  ]
}

mojo_native_application("apptests") {
  output_name = "compositor_apptests"

  testonly = true

  sources = [
    "backend/vsync_scheduler_unittest.cc",
  ]

  deps = [
    ":common",
    "//base/test:test_support",
    "//mojo/application:test_support",
    "//testing/gtest",
  ]
}
