# Copyright 2012 The Dawn Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("../../../scripts/dawn_overrides_with_defaults.gni")

import("//testing/test.gni")
import("${dawn_root}/generator/dawn_generator.gni")
import("${dawn_root}/scripts/dawn_features.gni")

group("tests") {
  testonly = true
  deps = [
    ":dawn_end2end_tests",
    ":dawn_perf_tests",
    ":dawn_unittests",
  ]
}

###############################################################################
# Gtest Gmock - Handle building inside and outside of Chromium.
###############################################################################

# When building outside of Chromium we need to define our own targets for GTest
# and GMock. However when compiling inside of Chromium we need to reuse the
# existing targets, both because Chromium has a special harness for swarming
# and because otherwise the "gn check" fails.

if (!build_with_chromium) {
  # When we aren't in Chromium we define out own targets based on the location
  # of the googletest repo.
  googletest_dir = dawn_googletest_dir

  config("gtest_config") {
    include_dirs = [
      "${googletest_dir}/googletest",
      "${googletest_dir}/googletest/include",
    ]
  }

  static_library("gtest") {
    testonly = true
    sources = [ "${googletest_dir}/googletest/src/gtest-all.cc" ]
    public_configs = [ ":gtest_config" ]
  }

  config("gmock_config") {
    include_dirs = [
      "${googletest_dir}/googlemock",
      "${googletest_dir}/googlemock/include",
      "${googletest_dir}/googletest/include",
    ]
  }

  static_library("gmock") {
    testonly = true
    sources = [ "${googletest_dir}/googlemock/src/gmock-all.cc" ]
    public_configs = [ ":gmock_config" ]
  }

  group("gmock_and_gtest") {
    testonly = true
    public_deps = [
      ":gmock",
      ":gtest",
    ]
  }
} else {
  # When we are in Chromium we reuse its targets, and also add some deps that
  # are needed to launch the test in swarming mode.
  group("gmock_and_gtest") {
    testonly = true
    public_deps = [
      "//base",
      "//base/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]
  }
}

###############################################################################
# Wrapping of Chromium targets
###############################################################################

# These targets are separated because they are Chromium sources files that
# can't use the dawn_internal config, otherwise Dawn's warning flags get
# applied while compiling a bunch of Chromium's //base (via header inclusion)
if (build_with_chromium) {
  source_set("unittests_main") {
    testonly = true
    deps = [ ":gmock_and_gtest" ]
    sources = [ "//gpu/dawn_unittests_main.cc" ]
  }
  source_set("end2end_tests_main") {
    testonly = true
    deps = [ ":gmock_and_gtest" ]
    sources = [ "//gpu/dawn_end2end_tests_main.cc" ]
  }
  source_set("perf_tests_main") {
    testonly = true
    deps = [ ":gmock_and_gtest" ]
    sources = [ "//gpu/dawn_perf_tests_main.cc" ]
  }
}

###############################################################################
# Dawn test template
###############################################################################
template("dawn_test") {
  test(target_name) {
    # Copy all variables except "configs", which has a default value
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }

    configs += [ "${dawn_root}/src/dawn/common:internal_config" ]
  }
}

###############################################################################
# Dawn unittests
###############################################################################

dawn_json_generator("mock_webgpu_gen") {
  target = "mock_api"
  outputs = [
    "src/dawn/mock_webgpu.h",
    "src/dawn/mock_webgpu.cpp",
  ]
}

