# 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/default_layer_builder.cc",
    "layers/default_layer_builder.h",
    "layers/layer.cc",
    "layers/layer.h",
    "layers/layer_builder.cc",
    "layers/layer_builder.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_shape_layer.cc",
    "layers/physical_shape_layer.h",
    "layers/picture_layer.cc",
    "layers/picture_layer.h",
    "layers/shader_mask_layer.cc",
    "layers/shader_mask_layer.h",
    "layers/texture_layer.cc",
    "layers/texture_layer.h",
    "layers/transform_layer.cc",
    "layers/transform_layer.h",
    "matrix_decomposition.cc",
    "matrix_decomposition.h",
    "paint_utils.cc",
    "paint_utils.h",
    "raster_cache.cc",
    "raster_cache.h",
    "raster_cache_key.cc",
    "raster_cache_key.h",
    "skia_gpu_object.cc",
    "skia_gpu_object.h",
    "texture.cc",
    "texture.h",
  ]

  public_configs = [ "$flutter_root:config" ]

  public_deps = []

  deps = [
    "$flutter_root/common",
    "$flutter_root/fml",
    "$flutter_root/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",
    ]

    public_deps += [
      "//garnet/public/fidl/fuchsia.ui.scenic",
      "//garnet/public/lib/ui/scenic/cpp",
      "//topaz/public/dart-pkg/zircon",
    ]

    public_deps += [ "//zircon/public/lib/zx" ]
  }
}

executable("flow_unittests") {
  testonly = true

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

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