# This file is a manually maintained list of slow tests. It has the same format as
# `expectations.txt`, but the only result tag that should be used is [ Slow ]

# BEGIN TAG HEADER (autogenerated, see validate_tag_consistency.py)
# OS
# tags: [ android android-lollipop android-marshmallow android-nougat
#             android-oreo android-pie android-r android-s android-t
#         chromeos
#         fuchsia
#         linux ubuntu
#         mac highsierra mojave catalina bigsur monterey ventura
#         win win8 win10 ]
# Devices
# tags: [ android-nexus-5x android-pixel-2 android-pixel-4
#             android-pixel-6 android-shield-android-tv android-sm-a135m
#             android-sm-a235m
#         chromeos-board-amd64-generic chromeos-board-kevin chromeos-board-eve
#             chromeos-board-jacuzzi chromeos-board-octopus
#         fuchsia-board-astro fuchsia-board-sherlock fuchsia-board-qemu-x64 ]
# Platform
# tags: [ desktop
#         mobile ]
# Browser
# tags: [ android-chromium android-webview-instrumentation
#         debug debug-x64
#         release release-x64
#         fuchsia-chrome web-engine-shell
#         lacros-chrome cros-chrome ]
# GPU
# tags: [ amd amd-0x6613 amd-0x679e amd-0x67ef amd-0x6821 amd-0x7340
#         apple apple-apple-m1 apple-apple-m2
#             apple-angle-metal-renderer:-apple-m1
#             apple-angle-metal-renderer:-apple-m2
#         arm
#         google google-0xffff google-0xc0de
#         intel intel-gen-9 intel-gen-12 intel-0xa2e intel-0xd26 intel-0xa011
#               intel-0x3e92 intel-0x3e9b intel-0x5912 intel-0x9bc5
#         nvidia nvidia-0xfe9 nvidia-0x1cb3 nvidia-0x2184
#         qualcomm ]
# Architecture
# tags: [ mac-arm64 mac-x86_64 ]
# Decoder
# tags: [ passthrough no-passthrough ]
# Browser Target CPU
# tags: [ target-cpu-64 target-cpu-32 target-cpu-31 ]
# ANGLE Backend
# tags: [ angle-disabled
#         angle-d3d9 angle-d3d11
#         angle-metal
#         angle-opengl angle-opengles
#         angle-swiftshader
#         angle-vulkan ]
# Skia Renderer
# tags: [ renderer-skia-dawn
#         renderer-skia-gl
#         renderer-skia-vulkan
#         renderer-software ]
# Driver
# tags: [ mesa_lt_19.1
#         mesa_ge_21.0 ]
# ASan
# tags: [ asan no-asan ]
# Display Server
# tags: [ display-server-wayland display-server-x ]
# WebGPU Backend Validation
# tags: [ dawn-backend-validation dawn-no-backend-validation ]
# WebGPU Adapter
# tags: [ webgpu-adapter-default webgpu-adapter-swiftshader ]
# WebGPU Compat Mode
# tags: [ webgpu-compat webgpu-not-compat ]
# Clang coverage
# tags: [ clang-coverage no-clang-coverage ]
# Skia Graphite
# tags: [ graphite-enabled graphite-disabled ]
# results: [ Failure RetryOnFailure Skip Slow ]
# END TAG HEADER

# Error scope tests are slow across multiple platforms
crbug.com/40887053 [ intel-gen-9 win10 ] webgpu:api,validation,error_scope:current_scope:errorFilter="out-of-memory";stackDepth=100000 [ Slow ]
crbug.com/40887053 [ intel-gen-9 win10 ] webgpu:api,validation,error_scope:current_scope:errorFilter="validation";stackDepth=100000 [ Slow ]
crbug.com/42240904 [ android ] webgpu:api,validation,error_scope:current_scope:errorFilter="out-of-memory";stackDepth=100000 [ Slow ]
crbug.com/42240904 [ android ] webgpu:api,validation,error_scope:current_scope:errorFilter="validation";stackDepth=100000 [ Slow ]

# These tests are slow enough that they fail often on a lot of configurations,
# especially code-coverage builders.
crbug.com/42240733 webgpu:shader,execution,expression,binary,* [ Slow ]

# Frequently times out on Android Arm (Pixel 6), but the backend validation variants, with longer timeouts don't.
[ android-t arm dawn-no-backend-validation ] webgpu:api,validation,capability_checks,limits,maxComputeWorkgroupStorageSize:* [ Slow ]

# May take a while to run on Android Arm (Pixel 6), even with recent shader caching improvements.
crbug.com/40643133 [ android arm ] webgpu:shader,execution,zero_init:compute,zero_init:addressSpace="workgroup";* [ Slow ]

# Some atan2 tests are slow but passing on Pixel 4
[ android-r ] webgpu:shader,validation,expression,call,builtin,atan2:values:* [ Slow ]

# Frequently times out on Dawn Win10 x64 ASAN Release (Intel)
crbug.com/42241379 [ win intel angle-d3d11 asan ] webgpu:shader,validation,expression,call,builtin,length:vec4:stage="override";type="vec4%3Cf16%3E" [ Slow ]
crbug.com/42241379 [ win intel angle-d3d11 asan ] webgpu:shader,validation,expression,call,builtin,length:vec4:stage="override";type="vec4%3Cf32%3E" [ Slow ]

# FXC times out on the large shader produced by this test
crbug.com/402178306 [ webgpu-dxc-disabled win ] webgpu:shader,execution,limits:struct_members: [ Slow ]