# Source code for mocks used for unit testing are separated from the rest of
# sources so that they aren't included in non-test builds.
source_set("native_mocks_sources") {
  testonly = true

  deps = [
    ":gmock_and_gtest",
    "${dawn_root}/src/dawn/native:sources",
    "${dawn_root}/src/dawn/native:static",
    "${dawn_root}/src/dawn/utils",
  ]

  # Add internal dawn native config for internal unittests.
  configs += [ "${dawn_root}/src/dawn/native:internal" ]

  sources = [
    "unittests/native/mocks/BindGroupLayoutMock.cpp",
    "unittests/native/mocks/BindGroupLayoutMock.h",
    "unittests/native/mocks/BindGroupMock.cpp",
    "unittests/native/mocks/BindGroupMock.h",
    "unittests/native/mocks/BufferMock.cpp",
    "unittests/native/mocks/BufferMock.h",
    "unittests/native/mocks/CommandBufferMock.cpp",
    "unittests/native/mocks/CommandBufferMock.h",
    "unittests/native/mocks/ComputePipelineMock.cpp",
    "unittests/native/mocks/ComputePipelineMock.h",
    "unittests/native/mocks/DeviceMock.h",
    "unittests/native/mocks/ExternalTextureMock.cpp",
    "unittests/native/mocks/ExternalTextureMock.h",
    "unittests/native/mocks/PipelineLayoutMock.cpp",
    "unittests/native/mocks/PipelineLayoutMock.h",
    "unittests/native/mocks/QuerySetMock.cpp",
    "unittests/native/mocks/QuerySetMock.h",
    "unittests/native/mocks/RenderPipelineMock.cpp",
    "unittests/native/mocks/RenderPipelineMock.h",
    "unittests/native/mocks/SamplerMock.cpp",
    "unittests/native/mocks/SamplerMock.h",
    "unittests/native/mocks/ShaderModuleMock.cpp",
    "unittests/native/mocks/ShaderModuleMock.h",
    "unittests/native/mocks/SwapChainMock.cpp",
    "unittests/native/mocks/SwapChainMock.h",
    "unittests/native/mocks/TextureMock.cpp",
    "unittests/native/mocks/TextureMock.h",
  ]
}

