| // 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 machines 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 devices 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("FakeWGPU") { |
| configs = append(configs, "grdawn_fakeWGPU") |
| } else if b.extraConfig("SwiftShader") { |
| configs = append(configs, "vk", "vkdmsaa") |
| // skbug.com/12826 |
| skip(ALL, "test", ALL, "GrThreadSafeCache16Verts") |
| // b/296440036 |
| skip(ALL, "test", ALL, "ImageAsyncReadPixels") |
| // skbug.com/12829 |
| skip(ALL, "test", ALL, "image_subset") |
| } else if b.cpu() { |
| args = append(args, "--nogpu") |
| |
| configs = append(configs, "8888") |
| |
| if b.extraConfig("BonusConfigs") { |
| configs = []string{ |
| "r8", "565", |
| "pic-8888", "serialize-8888"} |
| } |
| |
| 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 |
| if b.gpu("IntelIrisXe") && b.matchOs("Win") && b.extraConfig("ANGLE") { |
| // Make an exception for newer GPUs + D3D |
| args = append(args, "--allowMSAAOnNewIntel", "true") |
| } else { |
| sampleCount = 0 |
| } |
| } else if b.os("ChromeOS") { |
| glPrefix = "gles" |
| } |
| |
| if b.extraConfig("NativeFonts") { |
| configs = append(configs, glPrefix) |
| } else { |
| configs = append(configs, glPrefix, glPrefix+"dft") |
| if sampleCount > 0 { |
| configs = append(configs, fmt.Sprintf("%smsaa%d", glPrefix, sampleCount)) |
| // Temporarily limit the machines we test dynamic MSAA on. |
| if b.gpu("QuadroP400", "MaliG77") || b.matchOs("Mac") { |
| configs = append(configs, fmt.Sprintf("%sdmsaa", glPrefix)) |
| } |
| } |
| } |
| |
| if b.extraConfig("Protected") { |
| args = append(args, "--createProtected") |
| // The Protected jobs (for now) only run the unit tests |
| skip(ALL, "gm", ALL, ALL) |
| skip(ALL, "image", ALL, ALL) |
| skip(ALL, "lottie", ALL, ALL) |
| skip(ALL, "colorImage", ALL, ALL) |
| skip(ALL, "svg", ALL, ALL) |
| skip(ALL, "skp", ALL, ALL) |
| |
| // These unit tests attempt to readback |
| skip(ALL, "test", ALL, "ApplyGamma") |
| skip(ALL, "test", ALL, "BigImageTest_Ganesh") |
| skip(ALL, "test", ALL, "BigImageTest_Graphite") |
| skip(ALL, "test", ALL, "BlendRequiringDstReadWithLargeCoordinates") |
| skip(ALL, "test", ALL, "BlurMaskBiggerThanDest") |
| skip(ALL, "test", ALL, "ClearOp") |
| skip(ALL, "test", ALL, "ColorTypeBackendAllocationTest") |
| skip(ALL, "test", ALL, "ComposedImageFilterBounds_Gpu") |
| skip(ALL, "test", ALL, "CopySurface") |
| skip(ALL, "test", ALL, "crbug_1271431") |
| skip(ALL, "test", ALL, "DashPathEffectTest_2PiInterval") |
| skip(ALL, "test", ALL, "DeviceTestVertexTransparency") |
| skip(ALL, "test", ALL, "DDLMultipleDDLs") |
| skip(ALL, "test", ALL, "DefaultPathRendererTest") |
| skip(ALL, "test", ALL, "DMSAA_aa_dst_read_after_dmsaa") |
| skip(ALL, "test", ALL, "DMSAA_dst_read") |
| skip(ALL, "test", ALL, "DMSAA_dst_read_with_existing_barrier") |
| skip(ALL, "test", ALL, "DMSAA_dual_source_blend_disable") |
| skip(ALL, "test", ALL, "DMSAA_preserve_contents") |
| skip(ALL, "test", ALL, "ExtendedSkColorTypeTests_gpu") |
| skip(ALL, "test", ALL, "FilterResult_ganesh") // knocks out a bunch |
| skip(ALL, "test", ALL, "FullScreenClearWithLayers") |
| skip(ALL, "test", ALL, "GrAHardwareBuffer_BasicDrawTest") |
| skip(ALL, "test", ALL, "GrGpuBufferTransferTest") |
| skip(ALL, "test", ALL, "GrGpuBufferUpdateDataTest") |
| skip(ALL, "test", ALL, "GrMeshTest") |
| skip(ALL, "test", ALL, "GrPipelineDynamicStateTest") |
| skip(ALL, "test", ALL, "GrTextBlobScaleAnimation") |
| skip(ALL, "test", ALL, "HalfFloatAlphaTextureTest") |
| skip(ALL, "test", ALL, "HalfFloatRGBATextureTest") |
| skip(ALL, "test", ALL, "ImageAsyncReadPixelsGraphite") |
| skip(ALL, "test", ALL, "ImageEncode_Gpu") |
| skip(ALL, "test", ALL, "ImageFilterFailAffectsTransparentBlack_Gpu") |
| skip(ALL, "test", ALL, "ImageFilterNegativeBlurSigma_Gpu") |
| skip(ALL, "test", ALL, "ImageFilterZeroBlurSigma_Gpu") |
| skip(ALL, "test", ALL, "ImageLegacyBitmap_Gpu") |
| skip(ALL, "test", ALL, "ImageNewShader_GPU") |
| skip(ALL, "test", ALL, "ImageOriginTest_drawImage_Graphite") |
| skip(ALL, "test", ALL, "ImageOriginTest_imageShader_Graphite") |
| skip(ALL, "test", ALL, "ImageProviderTest_Graphite_Default") |
| skip(ALL, "test", ALL, "ImageProviderTest_Graphite_Testing") |
| skip(ALL, "test", ALL, "ImageReadPixels_Gpu") |
| skip(ALL, "test", ALL, "ImageScalePixels_Gpu") |
| skip(ALL, "test", ALL, "ImageShaderTest") |
| skip(ALL, "test", ALL, "ImageWrapTextureMipmapsTest") |
| skip(ALL, "test", ALL, "MatrixColorFilter_TransparentBlack") |
| skip(ALL, "test", ALL, "MorphologyFilterRadiusWithMirrorCTM_Gpu") |
| skip(ALL, "test", ALL, "MultisampleRetainTest") |
| skip(ALL, "test", ALL, "MutableImagesTest") |
| skip(ALL, "test", ALL, "OpsTaskFlushCount") |
| skip(ALL, "test", ALL, "OverdrawSurface_Gpu") |
| skip(ALL, "test", ALL, "PinnedImageTest") |
| skip(ALL, "test", ALL, "RecordingOrderTest_Graphite") |
| skip(ALL, "test", ALL, "RecordingSurfacesTestClear") |
| skip(ALL, "test", ALL, "RecordingSurfacesTestWritePixels") |
| skip(ALL, "test", ALL, "RecordingSurfacesTestWritePixelsOffscreen") |
| skip(ALL, "test", ALL, "ReplaceSurfaceBackendTexture") |
| skip(ALL, "test", ALL, "ResourceCacheCache") |
| skip(ALL, "test", ALL, "SaveLayerOrigin") |
| skip(ALL, "test", ALL, "ShaderTestNestedBlendsGanesh") |
| skip(ALL, "test", ALL, "ShaderTestNestedBlendsGraphite") |
| skip(ALL, "test", ALL, "skbug6653") |
| skip(ALL, "test", ALL, "SkImage_makeNonTextureImage") |
| skip(ALL, "test", ALL, "SkipCopyTaskTest") |
| skip(ALL, "test", ALL, "SkipOpsTaskTest") |
| skip(ALL, "test", ALL, "SkRuntimeBlender_GPU") |
| skip(ALL, "test", ALL, "SkRuntimeEffect") // knocks out a bunch |
| skip(ALL, "test", ALL, "SkRuntimeShaderImageFilter_GPU") |
| skip(ALL, "test", ALL, "SkSLCross") |
| skip(ALL, "test", ALL, "SkSL") // knocks out a bunch |
| skip(ALL, "test", ALL, "SpecialImage_Gpu") |
| skip(ALL, "test", ALL, "SRGBReadWritePixels") |
| skip(ALL, "test", ALL, "SurfaceAsyncReadPixels") |
| skip(ALL, "test", ALL, "SurfaceContextReadPixels") |
| skip(ALL, "test", ALL, "SurfaceContextWritePixelsMipped") |
| skip(ALL, "test", ALL, "SurfaceDrawContextTest") |
| skip(ALL, "test", ALL, "SurfaceSemaphores") |
| skip(ALL, "test", ALL, "TestSweepGradientZeroXGanesh") |
| skip(ALL, "test", ALL, "TiledDrawCacheTest_Ganesh") |
| skip(ALL, "test", ALL, "TiledDrawCacheTest_Graphite") |
| skip(ALL, "test", ALL, "UnpremulTextureImage") |
| skip(ALL, "test", ALL, "VkBackendAllocationTest") |
| skip(ALL, "test", ALL, "VkDrawableTest") |
| skip(ALL, "test", ALL, "VkDrawableImportTest") |
| skip(ALL, "test", ALL, "VkYCbcrSampler_DrawImageWithYcbcrSampler") |
| skip(ALL, "test", ALL, "WritePixels_Gpu") |
| skip(ALL, "test", ALL, "WritePixels_Graphite") |
| skip(ALL, "test", ALL, "WritePixelsMSAA_Gpu") |
| skip(ALL, "test", ALL, "WritePixelsPendingIO") |
| skip(ALL, "test", ALL, "XfermodeImageFilterCroppedInput_Gpu") |
| |
| // These unit tests require some debugging (skbug.com/319229312) |
| skip(ALL, "test", ALL, "GrTextBlobMoveAround") // a lot of AllocImageMemory failures |
| skip(ALL, "test", ALL, "Programs") // Perlin Noise FP violating protected constraints |
| skip(ALL, "test", ALL, "Protected_SmokeTest") // Ganesh/Vulkan disallow creating Unprotected Image |
| skip(ALL, "test", ALL, "ReadOnlyTexture") // crashes device! |
| skip(ALL, "test", ALL, "RepeatedClippedBlurTest") // blurs not creating expected # of resources |
| skip(ALL, "test", ALL, "CharacterizationVkSCBnessTest") // DDL Validation failure for Vk SCBs |
| |
| // These unit tests are very slow and probably don't benefit from Protected testing |
| skip(ALL, "test", ALL, "PaintParamsKeyTest") |
| skip(ALL, "test", ALL, "ProcessorCloneTest") |
| skip(ALL, "test", ALL, "ProcessorOptimizationValidationTest") |
| skip(ALL, "test", ALL, "TextBlobAbnormal") |
| skip(ALL, "test", ALL, "TextBlobStressAbnormal") |
| } |
| |
| // 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. |
| if b.matchGpu("Intel") && b.isLinux() { |
| configs = append(configs, "gles", "glesdft") |
| } |
| |
| // The FailFlushTimeCallbacks tasks only run the 'gl' config |
| if b.extraConfig("FailFlushTimeCallbacks") { |
| configs = []string{"gl"} |
| } |
| |
| // Graphite task *only* runs the gr*** configs |
| if b.extraConfig("Graphite") { |
| args = append(args, "--nogpu") // disable non-Graphite tests |
| |
| if b.extraConfig("Dawn") { |
| if b.extraConfig("D3D11") { |
| configs = []string{"grdawn_d3d11"} |
| } |
| if b.extraConfig("D3D12") { |
| configs = []string{"grdawn_d3d12"} |
| } |
| if b.extraConfig("Metal") { |
| configs = []string{"grdawn_mtl"} |
| } |
| if b.extraConfig("Vulkan") { |
| configs = []string{"grdawn_vk"} |
| } |
| if b.extraConfig("GL") { |
| configs = []string{"grdawn_gl"} |
| } |
| if b.extraConfig("GLES") { |
| configs = []string{"grdawn_gles"} |
| } |
| // Shader doesn't compile |
| // https://skbug.com/14105 |
| skip(ALL, "gm", ALL, "runtime_intrinsics_matrix") |
| // Crashes and failures |
| // https://skbug.com/14105 |
| skip(ALL, "test", ALL, "BackendTextureTest") |
| skip(ALL, "test", ALL, "GraphitePurgeNotUsedSinceResourcesTest") |
| skip(ALL, "test", ALL, "PaintParamsKeyTest") |
| |
| if b.matchOs("Win10") || b.matchGpu("MaliG78", "Adreno620", "QuadroP400") { |
| // The Dawn Win10 and some Android/Linux device jobs OOMs (skbug.com/14410, b/318725123) |
| skip(ALL, "test", ALL, "BigImageTest_Graphite") |
| } |
| if b.matchGpu("Adreno620") { |
| // The Dawn Pixel5 device job fails one compute test (b/318725123) |
| skip(ALL, "test", ALL, "Compute_AtomicOperationsOverArrayAndStructTest") |
| } |
| } else if b.extraConfig("Native") { |
| if b.extraConfig("Metal") { |
| configs = []string{"grmtl"} |
| if b.gpu("IntelIrisPlus") { |
| // We get some 27/255 RGB diffs on the 45 degree |
| // rotation case on this device (skbug.com/14408) |
| skip(ALL, "test", ALL, "BigImageTest_Graphite") |
| } |
| } |
| if b.extraConfig("Vulkan") { |
| configs = []string{"grvk"} |
| // Couldn't readback |
| skip(ALL, "gm", ALL, "aaxfermodes") |
| // Could not instantiate texture proxy for UploadTask! |
| skip(ALL, "test", ALL, "BigImageTest_Graphite") |
| // Test failures |
| skip(ALL, "test", ALL, "DeviceTestVertexTransparency") |
| skip(ALL, "test", ALL, "GraphitePromiseImageMultipleImgUses") |
| skip(ALL, "test", ALL, "GraphitePromiseImageRecorderLoss") |
| skip(ALL, "test", ALL, "GraphitePurgeNotUsedSinceResourcesTest") |
| skip(ALL, "test", ALL, "GraphiteTextureProxyTest") |
| skip(ALL, "test", ALL, "GraphiteYUVAPromiseImageMultipleImgUses") |
| skip(ALL, "test", ALL, "GraphiteYUVAPromiseImageRecorderLoss") |
| skip(ALL, "test", ALL, "ImageOriginTest_drawImage_Graphite") |
| skip(ALL, "test", ALL, "ImageOriginTest_imageShader_Graphite") |
| skip(ALL, "test", ALL, "ImageProviderTest_Graphite_Testing") |
| skip(ALL, "test", ALL, "ImageProviderTest_Graphite_Default") |
| skip(ALL, "test", ALL, "MakeColorSpace_Test") |
| skip(ALL, "test", ALL, "ImageProviderTest") |
| skip(ALL, "test", ALL, "ImageShaderTest") |
| skip(ALL, "test", ALL, "MutableImagesTest") |
| skip(ALL, "test", ALL, "MultisampleRetainTest") |
| skip(ALL, "test", ALL, "NonVolatileGraphitePromiseImageTest") |
| skip(ALL, "test", ALL, "NonVolatileGraphiteYUVAPromiseImageTest") |
| skip(ALL, "test", ALL, "PaintParamsKeyTest") |
| skip(ALL, "test", ALL, "RecordingOrderTest_Graphite") |
| skip(ALL, "test", ALL, "RecordingSurfacesTestClear") |
| skip(ALL, "test", ALL, "ShaderTestNestedBlendsGraphite") |
| skip(ALL, "test", ALL, "SkRuntimeEffectSimple_Graphite") |
| skip(ALL, "test", ALL, "VolatileGraphiteYUVAPromiseImageTest") |
| skip(ALL, "test", ALL, "VolatileGraphitePromiseImageTest") |
| if b.matchOs("Android") { |
| // Currently broken on Android Vulkan (skbug.com/310180104) |
| skip(ALL, "test", ALL, "ImageAsyncReadPixelsGraphite") |
| skip(ALL, "test", ALL, "SurfaceAsyncReadPixelsGraphite") |
| } |
| } |
| } |
| } |
| |
| // ANGLE bot *only* runs the angle configs |
| if b.extraConfig("ANGLE") { |
| if b.matchOs("Win") { |
| configs = []string{"angle_d3d11_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_d3d11_es3_msaa%d", sampleCount)) |
| configs = append(configs, fmt.Sprintf("angle_d3d11_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") |
| } |
| if b.matchGpu("Intel") { |
| // Debug-ANGLE-All on Intel frequently timeout, and the FilterResult test suite |
| // produces many test cases, that are multiplied by the number of configs (of |
| // which ANGLE has many variations). There is not a lot of value gained by |
| // running these if they are the source of long 'dm' time on Xe hardware given |
| // many other tasks are executing them. |
| skip(ALL, "test", ALL, "FilterResult") |
| } |
| } else if b.matchOs("Mac") { |
| configs = []string{"angle_mtl_es2", "angle_mtl_es3"} |
| |
| // 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, "TextBlobCache") |
| skip(ALL, "test", ALL, "OverdrawSurface_Gpu") |
| skip(ALL, "test", ALL, "ReplaceSurfaceBackendTexture") |
| skip(ALL, "test", ALL, "SurfaceAttachStencil_Gpu") |
| skip(ALL, "test", ALL, "SurfacePartialDraw_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") && !b.extraConfig("Graphite") { |
| 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 machines we test dynamic MSAA on. |
| if b.gpu("QuadroP400", "MaliG77") && !b.extraConfig("TSAN") { |
| configs = append(configs, "vkdmsaa") |
| } |
| } |
| if b.extraConfig("Metal") && !b.extraConfig("Graphite") { |
| 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", "glserializeslug", "glremoteslug"} |
| // glremoteslug does not handle layers right. Exclude the tests for now. |
| skip("glremoteslug", "gm", ALL, "rtif_distort") |
| skip("glremoteslug", "gm", ALL, "textfilter_image") |
| skip("glremoteslug", "gm", ALL, "textfilter_color") |
| skip("glremoteslug", "gm", ALL, "savelayerpreservelcdtext") |
| skip("glremoteslug", "gm", ALL, "typefacerendering_pfa") |
| skip("glremoteslug", "gm", ALL, "typefacerendering_pfb") |
| skip("glremoteslug", "gm", ALL, "typefacerendering") |
| } |
| if b.extraConfig("Direct3D") { |
| configs = []string{"d3d"} |
| } |
| |
| // Test 1010102 on our Linux/NVIDIA tasks and the persistent cache config |
| // on the GL tasks. |
| if b.gpu("QuadroP400") && !b.extraConfig("PreAbandonGpuContext") && !b.extraConfig("TSAN") && b.isLinux() && |
| !b.extraConfig("FailFlushTimeCallbacks") && !b.extraConfig("Graphite") { |
| if b.extraConfig("Vulkan") { |
| configs = append(configs, "vk1010102") |
| // Decoding transparent images to 1010102 just looks bad |
| skip("vk1010102", "image", ALL, ALL) |
| } else { |
| 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, "cartman.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") && !b.extraConfig("Graphite") { |
| configs = append(configs, "mtlreducedshaders") |
| } |
| |
| 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 tasks |
| if b.extraConfig("BonusConfigs") { |
| configs = []string{"glbetex", "glbert", "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.matchExtraConfig("ColorSpaces") { |
| // Here we're going to generate a bunch of configs with the format: |
| // <colorspace> <backend> <targetFormat> |
| // Where: <colorspace> is one of: "", "linear-", "narrow-", p3-", "rec2020-", "srgb2-" |
| // <backend> is one of: "gl, "gles", "mtl", "vk" |
| // their "gr" prefixed versions |
| // and "" (for raster) |
| // <targetFormat> is one of: "f16", { "" (for gpus) or "rgba" (for raster) } |
| // |
| // We also add on two configs with the format: |
| // narrow-<backend>f16norm |
| // linear-<backend>srgba |
| colorSpaces := []string{"", "linear-", "narrow-", "p3-", "rec2020-", "srgb2-"} |
| |
| backendStr := "" |
| if b.gpu() { |
| if b.extraConfig("Graphite") { |
| if b.extraConfig("GL") { |
| backendStr = "grgl" |
| } else if b.extraConfig("GLES") { |
| backendStr = "grgles" |
| } else if b.extraConfig("Metal") { |
| backendStr = "grmtl" |
| } else if b.extraConfig("Vulkan") { |
| backendStr = "grvk" |
| } |
| } else { |
| if b.extraConfig("GL") { |
| backendStr = "gl" |
| } else if b.extraConfig("GLES") { |
| backendStr = "gles" |
| } else if b.extraConfig("Metal") { |
| backendStr = "mtl" |
| } else if b.extraConfig("Vulkan") { |
| backendStr = "vk" |
| } |
| } |
| } |
| |
| targetFormats := []string{"f16"} |
| if b.gpu() { |
| targetFormats = append(targetFormats, "") |
| } else { |
| targetFormats = append(targetFormats, "rgba") |
| } |
| |
| configs = []string{} |
| |
| for _, cs := range colorSpaces { |
| for _, tf := range targetFormats { |
| configs = append(configs, cs+backendStr+tf) |
| } |
| } |
| |
| configs = append(configs, "narrow-"+backendStr+"f16norm") |
| configs = append(configs, "linear-"+backendStr+"srgba") |
| } |
| |
| // 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.model("Spin513") { |
| removeFromArgs("tests") |
| } |
| |
| if b.extraConfig("NativeFonts") { // images won't exercise native font integration :) |
| removeFromArgs("image") |
| removeFromArgs("colorImage") |
| } |
| |
| if b.matchExtraConfig("Graphite") { |
| removeFromArgs("image") |
| removeFromArgs("lottie") |
| removeFromArgs("colorImage") |
| removeFromArgs("svg") |
| } |
| |
| if b.matchExtraConfig("Fontations") { |
| // The only fontations code is exercised via gms and tests |
| removeFromArgs("image") |
| removeFromArgs("lottie") |
| removeFromArgs("colorImage") |
| removeFromArgs("svg") |
| } |
| |
| // Remove skps for all tasks except for a select few. On tasks that will run SKPs remove some of |
| // their other tests. |
| if b.matchExtraConfig("DDL", "PDF") { |
| // The DDL and PDF tasks 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("svg") |
| } else if b.matchExtraConfig("FailFlushTimeCallbacks") { |
| // The FailFlushTimeCallbacks bot only runs skps, gms and svgs |
| removeFromArgs("tests") |
| removeFromArgs("image") |
| removeFromArgs("colorImage") |
| } else if b.extraConfig("Protected") { |
| // Currently the Protected jobs only run the unit tests |
| removeFromArgs("gm") |
| removeFromArgs("image") |
| removeFromArgs("lottie") |
| removeFromArgs("colorImage") |
| removeFromArgs("svg") |
| removeFromArgs("skp") |
| } else { |
| // No other tasks render the .skps. |
| removeFromArgs("skp") |
| } |
| |
| if b.extraConfig("Lottie") { |
| // Only run the lotties on Lottie tasks. |
| 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 |
| // Avoid lots of spurious TSAN failures on |
| // Test-Debian11-Clang-NUC11TZi5-GPU-IntelIrisXe-x86_64-Release-All-TSAN_Vulkan |
| // Test-Debian11-Clang-NUC11TZi5-GPU-IntelIrisXe-x86_64-Release-All-DDL3_TSAN_Vulkan |
| if b.Name == "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan" || |
| b.Name == "Test-Debian11-Clang-NUC11TZi5-GPU-IntelIrisXe-x86_64-Release-All-TSAN_Vulkan" || |
| b.Name == "Test-Debian11-Clang-NUC11TZi5-GPU-IntelIrisXe-x86_64-Release-All-DDL3_TSAN_Vulkan" { |
| skip("_", "test", "_", "_") |
| } |
| } |
| |
| // TODO: ??? |
| skip("f16", ALL, ALL, "dstreadshuffle") |
| |
| // --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("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", "Debian11", "Ubuntu18") || b.gpu("IntelIris655", "IntelIris540") { |
| // This test requires a decent max texture size so just run it on the desktops. |
| // The OS list should include Mac but Mac10.13 doesn't work correctly. |
| // The IntelIris655 and IntelIris540 GPUs don't work correctly in the Vk backend |
| skip(ALL, "test", ALL, "BigImageTest_Ganesh") |
| } |
| |
| 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", |
| "imagefilterstransformed", |
| } |
| |
| // 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") |
| badSerializeGMs = append(badSerializeGMs, "image_out_of_gamut") |
| |
| // 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:14411 -- images are visibly identical, not interested in diagnosing non-determinism here |
| skip("pic-8888", "gm", ALL, "perlinnoise_layered") |
| skip("serialize-8888", "gm", ALL, "perlinnoise_layered") |
| if b.gpu("IntelIrisXe") && !b.extraConfig("Vulkan") { |
| skip(ALL, "gm", ALL, "perlinnoise_layered") // skia:14411 |
| } |
| |
| if b.gpu("IntelIrisXe") && b.matchOs("Win") && b.extraConfig("Vulkan") { |
| skip(ALL, "tests", ALL, "VkYCbcrSampler_DrawImageWithYcbcrSampler") // skia:14628 |
| } |
| |
| // 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 tasks |
| // 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) |
| } |
| } |
| |
| 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") |
| } |
| } |
| |
| // b/296440036 |
| // disable broken tests on Adreno 5/6xx Vulkan or API30 |
| if b.matchGpu("Adreno[56]") && (b.extraConfig("Vulkan") || b.extraConfig("API30")) { |
| skip(ALL, "tests", ALL, "ImageAsyncReadPixels_Renderable_BottomLeft") |
| skip(ALL, "tests", ALL, "ImageAsyncReadPixels_Renderable_TopLeft") |
| skip(ALL, "tests", ALL, "ImageAsyncReadPixels_NonRenderable_BottomLeft") |
| skip(ALL, "tests", ALL, "ImageAsyncReadPixels_NonRenderable_TopLeft") |
| skip(ALL, "tests", ALL, "SurfaceAsyncReadPixels") |
| } |
| |
| if b.matchGpu("Adreno[56]") && b.extraConfig("Vulkan") { |
| skip(ALL, "gm", ALL, "mesh_with_image") |
| skip(ALL, "gm", ALL, "mesh_with_paint_color") |
| skip(ALL, "gm", ALL, "mesh_with_paint_image") |
| } |
| |
| if b.matchGpu("Mali400") { |
| skip(ALL, "tests", ALL, "BlendRequiringDstReadWithLargeCoordinates") |
| skip(ALL, "tests", ALL, "SkSLCross") // despite the name, it's not in SkSLTest.cpp |
| } |
| |
| if b.matchOs("Mac") && (b.gpu("IntelIrisPlus") || b.gpu("IntelHD6000")) && |
| b.extraConfig("Metal") { |
| // TODO(skia:296960708): The IntelIrisPlus+Metal config hangs on this test, but passes |
| // SurfaceContextWritePixelsMipped so let that one keep running. |
| skip(ALL, "tests", ALL, "SurfaceContextWritePixels") |
| skip(ALL, "tests", ALL, "SurfaceContextWritePixelsMipped") |
| skip(ALL, "tests", ALL, "ImageAsyncReadPixels") |
| skip(ALL, "tests", ALL, "SurfaceAsyncReadPixels") |
| } |
| |
| if b.extraConfig("ANGLE") && b.matchOs("Win") && b.matchGpu("IntelIris(540|655|Xe)") { |
| skip(ALL, "tests", ALL, "ImageFilterCropRect_Gpu") // b/294080402 |
| } |
| |
| if b.gpu("RTX3060") && b.extraConfig("Vulkan") && b.matchOs("Win") { |
| skip(ALL, "gm", ALL, "blurcircles2") // skia:13342 |
| } |
| |
| 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("RadeonR9M470X") && b.extraConfig("ANGLE") { |
| // skbug:14293 - ANGLE D3D9 ES2 has flaky texture sampling that leads to fuzzy diff errors |
| skip(ALL, "tests", ALL, "FilterResult") |
| // skbug:13815 - Flaky failures on ANGLE D3D9 ES2 |
| skip(ALL, "tests", ALL, "SkRuntimeEffectSimple_Ganesh") |
| skip(ALL, "tests", ALL, "TestSweepGradientZeroXGanesh") |
| } |
| |
| if b.extraConfig("Vulkan") && b.gpu("RadeonVega6") { |
| skip(ALL, "gm", ALL, "ycbcrimage") // skia:13265 |
| skip(ALL, "test", ALL, "VkYCbcrSampler_DrawImageWithYcbcrSampler") // skia:13265 |
| } |
| |
| match := []string{} |
| |
| if b.extraConfig("Graphite") { |
| // Graphite doesn't do auto-image-tiling so these GMs should remain disabled |
| match = append(match, "~^verylarge_picture_image$") |
| match = append(match, "~^verylargebitmap$") |
| match = append(match, "~^path_huge_aa$") |
| match = append(match, "~^fast_constraint_red_is_allowed$") |
| match = append(match, "~^strict_constraint_batch_no_red_allowed$") |
| match = append(match, "~^strict_constraint_no_red_allowed$") |
| } |
| |
| 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") |
| } |
| |
| // Pixel4XL on the tree is still on Android 10 (Q), and the vulkan drivers |
| // crash during this GM. It works correctly on newer versions of Android. |
| if b.extraConfig("Vulkan") && b.model("Pixel4XL") { |
| skip("vk", "gm", ALL, "custommesh_cs_uniforms") |
| } |
| |
| 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.extraConfig("Graphite") && 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.extraConfig("Graphite") && 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.extraConfig("HWASAN") { |
| // HWASAN adds tag bytes to pointers. That's incompatible with this test -- it compares |
| // pointers from unrelated stack frames to check that RP isn't growing the stack. |
| skip(ALL, "test", ALL, "SkRasterPipeline_stack_rewind") |
| } |
| |
| 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 b.matchExtraConfig("ColorSpaces") { |
| // Here we reset the 'match' and 'skipped' strings bc the ColorSpaces job only runs |
| // a very specific subset of the GMs. |
| skipped = []string{} |
| match = []string{} |
| match = append(match, "async_rescale_and_read_dog_up") |
| match = append(match, "bug6783") |
| match = append(match, "colorspace") |
| match = append(match, "colorspace2") |
| match = append(match, "coloremoji") |
| match = append(match, "composeCF") |
| match = append(match, "crbug_224618") |
| match = append(match, "drawlines_with_local_matrix") |
| match = append(match, "gradients_interesting") |
| match = append(match, "manypathatlases_2048") |
| match = append(match, "custommesh_cs_uniforms") |
| match = append(match, "paint_alpha_normals_rt") |
| match = append(match, "runtimefunctions") |
| match = append(match, "savelayer_f16") |
| match = append(match, "spiral_rt") |
| match = append(match, "srgb_colorfilter") |
| match = append(match, "strokedlines") |
| match = append(match, "sweep_tiling") |
| } |
| |
| 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 devices 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("NativeFonts") { |
| args = append(args, "--nativeFonts") |
| if !b.matchOs("Android") { |
| args = append(args, "--paragraph_fonts", "extra_fonts") |
| args = append(args, "--norun_paragraph_tests_needing_system_fonts") |
| } |
| } else { |
| args = append(args, "--nonativeFonts") |
| } |
| |
| if b.extraConfig("GDI") { |
| args = append(args, "--gdi") |
| } |
| |
| if b.extraConfig("Fontations") { |
| args = append(args, "--fontations") |
| } |
| |
| // Let's make all tasks 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("NeverYield") { |
| args = append(args, "--neverYieldToWebGPU") |
| } |
| |
| 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") |
| } |