# 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_content.cc",
    "graph/scene_content.h",
    "graph/scene_def.cc",
    "graph/scene_def.h",
    "graph/scene_label.cc",
    "graph/scene_label.h",
    "graph/snapshot.cc",
    "graph/snapshot.h",
    "render/render_frame.cc",
    "render/render_frame.h",
    "render/render_image.cc",
    "render/render_image.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",
  ]
}