dawn_test("dawn_unittests") {
  deps = [
    ":gmock_and_gtest",
    ":mock_webgpu_gen",
    ":native_mocks_sources",
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/native:sources",
    "${dawn_root}/src/dawn/native:static",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  # Add internal dawn native config for internal unittests.
  configs = [ "${dawn_root}/src/dawn/native:internal" ]

  sources = get_target_outputs(":mock_webgpu_gen")
  sources += [
    "${dawn_root}/src/dawn/wire/client/ClientMemoryTransferService_mock.cpp",
    "${dawn_root}/src/dawn/wire/client/ClientMemoryTransferService_mock.h",
    "${dawn_root}/src/dawn/wire/server/ServerMemoryTransferService_mock.cpp",
    "${dawn_root}/src/dawn/wire/server/ServerMemoryTransferService_mock.h",
    "DawnNativeTest.cpp",
    "DawnNativeTest.h",
    "MockCallback.h",
    "ToggleParser.cpp",
    "ToggleParser.h",
    "unittests/AsyncTaskTests.cpp",
    "unittests/BitSetIteratorTests.cpp",
    "unittests/BuddyAllocatorTests.cpp",
    "unittests/BuddyMemoryAllocatorTests.cpp",
    "unittests/ChainUtilsTests.cpp",
    "unittests/CommandAllocatorTests.cpp",
    "unittests/ConcurrentCacheTests.cpp",
    "unittests/EnumClassBitmasksTests.cpp",
    "unittests/EnumMaskIteratorTests.cpp",
    "unittests/ErrorTests.cpp",
    "unittests/FeatureTests.cpp",
    "unittests/GPUInfoTests.cpp",
    "unittests/GetProcAddressTests.cpp",
    "unittests/ITypArrayTests.cpp",
    "unittests/ITypBitsetTests.cpp",
    "unittests/ITypSpanTests.cpp",
    "unittests/ITypVectorTests.cpp",
    "unittests/LimitsTests.cpp",
    "unittests/LinkedListTests.cpp",
    "unittests/MathTests.cpp",
    "unittests/ObjectBaseTests.cpp",
    "unittests/PerStageTests.cpp",
    "unittests/PerThreadProcTests.cpp",
    "unittests/PlacementAllocatedTests.cpp",
    "unittests/RefBaseTests.cpp",
    "unittests/RefCountedTests.cpp",
    "unittests/ResultTests.cpp",
    "unittests/RingBufferAllocatorTests.cpp",
    "unittests/SerialMapTests.cpp",
    "unittests/SerialQueueTests.cpp",
    "unittests/SlabAllocatorTests.cpp",
    "unittests/StackContainerTests.cpp",
    "unittests/SubresourceStorageTests.cpp",
    "unittests/SystemUtilsTests.cpp",
    "unittests/ToBackendTests.cpp",
    "unittests/TypedIntegerTests.cpp",
    "unittests/VersionTests.cpp",
    "unittests/native/CacheKeyTests.cpp",
    "unittests/native/CommandBufferEncodingTests.cpp",
    "unittests/native/CreatePipelineAsyncTaskTests.cpp",
    "unittests/native/DestroyObjectTests.cpp",
    "unittests/native/DeviceCreationTests.cpp",
    "unittests/validation/BindGroupValidationTests.cpp",
    "unittests/validation/BufferValidationTests.cpp",
    "unittests/validation/CommandBufferValidationTests.cpp",
    "unittests/validation/ComputeIndirectValidationTests.cpp",
    "unittests/validation/ComputeValidationTests.cpp",
    "unittests/validation/CopyCommandsValidationTests.cpp",
    "unittests/validation/CopyTextureForBrowserTests.cpp",
    "unittests/validation/DebugMarkerValidationTests.cpp",
    "unittests/validation/DeviceValidationTests.cpp",
    "unittests/validation/DrawIndirectValidationTests.cpp",
    "unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp",
    "unittests/validation/DynamicStateCommandValidationTests.cpp",
    "unittests/validation/ErrorScopeValidationTests.cpp",
    "unittests/validation/ExternalTextureTests.cpp",
    "unittests/validation/GetBindGroupLayoutValidationTests.cpp",
    "unittests/validation/IndexBufferValidationTests.cpp",
    "unittests/validation/InternalUsageValidationTests.cpp",
    "unittests/validation/LabelTests.cpp",
    "unittests/validation/MinimumBufferSizeValidationTests.cpp",
    "unittests/validation/MultipleDeviceTests.cpp",
    "unittests/validation/OverridableConstantsValidationTests.cpp",
    "unittests/validation/PipelineAndPassCompatibilityTests.cpp",
    "unittests/validation/QueryValidationTests.cpp",
    "unittests/validation/QueueOnSubmittedWorkDoneValidationTests.cpp",
    "unittests/validation/QueueSubmitValidationTests.cpp",
    "unittests/validation/QueueWriteBufferValidationTests.cpp",
    "unittests/validation/QueueWriteTextureValidationTests.cpp",
    "unittests/validation/RenderBundleValidationTests.cpp",
    "unittests/validation/RenderPassDescriptorValidationTests.cpp",
    "unittests/validation/RenderPipelineValidationTests.cpp",
    "unittests/validation/ResourceUsageTrackingTests.cpp",
    "unittests/validation/SamplerValidationTests.cpp",
    "unittests/validation/ShaderModuleValidationTests.cpp",
    "unittests/validation/StorageTextureValidationTests.cpp",
    "unittests/validation/TextureSubresourceTests.cpp",
    "unittests/validation/TextureValidationTests.cpp",
    "unittests/validation/TextureViewValidationTests.cpp",
    "unittests/validation/ToggleValidationTests.cpp",
    "unittests/validation/UnsafeAPIValidationTests.cpp",
    "unittests/validation/ValidationTest.cpp",
    "unittests/validation/ValidationTest.h",
    "unittests/validation/VertexBufferValidationTests.cpp",
    "unittests/validation/VertexStateValidationTests.cpp",
    "unittests/validation/VideoViewsValidationTests.cpp",
    "unittests/validation/WriteBufferTests.cpp",
    "unittests/wire/WireAdapterTests.cpp",
    "unittests/wire/WireArgumentTests.cpp",
    "unittests/wire/WireBasicTests.cpp",
    "unittests/wire/WireBufferMappingTests.cpp",
    "unittests/wire/WireCreatePipelineAsyncTests.cpp",
    "unittests/wire/WireDestroyObjectTests.cpp",
    "unittests/wire/WireDisconnectTests.cpp",
    "unittests/wire/WireErrorCallbackTests.cpp",
    "unittests/wire/WireExtensionTests.cpp",
    "unittests/wire/WireInjectDeviceTests.cpp",
    "unittests/wire/WireInjectInstanceTests.cpp",
    "unittests/wire/WireInjectSwapChainTests.cpp",
    "unittests/wire/WireInjectTextureTests.cpp",
    "unittests/wire/WireInstanceTests.cpp",
    "unittests/wire/WireMemoryTransferServiceTests.cpp",
    "unittests/wire/WireOptionalTests.cpp",
    "unittests/wire/WireQueueTests.cpp",
    "unittests/wire/WireShaderModuleTests.cpp",
    "unittests/wire/WireTest.cpp",
    "unittests/wire/WireTest.h",
    "unittests/wire/WireWGPUDevicePropertiesTests.cpp",
  ]

  if (is_win) {
    sources += [ "unittests/WindowsUtilsTests.cpp" ]
  }

  if (dawn_enable_d3d12) {
    sources += [ "unittests/d3d12/CopySplitTests.cpp" ]
  }

  # When building inside Chromium, use their gtest main function because it is
  # needed to run in swarming correctly.
  if (build_with_chromium) {
    deps += [ ":unittests_main" ]
  } else {
    sources += [ "UnittestsMain.cpp" ]
  }
}

###############################################################################
# Dawn test infrastructure targets
###############################################################################

source_set("test_infra_sources") {
  configs += [ "${dawn_root}/src/dawn/native:internal" ]
  testonly = true

  deps = [
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/native:sources",
    "${dawn_root}/src/dawn/native:static",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  public_deps = [ ":gmock_and_gtest" ]

  if (dawn_supports_glfw_for_windowing || dawn_enable_opengl) {
    assert(dawn_supports_glfw_for_windowing)
    public_deps += [ "${dawn_root}/src/dawn/utils:glfw" ]
  }

  sources = [
    "DawnTest.cpp",
    "DawnTest.h",
    "MockCallback.h",
    "ParamGenerator.h",
    "ToggleParser.cpp",
    "ToggleParser.h",
  ]
}

###############################################################################
# Dawn end2end tests targets
###############################################################################

# Source code for mocks used for end2end testing are separated from the rest of
# sources so that they aren't included in non-test builds.
source_set("end2end_mocks_sources") {
  configs += [ "${dawn_root}/src/dawn/native:internal" ]
  testonly = true

  deps = [
    ":gmock_and_gtest",
    "${dawn_root}/src/dawn/platform",
  ]

  sources = [
    "end2end/mocks/CachingInterfaceMock.cpp",
    "end2end/mocks/CachingInterfaceMock.h",
  ]
}

source_set("end2end_tests_sources") {
  testonly = true

  deps = [
    ":end2end_mocks_sources",
    ":test_infra_sources",
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/native:headers",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  sources = [
    "end2end/AdapterDiscoveryTests.cpp",
    "end2end/BasicTests.cpp",
    "end2end/BindGroupTests.cpp",
    "end2end/BufferTests.cpp",
    "end2end/BufferZeroInitTests.cpp",
    "end2end/ClipSpaceTests.cpp",
    "end2end/ColorStateTests.cpp",
    "end2end/CommandEncoderTests.cpp",
    "end2end/CompressedTextureFormatTests.cpp",
    "end2end/ComputeCopyStorageBufferTests.cpp",
    "end2end/ComputeDispatchTests.cpp",
    "end2end/ComputeLayoutMemoryBufferTests.cpp",
    "end2end/ComputeSharedMemoryTests.cpp",
    "end2end/ComputeStorageBufferBarrierTests.cpp",
    "end2end/CopyTests.cpp",
    "end2end/CopyTextureForBrowserTests.cpp",
    "end2end/CreatePipelineAsyncTests.cpp",
    "end2end/CullingTests.cpp",
    "end2end/DebugMarkerTests.cpp",
    "end2end/DeprecatedAPITests.cpp",
    "end2end/DepthBiasTests.cpp",
    "end2end/DepthStencilCopyTests.cpp",
    "end2end/DepthStencilLoadOpTests.cpp",
    "end2end/DepthStencilSamplingTests.cpp",
    "end2end/DepthStencilStateTests.cpp",
    "end2end/DestroyTests.cpp",
    "end2end/DeviceInitializationTests.cpp",
    "end2end/DeviceLifetimeTests.cpp",
    "end2end/DeviceLostTests.cpp",
    "end2end/DrawIndexedIndirectTests.cpp",
    "end2end/DrawIndexedTests.cpp",
    "end2end/DrawIndirectTests.cpp",
    "end2end/DrawTests.cpp",
    "end2end/DynamicBufferOffsetTests.cpp",
    "end2end/EntryPointTests.cpp",
    "end2end/ExperimentalDP4aTests.cpp",
    "end2end/ExternalTextureTests.cpp",
    "end2end/FirstIndexOffsetTests.cpp",
    "end2end/GpuMemorySynchronizationTests.cpp",
    "end2end/IndexFormatTests.cpp",
    "end2end/MaxLimitTests.cpp",
    "end2end/MemoryAllocationStressTests.cpp",
    "end2end/MultisampledRenderingTests.cpp",
    "end2end/MultisampledSamplingTests.cpp",
    "end2end/NonzeroBufferCreationTests.cpp",
    "end2end/NonzeroTextureCreationTests.cpp",
    "end2end/ObjectCachingTests.cpp",
    "end2end/OpArrayLengthTests.cpp",
    "end2end/PipelineCachingTests.cpp",
    "end2end/PipelineLayoutTests.cpp",
    "end2end/PrimitiveStateTests.cpp",
    "end2end/PrimitiveTopologyTests.cpp",
    "end2end/QueryTests.cpp",
    "end2end/QueueTests.cpp",
    "end2end/QueueTimelineTests.cpp",
    "end2end/ReadOnlyDepthStencilAttachmentTests.cpp",
    "end2end/RenderAttachmentTests.cpp",
    "end2end/RenderBundleTests.cpp",
    "end2end/RenderPassLoadOpTests.cpp",
    "end2end/RenderPassTests.cpp",
    "end2end/RequiredBufferSizeInCopyTests.cpp",
    "end2end/SamplerFilterAnisotropicTests.cpp",
    "end2end/SamplerTests.cpp",
    "end2end/ScissorTests.cpp",
    "end2end/ShaderFloat16Tests.cpp",
    "end2end/ShaderTests.cpp",
    "end2end/StorageTextureTests.cpp",
    "end2end/SubresourceRenderAttachmentTests.cpp",
    "end2end/Texture3DTests.cpp",
    "end2end/TextureFormatTests.cpp",
    "end2end/TextureSubresourceTests.cpp",
    "end2end/TextureViewTests.cpp",
    "end2end/TextureZeroInitTests.cpp",
    "end2end/VertexFormatTests.cpp",
    "end2end/VertexOnlyRenderPipelineTests.cpp",
    "end2end/VertexStateTests.cpp",
    "end2end/ViewportOrientationTests.cpp",
    "end2end/ViewportTests.cpp",
  ]

  libs = []

  if (dawn_enable_d3d12) {
    sources += [
      "end2end/D3D12CachingTests.cpp",
      "end2end/D3D12ResourceWrappingTests.cpp",
      "end2end/VideoViewsTests_win.cpp",
    ]
    libs += [
      "d3d11.lib",
      "dxgi.lib",
    ]
  }

  if (dawn_enable_metal) {
    sources += [
      "end2end/IOSurfaceWrappingTests.cpp",
      "end2end/VideoViewsTests_mac.cpp",
    ]
    frameworks = [ "IOSurface.framework" ]
  }

  if (dawn_supports_glfw_for_windowing) {
    sources += [
      "end2end/SwapChainTests.cpp",
      "end2end/SwapChainValidationTests.cpp",
      "end2end/WindowSurfaceTests.cpp",
    ]
  }

  if (dawn_enable_d3d12 || (dawn_enable_vulkan && is_chromeos) ||
      dawn_enable_metal) {
    sources += [
      "end2end/VideoViewsTests.cpp",
      "end2end/VideoViewsTests.h",
    ]
  }

  if (dawn_enable_vulkan && is_chromeos) {
    sources += [ "end2end/VideoViewsTests_gbm.cpp" ]
  }
}

source_set("white_box_tests_sources") {
  configs += [ "${dawn_root}/src/dawn/native:internal" ]
  testonly = true

  deps = [
    ":test_infra_sources",
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",

    # Statically linked and with sources because the end2end white_box tests use Dawn internals.
    "${dawn_root}/src/dawn/native:sources",
    "${dawn_root}/src/dawn/native:static",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  sources = []

  if (dawn_enable_vulkan) {
    deps += [ "${dawn_vulkan_headers_dir}:vulkan_headers" ]

    if (is_chromeos) {
      sources += [
        "white_box/VulkanImageWrappingTests.cpp",
        "white_box/VulkanImageWrappingTests.h",
        "white_box/VulkanImageWrappingTests_DmaBuf.cpp",
      ]
    } else if (is_linux) {
      sources += [
        "white_box/VulkanImageWrappingTests.cpp",
        "white_box/VulkanImageWrappingTests.h",
        "white_box/VulkanImageWrappingTests_OpaqueFD.cpp",
      ]
    }

    if (dawn_enable_error_injection) {
      sources += [ "white_box/VulkanErrorInjectorTests.cpp" ]
    }
  }

  sources += [
    "white_box/BufferAllocatedSizeTests.cpp",
    "white_box/InternalResourceUsageTests.cpp",
    "white_box/InternalStorageBufferBindingTests.cpp",
    "white_box/QueryInternalShaderTests.cpp",
  ]

  if (dawn_enable_d3d12) {
    sources += [
      "white_box/D3D12DescriptorHeapTests.cpp",
      "white_box/D3D12GPUTimestampCalibrationTests.cpp",
      "white_box/D3D12ResidencyTests.cpp",
      "white_box/D3D12ResourceHeapTests.cpp",
    ]
  }

  if (dawn_enable_metal) {
    sources += [ "white_box/MetalAutoreleasePoolTests.mm" ]
  }

  if (dawn_enable_opengles && defined(dawn_angle_dir)) {
    sources += [ "white_box/EGLImageWrappingTests.cpp" ]
    deps += [ "${dawn_angle_dir}:libEGL" ]
  }

  libs = []
}

dawn_test("dawn_end2end_tests") {
  deps = [
    ":end2end_tests_sources",
    ":test_infra_sources",
    ":white_box_tests_sources",
  ]

  sources = []
  libs = []

  # When building inside Chromium, use their gtest main function because it is
  # needed to run in swarming correctly.
  if (build_with_chromium) {
    deps += [ ":end2end_tests_main" ]
  } else {
    sources += [ "End2EndTestsMain.cpp" ]
  }

  if (is_chromeos) {
    libs += [ "gbm" ]
  }
}

###############################################################################
# Dawn perf tests
###############################################################################

dawn_test("dawn_perf_tests") {
  deps = [
    ":test_infra_sources",
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/platform",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  sources = [
    "perf_tests/BufferUploadPerf.cpp",
    "perf_tests/DawnPerfTest.cpp",
    "perf_tests/DawnPerfTest.h",
    "perf_tests/DawnPerfTestPlatform.cpp",
    "perf_tests/DawnPerfTestPlatform.h",
    "perf_tests/DrawCallPerf.cpp",
    "perf_tests/ShaderRobustnessPerf.cpp",
    "perf_tests/SubresourceTrackingPerf.cpp",
  ]

  libs = []

  # When building inside Chromium, use their gtest main function and the
  # other perf test scaffolding in order to run in swarming correctly.
  if (build_with_chromium) {
    deps += [ ":perf_tests_main" ]
    data_deps = [ "//testing:run_perf_test" ]
  } else {
    sources += [ "PerfTestsMain.cpp" ]
  }

  if (dawn_enable_metal) {
    frameworks = [ "IOSurface.framework" ]
  }
}
