# 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.
# We only do software benchmarks on non-mobile platforms

import("//flutter/impeller/tools/impeller.gni")

source_set("display_list_testing") {
  testonly = true

  sources = [
    "dl_test_equality.h",
    "dl_test_snippets.cc",
    "dl_test_snippets.h",
  ]

  deps = [
    "//flutter/skia",
    "//flutter/testing:testing_lib",
    "//flutter/third_party/txt",
  ]

  public_deps = [ "//flutter/display_list:display_list" ]
}

surface_provider_include_software = !is_android && !is_ios

# iOS and Fuchsia and Windows don't support OpenGL
# Note: Windows would need some work to support OpenGL
# But, since benchmarks do not run on Windows and rendertests only
# runs on SW by default, this restriction currently only limits the
# ability to manually cross-check OpenGL on Windows for rendertests
surface_provider_include_gl = !is_fuchsia && !is_ios && !is_win && !is_mac

# TODO (https://github.com/flutter/flutter/issues/107357):
# impeller_enable_vulkan currently requires skia to not use VMA, which in turn
# causes linkage problems with swiftshader.
if (impeller_enable_vulkan) {
  surface_provider_include_gl = false
}

surface_provider_include_metal = is_mac || is_ios

config("surface_provider_config") {
  defines = []

  if (surface_provider_include_software) {
    defines += [ "ENABLE_SOFTWARE_BENCHMARKS" ]
  }
  if (surface_provider_include_gl) {
    defines += [ "ENABLE_OPENGL_BENCHMARKS" ]
  }
  if (surface_provider_include_metal) {
    defines += [ "ENABLE_METAL_BENCHMARKS" ]
  }

  # Don't snapshot test results on mobile platforms
  if (is_android || is_ios) {
    defines += [ "BENCHMARKS_NO_SNAPSHOT" ]
  }
}

source_set("display_list_surface_provider") {
  testonly = true

  sources = [ "dl_test_surface_provider.cc" ]

  deps = [
    "//flutter/common/graphics",
    "//flutter/testing:testing_lib",
  ]

  if (is_mac) {
    deps += [ "//flutter/impeller/golden_tests:metal_screenshot" ]
  }

  public_configs = [ ":surface_provider_config" ]

  if (is_android) {
    libs = [
      "android",
      "EGL",
      "GLESv2",
    ]
  }

  if (surface_provider_include_software) {
    sources += [
      "dl_test_surface_software.cc",
      "dl_test_surface_software.h",
    ]
  }

  if (surface_provider_include_gl) {
    sources += [
      "dl_test_surface_gl.cc",
      "dl_test_surface_gl.h",
    ]
    deps += [ "//flutter/testing:opengl" ]
  }

  if (surface_provider_include_metal) {
    sources += [
      "dl_test_surface_metal.cc",
      "dl_test_surface_metal.h",
    ]
    deps += [
      "//flutter/impeller/display_list",
      "//flutter/testing:metal",
    ]
  }
}
