# Copyright 2013 The Flutter 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/fuchsia/sdk.gni")
import("//flutter/common/config.gni")
import("//flutter/testing/testing.gni")

source_set("flow") {
  sources = [
    "compositor_context.cc",
    "compositor_context.h",
    "embedded_views.cc",
    "embedded_views.h",
    "gl_context_switch.cc",
    "gl_context_switch.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/image_filter_layer.cc",
    "layers/image_filter_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_shape_layer.cc",
    "layers/physical_shape_layer.h",
    "layers/picture_layer.cc",
    "layers/picture_layer.h",
    "layers/platform_view_layer.cc",
    "layers/platform_view_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",
    "rtree.cc",
    "rtree.h",
    "skia_gpu_object.cc",
    "skia_gpu_object.h",
    "surface.cc",
    "surface.h",
    "surface_frame.cc",
    "surface_frame.h",
    "texture.cc",
    "texture.h",
  ]

  public_configs = [ "//flutter:config" ]

  deps = [
    "//flutter/common",
    "//flutter/fml",
    "//third_party/skia",
  ]

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

    public_deps = [
      "$fuchsia_sdk_root/fidl:fuchsia.ui.app",
      "$fuchsia_sdk_root/fidl:fuchsia.ui.gfx",
      "$fuchsia_sdk_root/fidl:fuchsia.ui.views",
      "$fuchsia_sdk_root/pkg:scenic_cpp",
    ]
  }
}

if (enable_unittests) {
  test_fixtures("flow_fixtures") {
    fixtures = []
  }

  source_set("flow_testing") {
    testonly = true

    sources = [
      "testing/gl_context_switch_test.cc",
      "testing/gl_context_switch_test.h",
      "testing/layer_test.h",
      "testing/mock_layer.cc",
      "testing/mock_layer.h",
      "testing/mock_raster_cache.cc",
      "testing/mock_raster_cache.h",
      "testing/mock_texture.cc",
      "testing/mock_texture.h",
      "testing/skia_gpu_object_layer_test.cc",
      "testing/skia_gpu_object_layer_test.h",
    ]

    public_deps = [
      "//flutter/testing:skia",
      "//third_party/googletest:gtest",
    ]

    deps = [ ":flow" ]
  }

  executable("flow_unittests") {
    testonly = true

    sources = [
      "embedded_view_params_unittests.cc",
      "flow_run_all_unittests.cc",
      "flow_test_utils.cc",
      "flow_test_utils.h",
      "gl_context_switch_unittests.cc",
      "layers/backdrop_filter_layer_unittests.cc",
      "layers/checkerboard_layertree_unittests.cc",
      "layers/clip_path_layer_unittests.cc",
      "layers/clip_rect_layer_unittests.cc",
      "layers/clip_rrect_layer_unittests.cc",
      "layers/color_filter_layer_unittests.cc",
      "layers/container_layer_unittests.cc",
      "layers/image_filter_layer_unittests.cc",
      "layers/layer_tree_unittests.cc",
      "layers/opacity_layer_unittests.cc",
      "layers/performance_overlay_layer_unittests.cc",
      "layers/physical_shape_layer_unittests.cc",
      "layers/picture_layer_unittests.cc",
      "layers/platform_view_layer_unittests.cc",
      "layers/shader_mask_layer_unittests.cc",
      "layers/texture_layer_unittests.cc",
      "layers/transform_layer_unittests.cc",
      "matrix_decomposition_unittests.cc",
      "mutators_stack_unittests.cc",
      "raster_cache_unittests.cc",
      "rtree_unittests.cc",
      "skia_gpu_object_unittests.cc",
      "testing/mock_layer_unittests.cc",
      "testing/mock_texture_unittests.cc",
      "texture_unittests.cc",
    ]

    deps = [
      ":flow",
      ":flow_fixtures",
      ":flow_testing",
      "//flutter/fml",
      "//flutter/testing:skia",
      "//flutter/testing:testing_lib",
      "//third_party/dart/runtime:libdart_jit",  # for tracing
      "//third_party/googletest:gtest",
      "//third_party/skia",
    ]

    if (!defined(defines)) {
      defines = []
    }
    if (is_win) {
      # Required for M_PI and others.
      defines += [ "_USE_MATH_DEFINES" ]
    }

    if (is_fuchsia && flutter_enable_legacy_fuchsia_embedder) {
      sources += [ "layers/fuchsia_layer_unittests.cc" ]

      deps += [ "//build/fuchsia/pkg:sys_cpp_testing" ]
    }
  }
}
