blob: ae64e8fee92f7e694a759c4d0747902982e9585d [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package gen_tasks_logic
import (
"fmt"
"sort"
"strconv"
"strings"
"github.com/golang/glog"
"go.skia.org/infra/task_scheduler/go/specs"
)
// keyParams generates the key used by DM for Gold results.
func keyParams(parts map[string]string) []string {
// Don't bother to include role, which is always Test.
ignored := []string{"role", "test_filter"}
keys := make([]string, 0, len(parts))
for key := range parts {
found := false
for _, b := range ignored {
if key == b {
found = true
break
}
}
if !found {
keys = append(keys, key)
}
}
sort.Strings(keys)
rv := make([]string, 0, 2*len(keys))
for _, key := range keys {
rv = append(rv, key, parts[key])
}
return rv
}
// dmFlags generates flags to DM based on the given task properties.
func (b *taskBuilder) dmFlags(internalHardwareLabel string) {
properties := map[string]string{
"gitHash": specs.PLACEHOLDER_REVISION,
"builder": b.Name,
"buildbucket_build_id": specs.PLACEHOLDER_BUILDBUCKET_BUILD_ID,
"task_id": specs.PLACEHOLDER_TASK_ID,
"issue": specs.PLACEHOLDER_ISSUE,
"patchset": specs.PLACEHOLDER_PATCHSET,
"patch_storage": specs.PLACEHOLDER_PATCH_STORAGE,
"swarming_bot_id": "${SWARMING_BOT_ID}",
"swarming_task_id": "${SWARMING_TASK_ID}",
}
args := []string{
"dm",
"--nameByHash",
}
configs := []string{}
skipped := []string{}
hasConfig := func(cfg string) bool {
for _, c := range configs {
if c == cfg {
return true
}
}
return false
}
filter := func(slice []string, elems ...string) []string {
m := make(map[string]bool, len(elems))
for _, e := range elems {
m[e] = true
}
rv := make([]string, 0, len(slice))
for _, e := range slice {
if m[e] {
rv = append(rv, e)
}
}
return rv
}
remove := func(slice []string, elem string) []string {
rv := make([]string, 0, len(slice))
for _, e := range slice {
if e != elem {
rv = append(rv, e)
}
}
return rv
}
removeContains := func(slice []string, elem string) []string {
rv := make([]string, 0, len(slice))
for _, e := range slice {
if !strings.Contains(e, elem) {
rv = append(rv, e)
}
}
return rv
}
suffix := func(slice []string, sfx string) []string {
rv := make([]string, 0, len(slice))
for _, e := range slice {
rv = append(rv, e+sfx)
}
return rv
}
// When matching skip logic, _ is a wildcard that matches all parts for the field.
// For example, "8888 _ _ _" means everything that is part of an 8888 config and
// "_ skp _ SomeBigDraw" means the skp named SomeBigDraw on all config and options.
const ALL = "_"
// The inputs here are turned into a --skip flag which represents a
// "Space-separated config/src/srcOptions/name quadruples to skip."
// See DM.cpp for more, especially should_skip(). ~ negates the match.
skip := func(config, src, srcOptions, name string) {
// config is also called "sink" in DM
if config == "_" ||
hasConfig(config) ||
(config[0] == '~' && hasConfig(config[1:])) {
skipped = append(skipped, config, src, srcOptions, name)
}
}
// Keys.
keys := keyParams(b.parts)
if b.extraConfig("Lottie") {
keys = append(keys, "renderer", "skottie")
}
if b.matchExtraConfig("DDL") {
// 'DDL' style means "--skpViewportSize 2048"
keys = append(keys, "style", "DDL")
} else {
keys = append(keys, "style", "default")
}
args = append(args, "--key")
args = append(args, keys...)
// This enables non-deterministic random seeding of the GPU FP optimization
// test.
// Not Android due to:
// - https://skia.googlesource.com/skia/+/5910ed347a638ded8cd4c06dbfda086695df1112/BUILD.gn#160
// - https://skia.googlesource.com/skia/+/ce06e261e68848ae21cac1052abc16bc07b961bf/tests/ProcessorTest.cpp#307
// Not MSAN due to:
// - https://skia.googlesource.com/skia/+/0ac06e47269a40c177747310a613d213c95d1d6d/infra/bots/recipe_modules/flavor/gn_flavor.py#80
if !b.matchOs("Android") && !b.extraConfig("MSAN") {
args = append(args, "--randomProcessorTest")
}
threadLimit := -1
const MAIN_THREAD_ONLY = 0
// 32-bit desktop bots tend to run out of memory, because they have relatively
// far more cores than RAM (e.g. 32 cores, 3G RAM). Hold them back a bit.
if b.arch("x86") {
threadLimit = 4
}
// These bots run out of memory easily.
if b.model("MotoG4", "Nexus7") {
threadLimit = MAIN_THREAD_ONLY
}
// Avoid issues with dynamically exceeding resource cache limits.
if b.matchExtraConfig("DISCARDABLE") {
threadLimit = MAIN_THREAD_ONLY
}
if threadLimit >= 0 {
args = append(args, "--threads", strconv.Itoa(threadLimit))
}
sampleCount := 0
glPrefix := ""
if b.extraConfig("SwiftShader") {
configs = append(configs, "vk", "vkdmsaa")
// skbug.com/12826
skip(ALL, "test", ALL, "GrThreadSafeCache16Verts")
// skbug.com/12829
skip(ALL, "test", ALL, "image_subset")
} else if b.cpu() {
args = append(args, "--nogpu")
configs = append(configs, "8888")
if b.extraConfig("SkVM") {
args = append(args, "--skvm")
}
if b.extraConfig("BonusConfigs") {
configs = []string{
"r8", "565",
"pic-8888", "serialize-8888",
"linear-f16", "srgb-rgba", "srgb-f16", "narrow-rgba", "narrow-f16",
"p3-rgba", "p3-f16", "rec2020-rgba", "rec2020-f16"}
}
if b.extraConfig("PDF") {
configs = []string{"pdf"}
args = append(args, "--rasterize_pdf") // Works only on Mac.
// Take ~forever to rasterize:
skip("pdf", "gm", ALL, "lattice2")
skip("pdf", "gm", ALL, "hairmodes")
skip("pdf", "gm", ALL, "longpathdash")
}
if b.extraConfig("OldestSupportedSkpVersion") {
// For triaging convenience, make the old-skp job's output match the size of the DDL jobs' output
args = append(args, "--skpViewportSize", "2048")
}
} else if b.gpu() {
args = append(args, "--nocpu")
// Add in either gles or gl configs to the canonical set based on OS
glPrefix = "gl"
// Use 4x MSAA for all our testing. It's more consistent and 8x MSAA is nondeterministic (by
// design) on NVIDIA hardware. The problem is especially bad on ANGLE. skia:6813 skia:6545
sampleCount = 4
if b.matchOs("Android") || b.os("iOS") {
glPrefix = "gles"
// MSAA is disabled on Pixel3a (https://b.corp.google.com/issues/143074513).
// MSAA is disabled on Pixel5 (https://skbug.com/11152).
if b.model("Pixel3a", "Pixel5") {
sampleCount = 0
}
} else if b.matchGpu("Intel") {
// MSAA doesn't work well on Intel GPUs chromium:527565, chromium:983926
sampleCount = 0
} else if b.os("ChromeOS") {
glPrefix = "gles"
}
if b.extraConfig("NativeFonts") {
configs = append(configs, glPrefix)
} else {
configs = append(configs, glPrefix, glPrefix+"dft", "srgb-"+glPrefix)
if sampleCount > 0 {
configs = append(configs, fmt.Sprintf("%smsaa%d", glPrefix, sampleCount))
// Temporarily limit the bots we test dynamic MSAA on.
if b.gpu("QuadroP400", "MaliG77") || b.matchOs("Mac") {
configs = append(configs, fmt.Sprintf("%sdmsaa", glPrefix))
}
}
}
// The Tegra3 doesn't support MSAA
if b.gpu("Tegra3") ||
// We aren't interested in fixing msaa bugs on current iOS devices.
b.model("iPad4", "iPadPro", "iPhone7") ||
// skia:5792
b.gpu("IntelHD530", "IntelIris540") {
configs = removeContains(configs, "msaa")
}
// We want to test both the OpenGL config and the GLES config on Linux Intel:
// GL is used by Chrome, GLES is used by ChromeOS.
// Also do the Ganesh threading verification test (render with and without
// worker threads, using only the SW path renderer, and compare the results).
if b.matchGpu("Intel") && b.isLinux() {
configs = append(configs, "gles", "glesdft", "srgb-gles", "gltestthreading")
// skbug.com/6333, skbug.com/6419, skbug.com/6702
skip("gltestthreading", "gm", ALL, "lcdblendmodes")
skip("gltestthreading", "gm", ALL, "lcdoverlap")
skip("gltestthreading", "gm", ALL, "textbloblooper")
// All of these GMs are flaky, too:
skip("gltestthreading", "gm", ALL, "savelayer_with_backdrop")
skip("gltestthreading", "gm", ALL, "persp_shaders_bw")
skip("gltestthreading", "gm", ALL, "dftext_blob_persp")
skip("gltestthreading", "gm", ALL, "dftext")
skip("gltestthreading", "gm", ALL, "gpu_blur_utils")
skip("gltestthreading", "gm", ALL, "gpu_blur_utils_ref")
skip("gltestthreading", "gm", ALL, "gpu_blur_utils_subset_rect")
skip("gltestthreading", "gm", ALL, "gpu_blur_utils_subset_rect_ref")
// skbug.com/7523 - Flaky on various GPUs
skip("gltestthreading", "gm", ALL, "orientation")
// These GMs only differ in the low bits
skip("gltestthreading", "gm", ALL, "stroketext")
skip("gltestthreading", "gm", ALL, "draw_image_set")
// Fail on Iris Xe.
skip("gltestthreading", "gm", ALL, "anisotropic_image_scale_mip")
skip("gltestthreading", "gm", ALL, "bleed_downscale")
skip("gltestthreading", "gm", ALL, "degeneratesegments")
skip("gltestthreading", "gm", ALL, "mipmap_srgb")
skip("gltestthreading", "gm", ALL, "mipmap")
skip("gltestthreading", "gm", ALL, "ovals")
skip("gltestthreading", "gm", ALL, "persp_images")
skip("gltestthreading", "gm", ALL, "persp_shaders_aa")
skip("gltestthreading", "gm", ALL, "rtif_distort")
skip("gltestthreading", "gm", ALL, "skbug_8664")
skip("gltestthreading", "gm", ALL, "texel_subset_linear_mipmap_nearest_down")
skip("gltestthreading", "gm", ALL, "yuv420_odd_dim_repeat")
skip("gltestthreading", "svg", ALL, "masking-filter-01-f.svg")
}
// Dawn bot *only* runs the dawn config
if b.extraConfig("Dawn") {
// tint:1045: Tint doesn't implement MatrixInverse yet.
skip(ALL, "gm", ALL, "runtime_intrinsics_matrix")
configs = []string{"dawn"}
}
// The FailFlushTimeCallbacks bots only run the 'gl' config
if b.extraConfig("FailFlushTimeCallbacks") {
configs = []string{"gl"}
}
// Graphite bot *only* runs the grmtl config
if b.extraConfig("Graphite") {
args = append(args, "--nogpu") // disable non-Graphite tests
// TODO: re-enable - currently fails with "Failed to make lazy image"
skip(ALL, "gm", ALL, "image_subset")
// TODO: re-enable - currently fails readback from surface
skip(ALL, "gm", ALL, "blurrect_compare")
skip(ALL, "gm", ALL, "lattice_alpha")
skip(ALL, "gm", ALL, "localmatriximageshader")
skip(ALL, "gm", ALL, "savelayer_f16")
skip(ALL, "gm", ALL, "anisomips")
skip(ALL, "gm", ALL, "path_huge_aa")
skip(ALL, "gm", ALL, "hugebitmapshader")
// TODO: re-enable - currently fail bc surface to image conversion isn't implemented
skip(ALL, "gm", ALL, "xfermodes3")
skip(ALL, "gm", ALL, "verylargebitmap")
skip(ALL, "gm", ALL, "clipped_thinrect")
skip(ALL, "gm", ALL, "textblobgeometrychange")
skip(ALL, "gm", ALL, "surface_underdraw")
skip(ALL, "gm", ALL, "copy_on_write_savelayer")
skip(ALL, "gm", ALL, "simple_snap_image2")
skip(ALL, "gm", ALL, "simple_snap_image")
skip(ALL, "gm", ALL, "copy_on_write_retain2")
skip(ALL, "gm", ALL, "copy_on_write_retain")
skip(ALL, "gm", ALL, "surfacenew")
skip(ALL, "gm", ALL, "srcmode")
skip(ALL, "gm", ALL, "lit_shader_linear_rt")
skip(ALL, "gm", ALL, "linear_gradient_rt")
skip(ALL, "gm", ALL, "persp_shaders_bw")
skip(ALL, "gm", ALL, "persp_shaders_aa")
skip(ALL, "gm", ALL, "ninepatch-stretch")
skip(ALL, "gm", ALL, "localmatriximagefilter")
skip(ALL, "gm", ALL, "lcdblendmodes")
skip(ALL, "gm", ALL, "lattice2")
skip(ALL, "gm", ALL, "lattice")
skip(ALL, "gm", ALL, "fast_slow_blurimagefilter")
skip(ALL, "gm", ALL, "imageblurrepeatmode")
skip(ALL, "gm", ALL, "imageblurclampmode")
skip(ALL, "gm", ALL, "imagealphathreshold_surface")
skip(ALL, "gm", ALL, "dstreadshuffle")
skip(ALL, "gm", ALL, "drawbitmaprect-imagerect-subset")
skip(ALL, "gm", ALL, "drawbitmaprect-imagerect")
skip(ALL, "gm", ALL, "drawbitmaprect-subset")
skip(ALL, "gm", ALL, "drawbitmaprect")
skip(ALL, "gm", ALL, "custommesh_cs")
skip(ALL, "gm", ALL, "complexclip_blur_tiled")
skip(ALL, "gm", ALL, "bleed_downscale")
skip(ALL, "gm", ALL, "async_rescale_and_read_no_bleed")
skip(ALL, "gm", ALL, "async_rescale_and_read_text_up")
skip(ALL, "gm", ALL, "async_rescale_and_read_dog_down")
skip(ALL, "gm", ALL, "async_rescale_and_read_rose")
if b.extraConfig("ASAN") {
// skbug.com/12507 (Neon UB during JPEG compression on M1 ASAN Graphite bot)
skip(ALL, "gm", ALL, "yuv420_odd_dim") // Oddly enough yuv420_odd_dim_repeat doesn't crash
skip(ALL, "gm", ALL, "encode-alpha-jpeg")
skip(ALL, "gm", ALL, "encode")
skip(ALL, "gm", ALL, "jpg-color-cube")
}
configs = []string{"grmtl"}
}
// ANGLE bot *only* runs the angle configs
if b.extraConfig("ANGLE") {
if b.matchOs("Win") {
configs = []string{"angle_d3d11_es2",
"angle_gl_es2",
"angle_d3d11_es3"}
if sampleCount > 0 {
configs = append(configs, fmt.Sprintf("angle_d3d11_es2_msaa%d", sampleCount))
configs = append(configs, fmt.Sprintf("angle_d3d11_es2_dmsaa"))
configs = append(configs, fmt.Sprintf("angle_gl_es2_dmsaa"))
configs = append(configs, fmt.Sprintf("angle_d3d11_es3_msaa%d", sampleCount))
configs = append(configs, fmt.Sprintf("angle_d3d11_es3_dmsaa"))
configs = append(configs, fmt.Sprintf("angle_gl_es3_dmsaa"))
}
if b.matchGpu("GTX", "Quadro") {
// See skia:7823 and chromium:693090.
configs = append(configs, "angle_gl_es3")
if sampleCount > 0 {
configs = append(configs, fmt.Sprintf("angle_gl_es2_msaa%d", sampleCount))
configs = append(configs, fmt.Sprintf("angle_gl_es2_dmsaa"))
configs = append(configs, fmt.Sprintf("angle_gl_es3_msaa%d", sampleCount))
configs = append(configs, fmt.Sprintf("angle_gl_es3_dmsaa"))
}
}
if !b.matchGpu("GTX", "Quadro", "GT610") {
// See skia:10149
configs = append(configs, "angle_d3d9_es2")
}
if b.model("NUC5i7RYH") {
// skbug.com/7376
skip(ALL, "test", ALL, "ProcessorCloneTest")
}
} else if b.matchOs("Mac") {
configs = []string{"angle_mtl_es2", "angle_mtl_es3"}
// anglebug.com/7145
skip(ALL, "test", ALL, "SkSLOutParamsAreDistinctFromGlobal_GPU")
// anglebug.com/7245
skip("angle_mtl_es3", "gm", ALL, "runtime_intrinsics_common_es3")
if b.gpu("AppleM1") {
// M1 Macs fail this test for sRGB color types
// skbug.com/13289
skip(ALL, "test", ALL, "TransferPixelsToTextureTest")
}
}
}
if b.model("AndroidOne", "Nexus5", "Nexus7", "JioNext") {
// skbug.com/9019
skip(ALL, "test", ALL, "ProcessorCloneTest")
skip(ALL, "test", ALL, "Programs")
skip(ALL, "test", ALL, "ProcessorOptimizationValidationTest")
}
if b.model("GalaxyS20") {
// skbug.com/10595
skip(ALL, "test", ALL, "ProcessorCloneTest")
}
if b.model("Spin513") {
// skbug.com/11876
skip(ALL, "test", ALL, "Programs")
// skbug.com/12486
skip(ALL, "test", ALL, "TestMockContext")
skip(ALL, "test", ALL, "TestGpuRenderingContexts")
skip(ALL, "test", ALL, "TestGpuAllContexts")
skip(ALL, "test", ALL, "OverdrawSurface_Gpu")
skip(ALL, "test", ALL, "ReplaceSurfaceBackendTexture")
skip(ALL, "test", ALL, "SurfaceAttachStencil_Gpu")
skip(ALL, "test", ALL, "SurfaceWrappedWithRelease_Gpu")
}
// skbug.com/9043 - these devices render this test incorrectly
// when opList splitting reduction is enabled
if b.gpu() && b.extraConfig("Vulkan") && (b.gpu("RadeonR9M470X", "RadeonHD7770")) {
skip(ALL, "tests", ALL, "VkDrawableImportTest")
}
if b.extraConfig("Vulkan") {
configs = []string{"vk"}
// MSAA doesn't work well on Intel GPUs chromium:527565, chromium:983926, skia:9023
if !b.matchGpu("Intel") {
configs = append(configs, "vkmsaa4")
}
// Temporarily limit the bots we test dynamic MSAA on.
if b.gpu("QuadroP400", "MaliG77") && !b.extraConfig("TSAN") {
configs = append(configs, "vkdmsaa")
}
}
if b.extraConfig("Metal") {
configs = []string{"mtl"}
// MSAA doesn't work well on Intel GPUs chromium:527565, chromium:983926
if !b.matchGpu("Intel") {
configs = append(configs, "mtlmsaa4")
}
}
if b.extraConfig("Slug") {
// Test slug drawing
configs = []string{"glslug"}
}
if b.extraConfig("Direct3D") {
configs = []string{"d3d"}
}
// Test 1010102 on our Linux/NVIDIA bots and the persistent cache config
// on the GL bots.
if b.gpu("QuadroP400") && !b.extraConfig("PreAbandonGpuContext") && !b.extraConfig("TSAN") && b.isLinux() &&
!b.extraConfig("FailFlushTimeCallbacks") {
if b.extraConfig("Vulkan") {
configs = append(configs, "vk1010102")
// Decoding transparent images to 1010102 just looks bad
skip("vk1010102", "image", ALL, ALL)
} else if !b.extraConfig("Dawn") {
configs = append(configs, "gl1010102", "gltestpersistentcache", "gltestglslcache", "gltestprecompile")
// Decoding transparent images to 1010102 just looks bad
skip("gl1010102", "image", ALL, ALL)
// These tests produce slightly different pixels run to run on NV.
skip("gltestpersistentcache", "gm", ALL, "atlastext")
skip("gltestpersistentcache", "gm", ALL, "dftext")
skip("gltestpersistentcache", "gm", ALL, "glyph_pos_h_b")
skip("gltestpersistentcache", "gm", ALL, "glyph_pos_h_f")
skip("gltestpersistentcache", "gm", ALL, "glyph_pos_n_f")
skip("gltestglslcache", "gm", ALL, "atlastext")
skip("gltestglslcache", "gm", ALL, "dftext")
skip("gltestglslcache", "gm", ALL, "glyph_pos_h_b")
skip("gltestglslcache", "gm", ALL, "glyph_pos_h_f")
skip("gltestglslcache", "gm", ALL, "glyph_pos_n_f")
skip("gltestprecompile", "gm", ALL, "atlastext")
skip("gltestprecompile", "gm", ALL, "dftext")
skip("gltestprecompile", "gm", ALL, "glyph_pos_h_b")
skip("gltestprecompile", "gm", ALL, "glyph_pos_h_f")
skip("gltestprecompile", "gm", ALL, "glyph_pos_n_f")
// Tessellation shaders do not yet participate in the persistent cache.
skip("gltestpersistentcache", "gm", ALL, "tessellation")
skip("gltestglslcache", "gm", ALL, "tessellation")
skip("gltestprecompile", "gm", ALL, "tessellation")
}
}
// We also test the SkSL precompile config on Pixel2XL as a representative
// Android device - this feature is primarily used by Flutter.
if b.model("Pixel2XL") && !b.extraConfig("Vulkan") {
configs = append(configs, "glestestprecompile")
}
// Test SkSL precompile on iPhone 8 as representative iOS device
if b.model("iPhone8") && b.extraConfig("Metal") {
configs = append(configs, "mtltestprecompile")
// avoid tests that can generate slightly different pixels per run
skip("mtltestprecompile", "gm", ALL, "atlastext")
skip("mtltestprecompile", "gm", ALL, "circular_arcs_hairline")
skip("mtltestprecompile", "gm", ALL, "dashcircle")
skip("mtltestprecompile", "gm", ALL, "dftext")
skip("mtltestprecompile", "gm", ALL, "encode-platform")
skip("mtltestprecompile", "gm", ALL, "fontmgr_bounds")
skip("mtltestprecompile", "gm", ALL, "fontmgr_bounds_1_-0.25")
skip("mtltestprecompile", "gm", ALL, "glyph_pos_h_b")
skip("mtltestprecompile", "gm", ALL, "glyph_pos_h_f")
skip("mtltestprecompile", "gm", ALL, "glyph_pos_n_f")
skip("mtltestprecompile", "gm", ALL, "persp_images")
skip("mtltestprecompile", "gm", ALL, "ovals")
skip("mtltestprecompile", "gm", ALL, "roundrects")
skip("mtltestprecompile", "gm", ALL, "shadow_utils_occl")
skip("mtltestprecompile", "gm", ALL, "strokedlines")
skip("mtltestprecompile", "gm", ALL, "strokerect")
skip("mtltestprecompile", "gm", ALL, "strokes3")
skip("mtltestprecompile", "gm", ALL, "texel_subset_linear_mipmap_nearest_down")
skip("mtltestprecompile", "gm", ALL, "texel_subset_linear_mipmap_linear_down")
skip("mtltestprecompile", "gm", ALL, "textblobmixedsizes_df")
skip("mtltestprecompile", "gm", ALL, "yuv420_odd_dim_repeat")
skip("mtltestprecompile", "svg", ALL, "A_large_blank_world_map_with_oceans_marked_in_blue.svg")
skip("mtltestprecompile", "svg", ALL, "Chalkboard.svg")
skip("mtltestprecompile", "svg", ALL, "Ghostscript_Tiger.svg")
skip("mtltestprecompile", "svg", ALL, "Seal_of_American_Samoa.svg")
skip("mtltestprecompile", "svg", ALL, "Seal_of_Illinois.svg")
skip("mtltestprecompile", "svg", ALL, "desk_motionmark_paths.svg")
skip("mtltestprecompile", "svg", ALL, "rg1024_green_grapes.svg")
skip("mtltestprecompile", "svg", ALL, "shapes-intro-02-f.svg")
skip("mtltestprecompile", "svg", ALL, "tiger-8.svg")
}
// Test reduced shader mode on iPhone 11 as representative iOS device
if b.model("iPhone11") && b.extraConfig("Metal") {
configs = append(configs, "mtlreducedshaders")
}
if b.gpu("AppleM1") && !b.extraConfig("Metal") {
skip(ALL, "test", ALL, "TransferPixelsFromTextureTest") // skia:11814
}
if b.model(DONT_REDUCE_OPS_TASK_SPLITTING_MODELS...) {
args = append(args, "--dontReduceOpsTaskSplitting", "true")
}
// Test reduceOpsTaskSplitting fallback when over budget.
if b.model("NUC7i5BNK") && b.extraConfig("ASAN") {
args = append(args, "--gpuResourceCacheLimit", "16777216")
}
// Test rendering to wrapped dsts on a few bots
// Also test "narrow-glf16", which hits F16 surfaces and F16 vertex colors.
if b.extraConfig("BonusConfigs") {
configs = []string{"glbetex", "glbert", "narrow-glf16", "glreducedshaders", "glr8"}
}
if b.os("ChromeOS") {
// Just run GLES for now - maybe add gles_msaa4 in the future
configs = []string{"gles"}
}
// Test GPU tessellation path renderer.
if b.extraConfig("GpuTess") {
configs = []string{glPrefix + "msaa4"}
// Use fixed count tessellation path renderers as much as possible.
args = append(args, "--pr", "atlas", "tess")
}
// DDL is a GPU-only feature
if b.extraConfig("DDL1") {
// This bot generates comparison images for the large skps and the gms
configs = filter(configs, "gl", "vk", "mtl")
args = append(args, "--skpViewportSize", "2048")
}
if b.extraConfig("DDL3") {
// This bot generates the real ddl images for the large skps and the gms
configs = suffix(filter(configs, "gl", "vk", "mtl"), "ddl")
args = append(args, "--skpViewportSize", "2048")
args = append(args, "--gpuThreads", "0")
}
if b.extraConfig("OOPRDDL") {
// This bot generates the real oopr/DDL images for the large skps and the GMs
configs = suffix(filter(configs, "gl", "vk", "mtl"), "ooprddl")
args = append(args, "--skpViewportSize", "2048")
args = append(args, "--gpuThreads", "0")
}
}
// Sharding.
tf := b.parts["test_filter"]
if tf != "" && tf != "All" {
// Expected format: shard_XX_YY
split := strings.Split(tf, ALL)
if len(split) == 3 {
args = append(args, "--shard", split[1])
args = append(args, "--shards", split[2])
} else {
glog.Fatalf("Invalid task name - bad shards: %s", tf)
}
}
args = append(args, "--config")
args = append(args, configs...)
removeFromArgs := func(arg string) {
args = remove(args, arg)
}
// Run tests, gms, and image decoding tests everywhere.
args = append(args, "--src", "tests", "gm", "image", "lottie", "colorImage", "svg", "skp")
if b.gpu() {
// Don't run the "svgparse_*" svgs on GPU.
skip(ALL, "svg", ALL, "svgparse_")
} else if b.Name == "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN" {
// Only run the CPU SVGs on 8888.
skip("~8888", "svg", ALL, ALL)
} else {
// On CPU SVGs we only care about parsing. Only run them on the above bot.
removeFromArgs("svg")
}
// Eventually I'd like these to pass, but for now just skip 'em.
if b.extraConfig("SK_FORCE_RASTER_PIPELINE_BLITTER") {
removeFromArgs("tests")
}
if b.extraConfig("NativeFonts") { // images won't exercise native font integration :)
removeFromArgs("image")
removeFromArgs("colorImage")
}
if b.matchExtraConfig("Graphite") {
// The Graphite bots run the skps, gms and tests
removeFromArgs("image")
removeFromArgs("lottie")
removeFromArgs("colorImage")
removeFromArgs("svg")
} else if b.matchExtraConfig("DDL", "PDF") {
// The DDL and PDF bots just render the large skps and the gms
removeFromArgs("tests")
removeFromArgs("image")
removeFromArgs("colorImage")
removeFromArgs("svg")
} else if b.matchExtraConfig("OldestSupportedSkpVersion") {
// The OldestSupportedSkpVersion bot only renders skps.
removeFromArgs("tests")
removeFromArgs("gm")
removeFromArgs("image")
removeFromArgs("colorImage")
removeFromArgs("lottie")
removeFromArgs("svg")
} else if b.matchExtraConfig("FailFlushTimeCallbacks") {
// The FailFlushTimeCallbacks bot only runs skps, gms and svgs
removeFromArgs("tests")
removeFromArgs("image")
removeFromArgs("lottie")
removeFromArgs("colorImage")
} else {
// No other bots render the .skps.
removeFromArgs("skp")
}
if b.extraConfig("Lottie") {
// Only run the lotties on Lottie bots.
removeFromArgs("tests")
removeFromArgs("gm")
removeFromArgs("image")
removeFromArgs("colorImage")
removeFromArgs("svg")
removeFromArgs("skp")
} else {
removeFromArgs("lottie")
}
if b.extraConfig("TSAN") {
// skbug.com/10848
removeFromArgs("svg")
// skbug.com/12900 avoid OOM on
// Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan
if b.Name == "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan" {
skip("_", "test", "_", "_")
}
}
// TODO: ???
skip("f16", ALL, ALL, "dstreadshuffle")
skip("srgb-gl", "image", ALL, ALL)
skip("srgb-gles", "image", ALL, ALL)
// --src image --config r8 means "decode into R8", which isn't supported.
skip("r8", "image", ALL, ALL)
skip("r8", "colorImage", ALL, ALL)
if b.extraConfig("Valgrind") {
// These take 18+ hours to run.
skip("pdf", "gm", ALL, "fontmgr_iter")
skip("pdf", ALL, ALL, "PANO_20121023_214540.jpg")
skip("pdf", "skp", ALL, "worldjournal")
skip("pdf", "skp", ALL, "desk_baidu.skp")
skip("pdf", "skp", ALL, "desk_wikipedia.skp")
skip(ALL, "svg", ALL, ALL)
// skbug.com/9171 and 8847
skip(ALL, "test", ALL, "InitialTextureClear")
}
if b.model("Pixel3") {
// skbug.com/10546
skip("vkddl", "gm", ALL, "compressed_textures_nmof")
skip("vkddl", "gm", ALL, "compressed_textures_npot")
skip("vkddl", "gm", ALL, "compressed_textures")
}
if b.model("TecnoSpark3Pro", "Wembley") {
// skbug.com/9421
skip(ALL, "test", ALL, "InitialTextureClear")
}
if b.model("Wembley", "JioNext") {
// These tests run forever on the Wembley.
skip(ALL, "gm", ALL, "async_rescale_and_read")
}
if b.os("iOS") {
skip(glPrefix, "skp", ALL, ALL)
}
if b.matchOs("Mac", "iOS") {
// CG fails on questionable bmps
skip(ALL, "image", "gen_platf", "rgba32abf.bmp")
skip(ALL, "image", "gen_platf", "rgb24prof.bmp")
skip(ALL, "image", "gen_platf", "rgb24lprof.bmp")
skip(ALL, "image", "gen_platf", "8bpp-pixeldata-cropped.bmp")
skip(ALL, "image", "gen_platf", "4bpp-pixeldata-cropped.bmp")
skip(ALL, "image", "gen_platf", "32bpp-pixeldata-cropped.bmp")
skip(ALL, "image", "gen_platf", "24bpp-pixeldata-cropped.bmp")
// CG has unpredictable behavior on this questionable gif
// It's probably using uninitialized memory
skip(ALL, "image", "gen_platf", "frame_larger_than_image.gif")
// CG has unpredictable behavior on incomplete pngs
// skbug.com/5774
skip(ALL, "image", "gen_platf", "inc0.png")
skip(ALL, "image", "gen_platf", "inc1.png")
skip(ALL, "image", "gen_platf", "inc2.png")
skip(ALL, "image", "gen_platf", "inc3.png")
skip(ALL, "image", "gen_platf", "inc4.png")
skip(ALL, "image", "gen_platf", "inc5.png")
skip(ALL, "image", "gen_platf", "inc6.png")
skip(ALL, "image", "gen_platf", "inc7.png")
skip(ALL, "image", "gen_platf", "inc8.png")
skip(ALL, "image", "gen_platf", "inc9.png")
skip(ALL, "image", "gen_platf", "inc10.png")
skip(ALL, "image", "gen_platf", "inc11.png")
skip(ALL, "image", "gen_platf", "inc12.png")
skip(ALL, "image", "gen_platf", "inc13.png")
skip(ALL, "image", "gen_platf", "inc14.png")
skip(ALL, "image", "gen_platf", "incInterlaced.png")
// These images fail after Mac 10.13.1 upgrade.
skip(ALL, "image", "gen_platf", "incInterlaced.gif")
skip(ALL, "image", "gen_platf", "inc1.gif")
skip(ALL, "image", "gen_platf", "inc0.gif")
skip(ALL, "image", "gen_platf", "butterfly.gif")
}
// WIC fails on questionable bmps
if b.matchOs("Win") {
skip(ALL, "image", "gen_platf", "pal8os2v2.bmp")
skip(ALL, "image", "gen_platf", "pal8os2v2-16.bmp")
skip(ALL, "image", "gen_platf", "rgba32abf.bmp")
skip(ALL, "image", "gen_platf", "rgb24prof.bmp")
skip(ALL, "image", "gen_platf", "rgb24lprof.bmp")
skip(ALL, "image", "gen_platf", "8bpp-pixeldata-cropped.bmp")
skip(ALL, "image", "gen_platf", "4bpp-pixeldata-cropped.bmp")
skip(ALL, "image", "gen_platf", "32bpp-pixeldata-cropped.bmp")
skip(ALL, "image", "gen_platf", "24bpp-pixeldata-cropped.bmp")
if b.arch("x86_64") && b.cpu() {
// This GM triggers a SkSmallAllocator assert.
skip(ALL, "gm", ALL, "composeshader_bitmap")
}
}
if b.matchOs("Win", "Mac") {
// WIC and CG fail on arithmetic jpegs
skip(ALL, "image", "gen_platf", "testimgari.jpg")
// More questionable bmps that fail on Mac, too. skbug.com/6984
skip(ALL, "image", "gen_platf", "rle8-height-negative.bmp")
skip(ALL, "image", "gen_platf", "rle4-height-negative.bmp")
}
// These PNGs have CRC errors. The platform generators seem to draw
// uninitialized memory without reporting an error, so skip them to
// avoid lots of images on Gold.
skip(ALL, "image", "gen_platf", "error")
if b.matchOs("Android") || b.os("iOS") {
// This test crashes the N9 (perhaps because of large malloc/frees). It also
// is fairly slow and not platform-specific. So we just disable it on all of
// Android and iOS. skia:5438
skip(ALL, "test", ALL, "GrStyledShape")
}
if internalHardwareLabel == "5" {
// http://b/118312149#comment9
skip(ALL, "test", ALL, "SRGBReadWritePixels")
}
// skia:4095
badSerializeGMs := []string{
"strict_constraint_batch_no_red_allowed", // https://crbug.com/skia/10278
"strict_constraint_no_red_allowed", // https://crbug.com/skia/10278
"fast_constraint_red_is_allowed", // https://crbug.com/skia/10278
"c_gms",
"colortype",
"colortype_xfermodes",
"drawfilter",
"fontmgr_bounds_0.75_0",
"fontmgr_bounds_1_-0.25",
"fontmgr_bounds",
"fontmgr_match",
"fontmgr_iter",
"imagemasksubset",
"wacky_yuv_formats_domain",
"imagemakewithfilter",
"imagemakewithfilter_crop",
"imagemakewithfilter_crop_ref",
"imagemakewithfilter_ref",
}
// skia:5589
badSerializeGMs = append(badSerializeGMs,
"bitmapfilters",
"bitmapshaders",
"convex_poly_clip",
"extractalpha",
"filterbitmap_checkerboard_32_32_g8",
"filterbitmap_image_mandrill_64",
"shadows",
"simpleaaclip_aaclip",
)
// skia:5595
badSerializeGMs = append(badSerializeGMs,
"composeshader_bitmap",
"scaled_tilemodes_npot",
"scaled_tilemodes",
)
// skia:5778
badSerializeGMs = append(badSerializeGMs, "typefacerendering_pfaMac")
// skia:5942
badSerializeGMs = append(badSerializeGMs, "parsedpaths")
// these use a custom image generator which doesn't serialize
badSerializeGMs = append(badSerializeGMs, "ImageGeneratorExternal_rect")
badSerializeGMs = append(badSerializeGMs, "ImageGeneratorExternal_shader")
// skia:6189
badSerializeGMs = append(badSerializeGMs, "shadow_utils")
badSerializeGMs = append(badSerializeGMs, "graphitestart")
// skia:7938
badSerializeGMs = append(badSerializeGMs, "persp_images")
// Not expected to round trip encoding/decoding.
badSerializeGMs = append(badSerializeGMs, "all_bitmap_configs")
badSerializeGMs = append(badSerializeGMs, "makecolorspace")
badSerializeGMs = append(badSerializeGMs, "readpixels")
badSerializeGMs = append(badSerializeGMs, "draw_image_set_rect_to_rect")
badSerializeGMs = append(badSerializeGMs, "draw_image_set_alpha_only")
badSerializeGMs = append(badSerializeGMs, "compositor_quads_shader")
badSerializeGMs = append(badSerializeGMs, "wacky_yuv_formats_qtr")
badSerializeGMs = append(badSerializeGMs, "runtime_effect_image")
badSerializeGMs = append(badSerializeGMs, "ctmpatheffect")
// This GM forces a path to be convex. That property doesn't survive
// serialization.
badSerializeGMs = append(badSerializeGMs, "analytic_antialias_convex")
for _, test := range badSerializeGMs {
skip("serialize-8888", "gm", ALL, test)
}
// We skip these to avoid out-of-memory failures.
if b.matchOs("Win", "Android") {
for _, test := range []string{"verylargebitmap", "verylarge_picture_image"} {
skip("serialize-8888", "gm", ALL, test)
}
}
if b.matchOs("Mac") && b.cpu() {
// skia:6992
skip("pic-8888", "gm", ALL, "encode-platform")
skip("serialize-8888", "gm", ALL, "encode-platform")
}
// skia:4769
skip("pic-8888", "gm", ALL, "drawfilter")
// skia:4703
for _, test := range []string{"image-cacherator-from-picture",
"image-cacherator-from-raster",
"image-cacherator-from-ctable"} {
skip("pic-8888", "gm", ALL, test)
skip("serialize-8888", "gm", ALL, test)
}
// GM that requires raster-backed canvas
for _, test := range []string{"complexclip4_bw", "complexclip4_aa", "p3",
"async_rescale_and_read_text_up_large",
"async_rescale_and_read_text_up",
"async_rescale_and_read_text_down",
"async_rescale_and_read_dog_up",
"async_rescale_and_read_dog_down",
"async_rescale_and_read_rose",
"async_rescale_and_read_no_bleed",
"async_rescale_and_read_alpha_type"} {
skip("pic-8888", "gm", ALL, test)
skip("serialize-8888", "gm", ALL, test)
// GM requires canvas->makeSurface() to return a valid surface.
// TODO(borenet): These should be just outside of this block but are
// left here to match the recipe which has an indentation bug.
skip("pic-8888", "gm", ALL, "blurrect_compare")
skip("serialize-8888", "gm", ALL, "blurrect_compare")
}
// Extensions for RAW images
r := []string{
"arw", "cr2", "dng", "nef", "nrw", "orf", "raf", "rw2", "pef", "srw",
"ARW", "CR2", "DNG", "NEF", "NRW", "ORF", "RAF", "RW2", "PEF", "SRW",
}
// skbug.com/4888
// Skip RAW images (and a few large PNGs) on GPU bots
// until we can resolve failures.
if b.gpu() {
skip(ALL, "image", ALL, "interlaced1.png")
skip(ALL, "image", ALL, "interlaced2.png")
skip(ALL, "image", ALL, "interlaced3.png")
for _, rawExt := range r {
skip(ALL, "image", ALL, "."+rawExt)
}
}
// Skip memory intensive tests on 32-bit bots.
if b.os("Win8") && b.arch("x86") {
skip(ALL, "image", "f16", ALL)
skip(ALL, "image", ALL, "abnormal.wbmp")
skip(ALL, "image", ALL, "interlaced1.png")
skip(ALL, "image", ALL, "interlaced2.png")
skip(ALL, "image", ALL, "interlaced3.png")
for _, rawExt := range r {
skip(ALL, "image", ALL, "."+rawExt)
}
}
if b.model("Nexus5", "Nexus5x", "JioNext") && b.gpu() {
// skia:5876
skip(ALL, "gm", ALL, "encode-platform")
}
if b.model("AndroidOne") && b.gpu() { // skia:4697, skia:4704, skia:4694, skia:4705, skia:11133
skip(ALL, "gm", ALL, "bigblurs")
skip(ALL, "gm", ALL, "strict_constraint_no_red_allowed")
skip(ALL, "gm", ALL, "fast_constraint_red_is_allowed")
skip(ALL, "gm", ALL, "dropshadowimagefilter")
skip(ALL, "gm", ALL, "filterfastbounds")
skip(glPrefix, "gm", ALL, "imageblurtiled")
skip(ALL, "gm", ALL, "imagefiltersclipped")
skip(ALL, "gm", ALL, "imagefiltersscaled")
skip(ALL, "gm", ALL, "imageresizetiled")
skip(ALL, "gm", ALL, "matrixconvolution")
skip(ALL, "gm", ALL, "strokedlines")
skip(ALL, "gm", ALL, "runtime_intrinsics_matrix")
if sampleCount > 0 {
glMsaaConfig := fmt.Sprintf("%smsaa%d", glPrefix, sampleCount)
skip(glMsaaConfig, "gm", ALL, "imageblurtiled")
skip(glMsaaConfig, "gm", ALL, "imagefiltersbase")
}
skip(ALL, "tests", ALL, "SkSLUnaryPositiveNegative_GPU")
}
if b.model("Pixel3") || b.model("Pixel2XL") {
skip(ALL, "tests", ALL, "SkSLEmptyBlocksES3_GPU") // skia:13309
}
if b.matchGpu("Adreno[3456]") { // disable broken tests on Adreno 3/4/5/6xx
skip(ALL, "tests", ALL, "SkSLArrayCast_GPU") // skia:12332
skip(ALL, "tests", ALL, "SkSLArrayComparison_GPU") // skia:12332
skip(ALL, "tests", ALL, "SkSLCommaSideEffects_GPU")
skip(ALL, "tests", ALL, "SkSLIntrinsicMixFloat_GPU")
skip(ALL, "tests", ALL, "SkSLIntrinsicClampFloat_GPU")
}
if b.matchGpu("Adreno[345]") && !b.extraConfig("Vulkan") { // disable broken tests on Adreno 3/4/5xx GLSL
skip(ALL, "tests", ALL, "DSLFPTest_SwitchStatement") // skia:11891
skip(ALL, "tests", ALL, "SkSLMatrixToVectorCast_GPU") // skia:12192
skip(ALL, "tests", ALL, "SkSLStructsInFunctions_GPU") // skia:11929
}
if b.matchGpu("Adreno[3456]") && !b.extraConfig("Vulkan") { // disable broken tests on Adreno 3/4/5/6xx GLSL
skip(ALL, "tests", ALL, "SkSLOutParamsAreDistinctFromGlobal_GPU") // skia:13115
}
if b.matchGpu("Adreno6") && !b.extraConfig("Vulkan") { // disable broken tests on Adreno 6xx GLSL
skip(ALL, "tests", ALL, "SkSLIntrinsicIsInf_GPU") // skia:12377
}
if b.matchGpu("Adreno[56]") && !b.extraConfig("Vulkan") { // disable broken tests on Adreno 5/6xx GLSL
skip(ALL, "tests", ALL, "SkSLStructFieldFolding_GPU") // skia:13393
}
if b.matchGpu("Adreno[56]") && b.extraConfig("Vulkan") { // disable broken tests on Adreno 5/6xx Vulkan
skip(ALL, "tests", ALL, "SkSLInoutParameters_GPU") // skia:12869
skip(ALL, "tests", ALL, "SkSLOutParams_GPU") // skia:11919
skip(ALL, "tests", ALL, "SkSLOutParamsTricky_GPU") // skia:11919
skip(ALL, "tests", ALL, "SkSLOutParamsNoInline_GPU") // skia:11919
}
if (b.matchGpu("Adreno3") || b.matchGpu("Mali400")) && !b.extraConfig("Vulkan") {
skip(ALL, "tests", ALL, "SkSLMatrices") // skia:12456
skip(ALL, "tests", ALL, "SkSLMatrixNoOpFolding_GPU")
}
if b.gpu("QuadroP400") {
skip(ALL, "tests", ALL, "SkSLCommaSideEffects")
}
if b.matchGpu("Mali400") || b.matchGpu("Tegra3") {
skip(ALL, "tests", ALL, "SkSLMatrixScalarMath") // skia:12681
}
if b.gpu("IntelIris6100", "IntelHD4400") && b.matchOs("Win") && b.extraConfig("ANGLE") {
skip(ALL, "tests", ALL, "SkSLVectorToMatrixCast_GPU") // skia:12179, vec4(mat2) crash
skip(ALL, "tests", ALL, "SkSLTrivialArgumentsInlineDirectly_GPU") // skia:12179 again
}
if b.gpu("IntelIris6100", "IntelHD4400") && b.matchOs("Win") && !b.extraConfig("Vulkan") {
skip(ALL, "tests", ALL, "SkSLVectorScalarMath_GPU") // skia:11919
skip(ALL, "tests", ALL, "SkSLMatrixFoldingES2_GPU") // skia:11919
}
if b.matchGpu("Intel") && b.matchOs("Win") && !b.extraConfig("Vulkan") {
skip(ALL, "tests", ALL, "SkSLReturnsValueOnEveryPathES3_GPU") // skia:12465
skip(ALL, "tests", ALL, "SkSLReturnsValueOnEveryPathES3_GPU") // skia:12465
skip(ALL, "tests", ALL, "SkSLOutParamsAreDistinctFromGlobal_GPU") // skia:13115
skip(ALL, "tests", ALL, "SkSLStructFieldFolding_GPU") // skia:13393
}
if b.extraConfig("Vulkan") && b.isLinux() && b.matchGpu("Intel") {
skip(ALL, "tests", ALL, "SkSLSwitchDefaultOnly_GPU") // skia:12465
}
if b.extraConfig("ANGLE") && b.matchOs("Win") && b.matchGpu("IntelIris(540|655)") {
skip(ALL, "tests", ALL, "SkSLSwitchDefaultOnly_GPU") // skia:12465
skip(ALL, "tests", ALL, "SkSLVectorScalarMath_GPU") // skia:11919
}
if b.gpu("Tegra3") {
// Tegra3 fails to compile break stmts inside a for loop (skia:12477)
skip(ALL, "tests", ALL, "SkSLSwitch_GPU")
skip(ALL, "tests", ALL, "SkSLSwitchDefaultOnly_GPU")
skip(ALL, "tests", ALL, "SkSLSwitchWithFallthrough_GPU")
skip(ALL, "tests", ALL, "SkSLSwitchWithLoops_GPU")
skip(ALL, "tests", ALL, "SkSLSwitchCaseFolding_GPU")
skip(ALL, "tests", ALL, "SkSLLoopFloat_GPU")
skip(ALL, "tests", ALL, "SkSLLoopInt_GPU")
}
if b.gpu("QuadroP400") || b.gpu("GTX660") || b.gpu("GTX960") || b.gpu("Tegra3") || b.gpu("RTX3060") {
if !b.extraConfig("Vulkan") {
// Various Nvidia GPUs crash or generate errors when assembling weird matrices
skip(ALL, "tests", ALL, "SkSLMatrixConstructorsES2_GPU") // skia:12443
skip(ALL, "tests", ALL, "SkSLMatrixConstructorsES3_GPU") // skia:12443
// Nvidia drivers erroneously constant-fold expressions with side-effects in
// constructors when compiling GLSL.
skip(ALL, "tests", ALL, "SkSLPreserveSideEffects_GPU") // skia:13035
skip(ALL, "tests", ALL, "SkSLStructFieldNoFolding_GPU") // skia:13395
}
}
if !b.extraConfig("Vulkan") && (b.gpu("RTX3060") ||
b.gpu("QuadroP400") ||
b.matchGpu("GTX[6-9]60") ||
b.matchGpu("Mali400") ||
b.matchGpu("Tegra3") ||
b.matchGpu("Radeon(R9|HD)")) {
skip(ALL, "tests", ALL, "SkSLMatrixScalarNoOpFolding_GPU") // skia:13556
}
if b.matchOs("Mac") && b.extraConfig("ANGLE") {
skip(ALL, "tests", ALL, "SkSLMatrixScalarNoOpFolding_GPU") // https://anglebug.com/7525
}
if b.gpu("RTX3060") && b.extraConfig("Vulkan") {
skip(ALL, "gm", ALL, "blurcircles2") // skia:13342
}
if b.gpu("Tegra3") && !b.extraConfig("Vulkan") {
// Fails on Tegra3 w/ OpenGL ES
skip(ALL, "tests", ALL, "SkSLMatrixFoldingES2_GPU") // skia:11919
}
if b.gpu("QuadroP400") && b.matchOs("Ubuntu") && b.matchModel("Golo") {
// Fails on Ubuntu18-Golo bots with QuadroP400 GPUs on Vulkan and OpenGL
skip(ALL, "tests", ALL, "SkSLPreserveSideEffects_GPU") // skia:13035
}
if b.gpu("QuadroP400") && b.matchOs("Win10") && b.matchModel("Golo") {
// Times out with driver 30.0.15.1179
skip("vkmsaa4", "gm", ALL, "shadow_utils")
}
if b.gpu("PowerVRGE8320") || b.gpu("Tegra3") || b.gpu("Adreno308") {
skip(ALL, "tests", ALL, "SkSLVectorScalarMath_GPU") // skia:11919
}
if b.gpu("PowerVRGE8320") {
skip(ALL, "tests", ALL, "SkSLOutParamsAreDistinct_GPU")
skip(ALL, "tests", ALL, "SkSLOutParamsAreDistinctFromGlobal_GPU") // skia:13115
}
if !b.extraConfig("Vulkan") && (b.gpu("RadeonR9M470X") || b.gpu("RadeonHD7770")) {
// Some AMD GPUs can get the wrong result when assembling non-square matrices (skia:12443)
skip(ALL, "tests", ALL, "SkSLMatrixConstructorsES3_GPU")
}
if b.extraConfig("Vulkan") && b.gpu("RadeonVega6") {
skip(ALL, "gm", ALL, "ycbcrimage") // skia:13265
skip(ALL, "test", ALL, "VkYCbcrSampler_DrawImageWithYcbcrSampler") // skia:13265
}
if b.matchGpu("Intel") || b.matchGpu("RadeonVega6") { // some Intel and AMD GPUs don't return zero for the derivative of a uniform
skip(ALL, "tests", ALL, "SkSLIntrinsicDFdy_GPU")
skip(ALL, "tests", ALL, "SkSLIntrinsicDFdx_GPU")
skip(ALL, "tests", ALL, "SkSLIntrinsicFwidth_GPU")
}
if b.matchOs("Mac") && b.matchGpu("Intel(Iris5100|HD6000)") {
skip(ALL, "tests", ALL, "SkSLLoopFloat_GPU") // skia:12426
}
match := []string{}
if b.extraConfig("Valgrind") { // skia:3021
match = append(match, "~Threaded")
}
if b.extraConfig("Valgrind") && b.extraConfig("PreAbandonGpuContext") {
// skia:6575
match = append(match, "~multipicturedraw_")
}
if b.model("AndroidOne") {
match = append(match, "~WritePixels") // skia:4711
match = append(match, "~PremulAlphaRoundTrip_Gpu") // skia:7501
match = append(match, "~ReimportImageTextureWithMipLevels") // skia:8090
match = append(match, "~MorphologyFilterRadiusWithMirrorCTM_Gpu") // skia:10383
}
if b.gpu("IntelIrisXe") {
match = append(match, "~ReimportImageTextureWithMipLevels")
}
if b.extraConfig("MSAN") {
match = append(match, "~Once", "~Shared") // Not sure what's up with these tests.
}
// By default, we test with GPU threading enabled, unless specifically
// disabled.
if b.extraConfig("NoGPUThreads") {
args = append(args, "--gpuThreads", "0")
}
if b.extraConfig("Vulkan") && b.gpu("Adreno530") {
// skia:5777
match = append(match, "~CopySurface")
}
if b.extraConfig("Vulkan") && b.matchGpu("Adreno") {
// skia:7663
match = append(match, "~WritePixelsNonTextureMSAA_Gpu")
match = append(match, "~WritePixelsMSAA_Gpu")
}
if b.extraConfig("Vulkan") && b.isLinux() && b.gpu("IntelIris640") {
match = append(match, "~VkHeapTests") // skia:6245
}
if b.isLinux() && b.gpu("IntelIris640") {
match = append(match, "~Programs") // skia:7849
}
if b.model("TecnoSpark3Pro", "Wembley") {
// skia:9814
match = append(match, "~Programs")
match = append(match, "~ProcessorCloneTest")
match = append(match, "~ProcessorOptimizationValidationTest")
}
if b.gpu("IntelIris640", "IntelHD615", "IntelHDGraphics615") {
match = append(match, "~^SRGBReadWritePixels$") // skia:9225
}
if b.extraConfig("Vulkan") && b.isLinux() && b.gpu("IntelHD405") {
// skia:7322
skip("vk", "gm", ALL, "skbug_257")
skip("vk", "gm", ALL, "filltypespersp")
match = append(match, "~^ClearOp$")
match = append(match, "~^CopySurface$")
match = append(match, "~^ImageNewShader_GPU$")
match = append(match, "~^InitialTextureClear$")
match = append(match, "~^PinnedImageTest$")
match = append(match, "~^ReadPixels_Gpu$")
match = append(match, "~^ReadPixels_Texture$")
match = append(match, "~^SRGBReadWritePixels$")
match = append(match, "~^VkUploadPixelsTests$")
match = append(match, "~^WritePixelsNonTexture_Gpu$")
match = append(match, "~^WritePixelsNonTextureMSAA_Gpu$")
match = append(match, "~^WritePixels_Gpu$")
match = append(match, "~^WritePixelsMSAA_Gpu$")
}
if b.extraConfig("Vulkan") && b.gpu("GTX660") && b.matchOs("Win") {
// skbug.com/8047
match = append(match, "~FloatingPointTextureTest$")
}
if b.extraConfig("Metal") && b.gpu("RadeonHD8870M") && b.matchOs("Mac") {
// skia:9255
match = append(match, "~WritePixelsNonTextureMSAA_Gpu")
// skbug.com/11366
match = append(match, "~SurfacePartialDraw_Gpu")
}
if b.extraConfig("Metal") && b.gpu("PowerVRGX6450") && b.matchOs("iOS") {
// skbug.com/11885
match = append(match, "~flight_animated_image")
}
if b.extraConfig("ANGLE") {
// skia:7835
match = append(match, "~BlurMaskBiggerThanDest")
}
if b.gpu("IntelIris6100") && b.extraConfig("ANGLE") && !b.debug() {
// skia:7376
match = append(match, "~^ProcessorOptimizationValidationTest$")
}
if b.gpu("IntelIris6100", "IntelHD4400") && b.extraConfig("ANGLE") {
// skia:6857
skip("angle_d3d9_es2", "gm", ALL, "lighting")
}
if b.gpu("PowerVRGX6250") {
match = append(match, "~gradients_view_perspective_nodither") //skia:6972
}
if b.arch("arm") && b.extraConfig("ASAN") {
// TODO: can we run with env allocator_may_return_null=1 instead?
match = append(match, "~BadImage")
}
if b.arch("arm64") && b.extraConfig("ASAN") {
// skbug.com/13155 the use of longjmp may cause ASAN stack check issues.
skip(ALL, "test", ALL, "SkPDF_JpegIdentification")
}
if b.matchOs("Mac") && b.gpu("IntelHD6000") {
// skia:7574
match = append(match, "~^ProcessorCloneTest$")
match = append(match, "~^GrMeshTest$")
}
if b.matchOs("Mac") && b.gpu("IntelHD615") {
// skia:7603
match = append(match, "~^GrMeshTest$")
}
if b.matchOs("Mac") && b.gpu("IntelIrisPlus") {
// skia:7603
match = append(match, "~^GrMeshTest$")
}
if b.extraConfig("Vulkan") && b.model("GalaxyS20") {
// skia:10247
match = append(match, "~VkPrepareForExternalIOQueueTransitionTest")
}
if b.matchExtraConfig("Graphite") {
// skia:12813
match = append(match, "~async_rescale_and_read")
}
if len(skipped) > 0 {
args = append(args, "--skip")
args = append(args, skipped...)
}
if len(match) > 0 {
args = append(args, "--match")
args = append(args, match...)
}
// These bots run out of memory running RAW codec tests. Do not run them in
// parallel
// TODO(borenet): Previously this was `'Nexus5' in bot or 'Nexus9' in bot`
// which also matched 'Nexus5x'. I added That here to maintain the
// existing behavior, but we should verify that it's needed.
if b.model("Nexus5", "Nexus5x", "Nexus9", "JioNext") {
args = append(args, "--noRAW_threading")
}
if b.extraConfig("FSAA") {
args = append(args, "--analyticAA", "false")
}
if b.extraConfig("FAAA") {
args = append(args, "--forceAnalyticAA")
}
if !b.extraConfig("NativeFonts") {
args = append(args, "--nonativeFonts")
}
if b.extraConfig("GDI") {
args = append(args, "--gdi")
}
// Let's make all bots produce verbose output by default.
args = append(args, "--verbose")
// See skia:2789.
if b.extraConfig("AbandonGpuContext") {
args = append(args, "--abandonGpuContext")
}
if b.extraConfig("PreAbandonGpuContext") {
args = append(args, "--preAbandonGpuContext")
}
if b.extraConfig("ReleaseAndAbandonGpuContext") {
args = append(args, "--releaseAndAbandonGpuContext")
}
if b.extraConfig("FailFlushTimeCallbacks") {
args = append(args, "--failFlushTimeCallbacks")
}
// Finalize the DM flags and properties.
b.recipeProp("dm_flags", marshalJson(args))
b.recipeProp("dm_properties", marshalJson(properties))
// Add properties indicating which assets the task should use.
if b.matchExtraConfig("Lottie") {
b.asset("lottie-samples")
b.recipeProp("lotties", "true")
} else if b.matchExtraConfig("OldestSupportedSkpVersion") {
b.recipeProp("skps", "true")
} else {
b.asset("skimage")
b.recipeProp("images", "true")
b.asset("skp")
b.recipeProp("skps", "true")
b.asset("svg")
b.recipeProp("svgs", "true")
}
b.recipeProp("do_upload", fmt.Sprintf("%t", b.doUpload()))
b.recipeProp("resources", "true")
}