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

source_set("flow") {
  sources = [
    "compositor_context.cc",
    "compositor_context.h",
    "debug_print.cc",
    "debug_print.h",
    "instrumentation.cc",
    "instrumentation.h",
    "layers/backdrop_filter_layer.cc",
    "layers/backdrop_filter_layer.h",
    "layers/clip_path_layer.cc",
    "layers/clip_path_layer.h",
    "layers/clip_rect_layer.cc",
    "layers/clip_rect_layer.h",
    "layers/clip_rrect_layer.cc",
    "layers/clip_rrect_layer.h",
    "layers/color_filter_layer.cc",
    "layers/color_filter_layer.h",
    "layers/container_layer.cc",
    "layers/container_layer.h",
    "layers/layer.cc",
    "layers/layer.h",
    "layers/layer_tree.cc",
    "layers/layer_tree.h",
    "layers/opacity_layer.cc",
    "layers/opacity_layer.h",
    "layers/performance_overlay_layer.cc",
    "layers/performance_overlay_layer.h",
    "layers/physical_model_layer.cc",
    "layers/physical_model_layer.h",
    "layers/picture_layer.cc",
    "layers/picture_layer.h",
    "layers/shader_mask_layer.cc",
    "layers/shader_mask_layer.h",
    "layers/transform_layer.cc",
    "layers/transform_layer.h",
    "matrix_decomposition.cc",
    "matrix_decomposition.h",
    "paint_utils.cc",
    "paint_utils.h",
    "process_info.h",
    "raster_cache.cc",
    "raster_cache.h",
    "raster_cache_key.cc",
    "raster_cache_key.h",
  ]

  public_deps = [
    "//garnet/public/lib/fxl",
  ]

  deps = [
    "//flutter/common",
    "//flutter/glue",
    "//flutter/synchronization",
    "//third_party/skia",
    "//third_party/skia:gpu",
  ]

  if (is_fuchsia) {
    sources += [
      "export_node.cc",
      "export_node.h",
      "layers/child_scene_layer.cc",
      "layers/child_scene_layer.h",
      "scene_update_context.cc",
      "scene_update_context.h",
    ]

    deps += [
      "//garnet/public/lib/ui/scenic:client",
      "//garnet/public/lib/ui/scenic/fidl",
      "//topaz/public/dart-pkg/zircon",
    ]

    public_deps += [ "//zircon/system/ulib/zx" ]
  }
}

executable("flow_unittests") {
  testonly = true

  sources = [
    "matrix_decomposition_unittests.cc",
    "raster_cache_unittests.cc",
  ]

  deps = [
    ":flow",
    "//dart/runtime:libdart_jit",  # for tracing
    "//flutter/testing",
    "//third_party/skia",
  ]
}
