# 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",
    "diff_context.cc",
    "diff_context.h",
    "display_list.cc",
    "display_list.h",
    "display_list_canvas.cc",
    "display_list_canvas.h",
    "display_list_utils.cc",
    "display_list_utils.h",
    "embedded_views.cc",
    "embedded_views.h",
    "frame_timings.cc",
    "frame_timings.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/display_list_layer.cc",
    "layers/display_list_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",
    "paint_region.cc",
    "paint_region.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",
  ]

  public_configs = [
    "//flutter:config",
    "//flutter/vulkan:vulkan_config",
  ]

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

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

  source_set("flow_testing") {
    testonly = true

    sources = [
      "testing/diff_context_test.cc",
      "testing/diff_context_test.h",
      "testing/gl_context_switch_test.cc",
      "testing/gl_context_switch_test.h",
      "testing/layer_test.h",
      "testing/mock_embedder.cc",
      "testing/mock_embedder.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",
      "//flutter/common/graphics",
    ]
  }

  executable("flow_unittests") {
    testonly = true

    sources = [
      "display_list_canvas_unittests.cc",
      "display_list_unittests.cc",
      "embedded_view_params_unittests.cc",
      "flow_run_all_unittests.cc",
      "flow_test_utils.cc",
      "flow_test_utils.h",
      "frame_timings_recorder_unittests.cc",
      "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/display_list_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",
      "mutators_stack_unittests.cc",
      "raster_cache_unittests.cc",
      "rtree_unittests.cc",
      "skia_gpu_object_unittests.cc",
      "testing/auto_save_layer_unittests.cc",
      "testing/mock_layer_unittests.cc",
      "testing/mock_texture_unittests.cc",
      "texture_unittests.cc",
    ]

    deps = [
      ":flow",
      ":flow_fixtures",
      ":flow_testing",
      "//flutter/common/graphics",
      "//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" ]
    }
  }
}
