1cb93a386Sopenharmony_ci// Copyright 2020 The Chromium Authors. All rights reserved.
2cb93a386Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be
3cb93a386Sopenharmony_ci// found in the LICENSE file.
4cb93a386Sopenharmony_ci
5cb93a386Sopenharmony_cipackage gen_tasks_logic
6cb93a386Sopenharmony_ci
7cb93a386Sopenharmony_ciimport (
8cb93a386Sopenharmony_ci	"fmt"
9cb93a386Sopenharmony_ci	"log"
10cb93a386Sopenharmony_ci	"sort"
11cb93a386Sopenharmony_ci	"strconv"
12cb93a386Sopenharmony_ci	"strings"
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_ci	"github.com/golang/glog"
15cb93a386Sopenharmony_ci	"go.skia.org/infra/task_scheduler/go/specs"
16cb93a386Sopenharmony_ci)
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_ci// keyParams generates the key used by DM for Gold results.
19cb93a386Sopenharmony_cifunc keyParams(parts map[string]string) []string {
20cb93a386Sopenharmony_ci	// Don't bother to include role, which is always Test.
21cb93a386Sopenharmony_ci	ignored := []string{"role", "test_filter"}
22cb93a386Sopenharmony_ci	keys := make([]string, 0, len(parts))
23cb93a386Sopenharmony_ci	for key := range parts {
24cb93a386Sopenharmony_ci		found := false
25cb93a386Sopenharmony_ci		for _, b := range ignored {
26cb93a386Sopenharmony_ci			if key == b {
27cb93a386Sopenharmony_ci				found = true
28cb93a386Sopenharmony_ci				break
29cb93a386Sopenharmony_ci			}
30cb93a386Sopenharmony_ci		}
31cb93a386Sopenharmony_ci		if !found {
32cb93a386Sopenharmony_ci			keys = append(keys, key)
33cb93a386Sopenharmony_ci		}
34cb93a386Sopenharmony_ci	}
35cb93a386Sopenharmony_ci	sort.Strings(keys)
36cb93a386Sopenharmony_ci	rv := make([]string, 0, 2*len(keys))
37cb93a386Sopenharmony_ci	for _, key := range keys {
38cb93a386Sopenharmony_ci		rv = append(rv, key, parts[key])
39cb93a386Sopenharmony_ci	}
40cb93a386Sopenharmony_ci	return rv
41cb93a386Sopenharmony_ci}
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci// dmFlags generates flags to DM based on the given task properties.
44cb93a386Sopenharmony_cifunc (b *taskBuilder) dmFlags(internalHardwareLabel string) {
45cb93a386Sopenharmony_ci	properties := map[string]string{
46cb93a386Sopenharmony_ci		"gitHash":              specs.PLACEHOLDER_REVISION,
47cb93a386Sopenharmony_ci		"builder":              b.Name,
48cb93a386Sopenharmony_ci		"buildbucket_build_id": specs.PLACEHOLDER_BUILDBUCKET_BUILD_ID,
49cb93a386Sopenharmony_ci		"task_id":              specs.PLACEHOLDER_TASK_ID,
50cb93a386Sopenharmony_ci		"issue":                specs.PLACEHOLDER_ISSUE,
51cb93a386Sopenharmony_ci		"patchset":             specs.PLACEHOLDER_PATCHSET,
52cb93a386Sopenharmony_ci		"patch_storage":        specs.PLACEHOLDER_PATCH_STORAGE,
53cb93a386Sopenharmony_ci		"swarming_bot_id":      "${SWARMING_BOT_ID}",
54cb93a386Sopenharmony_ci		"swarming_task_id":     "${SWARMING_TASK_ID}",
55cb93a386Sopenharmony_ci	}
56cb93a386Sopenharmony_ci
57cb93a386Sopenharmony_ci	args := []string{
58cb93a386Sopenharmony_ci		"dm",
59cb93a386Sopenharmony_ci		"--nameByHash",
60cb93a386Sopenharmony_ci	}
61cb93a386Sopenharmony_ci
62cb93a386Sopenharmony_ci	configs := []string{}
63cb93a386Sopenharmony_ci	skipped := []string{}
64cb93a386Sopenharmony_ci
65cb93a386Sopenharmony_ci	hasConfig := func(cfg string) bool {
66cb93a386Sopenharmony_ci		for _, c := range configs {
67cb93a386Sopenharmony_ci			if c == cfg {
68cb93a386Sopenharmony_ci				return true
69cb93a386Sopenharmony_ci			}
70cb93a386Sopenharmony_ci		}
71cb93a386Sopenharmony_ci		return false
72cb93a386Sopenharmony_ci	}
73cb93a386Sopenharmony_ci	filter := func(slice []string, elems ...string) []string {
74cb93a386Sopenharmony_ci		m := make(map[string]bool, len(elems))
75cb93a386Sopenharmony_ci		for _, e := range elems {
76cb93a386Sopenharmony_ci			m[e] = true
77cb93a386Sopenharmony_ci		}
78cb93a386Sopenharmony_ci		rv := make([]string, 0, len(slice))
79cb93a386Sopenharmony_ci		for _, e := range slice {
80cb93a386Sopenharmony_ci			if m[e] {
81cb93a386Sopenharmony_ci				rv = append(rv, e)
82cb93a386Sopenharmony_ci			}
83cb93a386Sopenharmony_ci		}
84cb93a386Sopenharmony_ci		return rv
85cb93a386Sopenharmony_ci	}
86cb93a386Sopenharmony_ci	remove := func(slice []string, elem string) []string {
87cb93a386Sopenharmony_ci		rv := make([]string, 0, len(slice))
88cb93a386Sopenharmony_ci		for _, e := range slice {
89cb93a386Sopenharmony_ci			if e != elem {
90cb93a386Sopenharmony_ci				rv = append(rv, e)
91cb93a386Sopenharmony_ci			}
92cb93a386Sopenharmony_ci		}
93cb93a386Sopenharmony_ci		return rv
94cb93a386Sopenharmony_ci	}
95cb93a386Sopenharmony_ci	removeContains := func(slice []string, elem string) []string {
96cb93a386Sopenharmony_ci		rv := make([]string, 0, len(slice))
97cb93a386Sopenharmony_ci		for _, e := range slice {
98cb93a386Sopenharmony_ci			if !strings.Contains(e, elem) {
99cb93a386Sopenharmony_ci				rv = append(rv, e)
100cb93a386Sopenharmony_ci			}
101cb93a386Sopenharmony_ci		}
102cb93a386Sopenharmony_ci		return rv
103cb93a386Sopenharmony_ci	}
104cb93a386Sopenharmony_ci	suffix := func(slice []string, sfx string) []string {
105cb93a386Sopenharmony_ci		rv := make([]string, 0, len(slice))
106cb93a386Sopenharmony_ci		for _, e := range slice {
107cb93a386Sopenharmony_ci			rv = append(rv, e+sfx)
108cb93a386Sopenharmony_ci		}
109cb93a386Sopenharmony_ci		return rv
110cb93a386Sopenharmony_ci	}
111cb93a386Sopenharmony_ci
112cb93a386Sopenharmony_ci	skip := func(quad ...string) {
113cb93a386Sopenharmony_ci		if len(quad) == 1 {
114cb93a386Sopenharmony_ci			quad = strings.Fields(quad[0])
115cb93a386Sopenharmony_ci		}
116cb93a386Sopenharmony_ci		if len(quad) != 4 {
117cb93a386Sopenharmony_ci			log.Fatalf("Invalid value for --skip: %+v", quad)
118cb93a386Sopenharmony_ci		}
119cb93a386Sopenharmony_ci		config := quad[0]
120cb93a386Sopenharmony_ci		src := quad[1]
121cb93a386Sopenharmony_ci		options := quad[2]
122cb93a386Sopenharmony_ci		name := quad[3]
123cb93a386Sopenharmony_ci		if config == "_" ||
124cb93a386Sopenharmony_ci			hasConfig(config) ||
125cb93a386Sopenharmony_ci			(config[0] == '~' && hasConfig(config[1:])) {
126cb93a386Sopenharmony_ci			skipped = append(skipped, config, src, options, name)
127cb93a386Sopenharmony_ci		}
128cb93a386Sopenharmony_ci	}
129cb93a386Sopenharmony_ci
130cb93a386Sopenharmony_ci	// Keys.
131cb93a386Sopenharmony_ci	keys := keyParams(b.parts)
132cb93a386Sopenharmony_ci	if b.extraConfig("Lottie") {
133cb93a386Sopenharmony_ci		keys = append(keys, "renderer", "skottie")
134cb93a386Sopenharmony_ci	}
135cb93a386Sopenharmony_ci	if b.matchExtraConfig("DDL") {
136cb93a386Sopenharmony_ci		// 'DDL' style means "--skpViewportSize 2048"
137cb93a386Sopenharmony_ci		keys = append(keys, "style", "DDL")
138cb93a386Sopenharmony_ci	} else {
139cb93a386Sopenharmony_ci		keys = append(keys, "style", "default")
140cb93a386Sopenharmony_ci	}
141cb93a386Sopenharmony_ci	args = append(args, "--key")
142cb93a386Sopenharmony_ci	args = append(args, keys...)
143cb93a386Sopenharmony_ci
144cb93a386Sopenharmony_ci	// This enables non-deterministic random seeding of the GPU FP optimization
145cb93a386Sopenharmony_ci	// test.
146cb93a386Sopenharmony_ci	// Not Android due to:
147cb93a386Sopenharmony_ci	//  - https://skia.googlesource.com/skia/+/5910ed347a638ded8cd4c06dbfda086695df1112/BUILD.gn#160
148cb93a386Sopenharmony_ci	//  - https://skia.googlesource.com/skia/+/ce06e261e68848ae21cac1052abc16bc07b961bf/tests/ProcessorTest.cpp#307
149cb93a386Sopenharmony_ci	// Not MSAN due to:
150cb93a386Sopenharmony_ci	//  - https://skia.googlesource.com/skia/+/0ac06e47269a40c177747310a613d213c95d1d6d/infra/bots/recipe_modules/flavor/gn_flavor.py#80
151cb93a386Sopenharmony_ci	if !b.os("Android") && !b.extraConfig("MSAN") {
152cb93a386Sopenharmony_ci		args = append(args, "--randomProcessorTest")
153cb93a386Sopenharmony_ci	}
154cb93a386Sopenharmony_ci
155cb93a386Sopenharmony_ci	threadLimit := -1
156cb93a386Sopenharmony_ci	const MAIN_THREAD_ONLY = 0
157cb93a386Sopenharmony_ci
158cb93a386Sopenharmony_ci	// 32-bit desktop bots tend to run out of memory, because they have relatively
159cb93a386Sopenharmony_ci	// far more cores than RAM (e.g. 32 cores, 3G RAM).  Hold them back a bit.
160cb93a386Sopenharmony_ci	if b.arch("x86") {
161cb93a386Sopenharmony_ci		threadLimit = 4
162cb93a386Sopenharmony_ci	}
163cb93a386Sopenharmony_ci
164cb93a386Sopenharmony_ci	// These bots run out of memory easily.
165cb93a386Sopenharmony_ci	if b.model("MotoG4", "Nexus7") {
166cb93a386Sopenharmony_ci		threadLimit = MAIN_THREAD_ONLY
167cb93a386Sopenharmony_ci	}
168cb93a386Sopenharmony_ci
169cb93a386Sopenharmony_ci	// Avoid issues with dynamically exceeding resource cache limits.
170cb93a386Sopenharmony_ci	if b.matchExtraConfig("DISCARDABLE") {
171cb93a386Sopenharmony_ci		threadLimit = MAIN_THREAD_ONLY
172cb93a386Sopenharmony_ci	}
173cb93a386Sopenharmony_ci
174cb93a386Sopenharmony_ci	if threadLimit >= 0 {
175cb93a386Sopenharmony_ci		args = append(args, "--threads", strconv.Itoa(threadLimit))
176cb93a386Sopenharmony_ci	}
177cb93a386Sopenharmony_ci
178cb93a386Sopenharmony_ci	sampleCount := 0
179cb93a386Sopenharmony_ci	glPrefix := ""
180cb93a386Sopenharmony_ci	if b.extraConfig("SwiftShader") {
181cb93a386Sopenharmony_ci		configs = append(configs, "gles", "glesdft", "glesdmsaa")
182cb93a386Sopenharmony_ci	} else if b.cpu() {
183cb93a386Sopenharmony_ci		args = append(args, "--nogpu")
184cb93a386Sopenharmony_ci
185cb93a386Sopenharmony_ci		configs = append(configs, "8888")
186cb93a386Sopenharmony_ci
187cb93a386Sopenharmony_ci		if b.extraConfig("SkVM") {
188cb93a386Sopenharmony_ci			args = append(args, "--skvm")
189cb93a386Sopenharmony_ci		}
190cb93a386Sopenharmony_ci
191cb93a386Sopenharmony_ci		if b.extraConfig("BonusConfigs") {
192cb93a386Sopenharmony_ci			configs = []string{
193cb93a386Sopenharmony_ci				"g8", "565",
194cb93a386Sopenharmony_ci				"pic-8888", "serialize-8888",
195cb93a386Sopenharmony_ci				"linear-f16", "srgb-rgba", "srgb-f16", "narrow-rgba", "narrow-f16",
196cb93a386Sopenharmony_ci				"p3-rgba", "p3-f16", "rec2020-rgba", "rec2020-f16"}
197cb93a386Sopenharmony_ci		}
198cb93a386Sopenharmony_ci
199cb93a386Sopenharmony_ci		if b.extraConfig("PDF") {
200cb93a386Sopenharmony_ci			configs = []string{"pdf"}
201cb93a386Sopenharmony_ci			args = append(args, "--rasterize_pdf") // Works only on Mac.
202cb93a386Sopenharmony_ci			// Take ~forever to rasterize:
203cb93a386Sopenharmony_ci			skip("pdf gm _ lattice2")
204cb93a386Sopenharmony_ci			skip("pdf gm _ hairmodes")
205cb93a386Sopenharmony_ci			skip("pdf gm _ longpathdash")
206cb93a386Sopenharmony_ci		}
207cb93a386Sopenharmony_ci
208cb93a386Sopenharmony_ci	} else if b.gpu() {
209cb93a386Sopenharmony_ci		args = append(args, "--nocpu")
210cb93a386Sopenharmony_ci
211cb93a386Sopenharmony_ci		// Add in either gles or gl configs to the canonical set based on OS
212cb93a386Sopenharmony_ci		glPrefix = "gl"
213cb93a386Sopenharmony_ci		// Use 4x MSAA for all our testing. It's more consistent and 8x MSAA is nondeterministic (by
214cb93a386Sopenharmony_ci		// design) on NVIDIA hardware. The problem is especially bad on ANGLE.  skia:6813 skia:6545
215cb93a386Sopenharmony_ci		sampleCount = 4
216cb93a386Sopenharmony_ci		if b.os("Android", "iOS") {
217cb93a386Sopenharmony_ci			glPrefix = "gles"
218cb93a386Sopenharmony_ci			// MSAA is disabled on Pixel3a (https://b.corp.google.com/issues/143074513).
219cb93a386Sopenharmony_ci			// MSAA is disabled on Pixel5 (https://skbug.com/11152).
220cb93a386Sopenharmony_ci			if b.model("Pixel3a", "Pixel5") {
221cb93a386Sopenharmony_ci				sampleCount = 0
222cb93a386Sopenharmony_ci			}
223cb93a386Sopenharmony_ci		} else if b.matchGpu("Intel") {
224cb93a386Sopenharmony_ci			// MSAA doesn't work well on Intel GPUs chromium:527565, chromium:983926
225cb93a386Sopenharmony_ci			sampleCount = 0
226cb93a386Sopenharmony_ci		} else if b.os("ChromeOS") {
227cb93a386Sopenharmony_ci			glPrefix = "gles"
228cb93a386Sopenharmony_ci		}
229cb93a386Sopenharmony_ci
230cb93a386Sopenharmony_ci		if b.extraConfig("NativeFonts") {
231cb93a386Sopenharmony_ci			configs = append(configs, glPrefix)
232cb93a386Sopenharmony_ci		} else {
233cb93a386Sopenharmony_ci			configs = append(configs, glPrefix, glPrefix+"dft", "srgb-"+glPrefix)
234cb93a386Sopenharmony_ci			if sampleCount > 0 {
235cb93a386Sopenharmony_ci				configs = append(configs, fmt.Sprintf("%smsaa%d", glPrefix, sampleCount))
236cb93a386Sopenharmony_ci				// Temporarily limit the bots we test dynamic MSAA on.
237cb93a386Sopenharmony_ci				if b.gpu("QuadroP400", "MaliG77") || b.matchOs("Mac") {
238cb93a386Sopenharmony_ci					configs = append(configs, fmt.Sprintf("%sdmsaa", glPrefix))
239cb93a386Sopenharmony_ci				}
240cb93a386Sopenharmony_ci			}
241cb93a386Sopenharmony_ci		}
242cb93a386Sopenharmony_ci
243cb93a386Sopenharmony_ci		// The Tegra3 doesn't support MSAA
244cb93a386Sopenharmony_ci		if b.gpu("Tegra3") ||
245cb93a386Sopenharmony_ci			// We aren't interested in fixing msaa bugs on current iOS devices.
246cb93a386Sopenharmony_ci			b.model("iPad4", "iPadPro", "iPhone6", "iPhone7") ||
247cb93a386Sopenharmony_ci			// skia:5792
248cb93a386Sopenharmony_ci			b.gpu("IntelHD530", "IntelIris540") {
249cb93a386Sopenharmony_ci			configs = removeContains(configs, "msaa")
250cb93a386Sopenharmony_ci		}
251cb93a386Sopenharmony_ci
252cb93a386Sopenharmony_ci		// We want to test both the OpenGL config and the GLES config on Linux Intel:
253cb93a386Sopenharmony_ci		// GL is used by Chrome, GLES is used by ChromeOS.
254cb93a386Sopenharmony_ci		// Also do the Ganesh threading verification test (render with and without
255cb93a386Sopenharmony_ci		// worker threads, using only the SW path renderer, and compare the results).
256cb93a386Sopenharmony_ci		if b.matchGpu("Intel") && b.isLinux() {
257cb93a386Sopenharmony_ci			configs = append(configs, "gles", "glesdft", "srgb-gles", "gltestthreading")
258cb93a386Sopenharmony_ci			// skbug.com/6333, skbug.com/6419, skbug.com/6702
259cb93a386Sopenharmony_ci			skip("gltestthreading gm _ lcdblendmodes")
260cb93a386Sopenharmony_ci			skip("gltestthreading gm _ lcdoverlap")
261cb93a386Sopenharmony_ci			skip("gltestthreading gm _ textbloblooper")
262cb93a386Sopenharmony_ci			// All of these GMs are flaky, too:
263cb93a386Sopenharmony_ci			skip("gltestthreading gm _ savelayer_with_backdrop")
264cb93a386Sopenharmony_ci			skip("gltestthreading gm _ persp_shaders_bw")
265cb93a386Sopenharmony_ci			skip("gltestthreading gm _ dftext_blob_persp")
266cb93a386Sopenharmony_ci			skip("gltestthreading gm _ dftext")
267cb93a386Sopenharmony_ci			skip("gltestthreading gm _ gpu_blur_utils")
268cb93a386Sopenharmony_ci			skip("gltestthreading gm _ gpu_blur_utils_ref")
269cb93a386Sopenharmony_ci			skip("gltestthreading gm _ gpu_blur_utils_subset_rect")
270cb93a386Sopenharmony_ci			skip("gltestthreading gm _ gpu_blur_utils_subset_rect_ref")
271cb93a386Sopenharmony_ci			// skbug.com/7523 - Flaky on various GPUs
272cb93a386Sopenharmony_ci			skip("gltestthreading gm _ orientation")
273cb93a386Sopenharmony_ci			// These GMs only differ in the low bits
274cb93a386Sopenharmony_ci			skip("gltestthreading gm _ stroketext")
275cb93a386Sopenharmony_ci			skip("gltestthreading gm _ draw_image_set")
276cb93a386Sopenharmony_ci		}
277cb93a386Sopenharmony_ci
278cb93a386Sopenharmony_ci		// CommandBuffer bot *only* runs the cmdbuffer_es2 configs.
279cb93a386Sopenharmony_ci		if b.extraConfig("CommandBuffer") {
280cb93a386Sopenharmony_ci			configs = []string{"cmdbuffer_es2"}
281cb93a386Sopenharmony_ci			if sampleCount > 0 {
282cb93a386Sopenharmony_ci				configs = append(configs, "cmdbuffer_es2_dmsaa")
283cb93a386Sopenharmony_ci			}
284cb93a386Sopenharmony_ci		}
285cb93a386Sopenharmony_ci
286cb93a386Sopenharmony_ci		// Dawn bot *only* runs the dawn config
287cb93a386Sopenharmony_ci		if b.extraConfig("Dawn") {
288cb93a386Sopenharmony_ci			// tint:1045: Tint doesn't implement MatrixInverse yet.
289cb93a386Sopenharmony_ci			skip("_", "gm", "_", "runtime_intrinsics_matrix")
290cb93a386Sopenharmony_ci			configs = []string{"dawn"}
291cb93a386Sopenharmony_ci		}
292cb93a386Sopenharmony_ci
293cb93a386Sopenharmony_ci		// Graphite bot *only* runs the grmtl config
294cb93a386Sopenharmony_ci		if b.extraConfig("Graphite") {
295cb93a386Sopenharmony_ci			args = append(args, "--nogpu") // disable non-Graphite tests
296cb93a386Sopenharmony_ci
297cb93a386Sopenharmony_ci			// TODO: re-enable - currently fails with "Failed to make lazy image"
298cb93a386Sopenharmony_ci			skip("_", "gm", "_", "image_subset")
299cb93a386Sopenharmony_ci
300cb93a386Sopenharmony_ci			if b.extraConfig("ASAN") {
301cb93a386Sopenharmony_ci				// skbug.com/12507 (Neon UB during JPEG compression on M1 ASAN Graphite bot)
302cb93a386Sopenharmony_ci				skip("_", "gm", "_", "yuv420_odd_dim") // Oddly enough yuv420_odd_dim_repeat doesn't crash
303cb93a386Sopenharmony_ci				skip("_", "gm", "_", "encode-alpha-jpeg")
304cb93a386Sopenharmony_ci				skip("_", "gm", "_", "encode")
305cb93a386Sopenharmony_ci				skip("_", "gm", "_", "jpg-color-cube")
306cb93a386Sopenharmony_ci			}
307cb93a386Sopenharmony_ci			configs = []string{"grmtl"}
308cb93a386Sopenharmony_ci		}
309cb93a386Sopenharmony_ci
310cb93a386Sopenharmony_ci		// ANGLE bot *only* runs the angle configs
311cb93a386Sopenharmony_ci		if b.extraConfig("ANGLE") {
312cb93a386Sopenharmony_ci			configs = []string{"angle_d3d11_es2",
313cb93a386Sopenharmony_ci				"angle_gl_es2",
314cb93a386Sopenharmony_ci				"angle_d3d11_es3"}
315cb93a386Sopenharmony_ci			if sampleCount > 0 {
316cb93a386Sopenharmony_ci				configs = append(configs, fmt.Sprintf("angle_d3d11_es2_msaa%d", sampleCount))
317cb93a386Sopenharmony_ci				configs = append(configs, fmt.Sprintf("angle_d3d11_es2_dmsaa"))
318cb93a386Sopenharmony_ci				configs = append(configs, fmt.Sprintf("angle_gl_es2_dmsaa"))
319cb93a386Sopenharmony_ci				configs = append(configs, fmt.Sprintf("angle_d3d11_es3_msaa%d", sampleCount))
320cb93a386Sopenharmony_ci				configs = append(configs, fmt.Sprintf("angle_d3d11_es3_dmsaa"))
321cb93a386Sopenharmony_ci				configs = append(configs, fmt.Sprintf("angle_gl_es3_dmsaa"))
322cb93a386Sopenharmony_ci			}
323cb93a386Sopenharmony_ci			if b.matchGpu("GTX", "Quadro") {
324cb93a386Sopenharmony_ci				// See skia:7823 and chromium:693090.
325cb93a386Sopenharmony_ci				configs = append(configs, "angle_gl_es3")
326cb93a386Sopenharmony_ci				if sampleCount > 0 {
327cb93a386Sopenharmony_ci					configs = append(configs, fmt.Sprintf("angle_gl_es2_msaa%d", sampleCount))
328cb93a386Sopenharmony_ci					configs = append(configs, fmt.Sprintf("angle_gl_es2_dmsaa"))
329cb93a386Sopenharmony_ci					configs = append(configs, fmt.Sprintf("angle_gl_es3_msaa%d", sampleCount))
330cb93a386Sopenharmony_ci					configs = append(configs, fmt.Sprintf("angle_gl_es3_dmsaa"))
331cb93a386Sopenharmony_ci				}
332cb93a386Sopenharmony_ci			}
333cb93a386Sopenharmony_ci			if !b.matchGpu("GTX", "Quadro", "GT610") {
334cb93a386Sopenharmony_ci				// See skia:10149
335cb93a386Sopenharmony_ci				configs = append(configs, "angle_d3d9_es2")
336cb93a386Sopenharmony_ci			}
337cb93a386Sopenharmony_ci			if b.model("NUC5i7RYH") {
338cb93a386Sopenharmony_ci				// skbug.com/7376
339cb93a386Sopenharmony_ci				skip("_ test _ ProcessorCloneTest")
340cb93a386Sopenharmony_ci			}
341cb93a386Sopenharmony_ci		}
342cb93a386Sopenharmony_ci
343cb93a386Sopenharmony_ci		if b.model("AndroidOne", "Nexus5", "Nexus7") {
344cb93a386Sopenharmony_ci			// skbug.com/9019
345cb93a386Sopenharmony_ci			skip("_ test _ ProcessorCloneTest")
346cb93a386Sopenharmony_ci			skip("_ test _ Programs")
347cb93a386Sopenharmony_ci			skip("_ test _ ProcessorOptimizationValidationTest")
348cb93a386Sopenharmony_ci		}
349cb93a386Sopenharmony_ci
350cb93a386Sopenharmony_ci		if b.model("GalaxyS20") {
351cb93a386Sopenharmony_ci			// skbug.com/10595
352cb93a386Sopenharmony_ci			skip("_ test _ ProcessorCloneTest")
353cb93a386Sopenharmony_ci		}
354cb93a386Sopenharmony_ci
355cb93a386Sopenharmony_ci		if b.extraConfig("CommandBuffer") && b.model("MacBook10.1") {
356cb93a386Sopenharmony_ci			// skbug.com/9235
357cb93a386Sopenharmony_ci			skip("_ test _ Programs")
358cb93a386Sopenharmony_ci		}
359cb93a386Sopenharmony_ci
360cb93a386Sopenharmony_ci		if b.model("Spin513") {
361cb93a386Sopenharmony_ci			// skbug.com/11876
362cb93a386Sopenharmony_ci			skip("_ test _ Programs")
363cb93a386Sopenharmony_ci			// skbug.com/12486
364cb93a386Sopenharmony_ci			skip("_ test _ TestMockContext")
365cb93a386Sopenharmony_ci			skip("_ test _ TestGpuRenderingContexts")
366cb93a386Sopenharmony_ci			skip("_ test _ TestGpuAllContexts")
367cb93a386Sopenharmony_ci			skip("_ test _ OverdrawSurface_Gpu")
368cb93a386Sopenharmony_ci			skip("_ test _ ReplaceSurfaceBackendTexture")
369cb93a386Sopenharmony_ci			skip("_ test _ SurfaceAttachStencil_Gpu")
370cb93a386Sopenharmony_ci			skip("_ test _ SurfaceWrappedWithRelease_Gpu")
371cb93a386Sopenharmony_ci		}
372cb93a386Sopenharmony_ci
373cb93a386Sopenharmony_ci		if b.extraConfig("CommandBuffer") {
374cb93a386Sopenharmony_ci			// skbug.com/10412
375cb93a386Sopenharmony_ci			skip("_ test _ GLBackendAllocationTest")
376cb93a386Sopenharmony_ci			skip("_ test _ InitialTextureClear")
377cb93a386Sopenharmony_ci			// skbug.com/12437
378cb93a386Sopenharmony_ci			skip("_ test _ GrDDLImage_MakeSubset")
379cb93a386Sopenharmony_ci			skip("_ test _ GrContext_oomed")
380cb93a386Sopenharmony_ci		}
381cb93a386Sopenharmony_ci
382cb93a386Sopenharmony_ci		// skbug.com/9043 - these devices render this test incorrectly
383cb93a386Sopenharmony_ci		// when opList splitting reduction is enabled
384cb93a386Sopenharmony_ci		if b.gpu() && b.extraConfig("Vulkan") && (b.gpu("RadeonR9M470X", "RadeonHD7770")) {
385cb93a386Sopenharmony_ci			skip("_", "tests", "_", "VkDrawableImportTest")
386cb93a386Sopenharmony_ci		}
387cb93a386Sopenharmony_ci		if b.extraConfig("Vulkan") {
388cb93a386Sopenharmony_ci			configs = []string{"vk"}
389cb93a386Sopenharmony_ci			// MSAA doesn't work well on Intel GPUs chromium:527565, chromium:983926, skia:9023
390cb93a386Sopenharmony_ci			if !b.matchGpu("Intel") {
391cb93a386Sopenharmony_ci				configs = append(configs, "vkmsaa4")
392cb93a386Sopenharmony_ci			}
393cb93a386Sopenharmony_ci			// Temporarily limit the bots we test dynamic MSAA on.
394cb93a386Sopenharmony_ci			if b.gpu("QuadroP400", "MaliG77") && !b.extraConfig("TSAN") {
395cb93a386Sopenharmony_ci				configs = append(configs, "vkdmsaa")
396cb93a386Sopenharmony_ci			}
397cb93a386Sopenharmony_ci		}
398cb93a386Sopenharmony_ci		if b.extraConfig("Metal") {
399cb93a386Sopenharmony_ci			configs = []string{"mtl"}
400cb93a386Sopenharmony_ci			// MSAA doesn't work well on Intel GPUs chromium:527565, chromium:983926
401cb93a386Sopenharmony_ci			if !b.matchGpu("Intel") {
402cb93a386Sopenharmony_ci				configs = append(configs, "mtlmsaa4")
403cb93a386Sopenharmony_ci			}
404cb93a386Sopenharmony_ci		}
405cb93a386Sopenharmony_ci		if b.extraConfig("Direct3D") {
406cb93a386Sopenharmony_ci			configs = []string{"d3d"}
407cb93a386Sopenharmony_ci		}
408cb93a386Sopenharmony_ci
409cb93a386Sopenharmony_ci		// Test 1010102 on our Linux/NVIDIA bots and the persistent cache config
410cb93a386Sopenharmony_ci		// on the GL bots.
411cb93a386Sopenharmony_ci		if b.gpu("QuadroP400") && !b.extraConfig("PreAbandonGpuContext") && !b.extraConfig("TSAN") && b.isLinux() {
412cb93a386Sopenharmony_ci			if b.extraConfig("Vulkan") {
413cb93a386Sopenharmony_ci				configs = append(configs, "vk1010102")
414cb93a386Sopenharmony_ci				// Decoding transparent images to 1010102 just looks bad
415cb93a386Sopenharmony_ci				skip("vk1010102 image _ _")
416cb93a386Sopenharmony_ci			} else {
417cb93a386Sopenharmony_ci				configs = append(configs, "gl1010102", "gltestpersistentcache", "gltestglslcache", "gltestprecompile")
418cb93a386Sopenharmony_ci				// Decoding transparent images to 1010102 just looks bad
419cb93a386Sopenharmony_ci				skip("gl1010102 image _ _")
420cb93a386Sopenharmony_ci				// These tests produce slightly different pixels run to run on NV.
421cb93a386Sopenharmony_ci				skip("gltestpersistentcache gm _ atlastext")
422cb93a386Sopenharmony_ci				skip("gltestpersistentcache gm _ dftext")
423cb93a386Sopenharmony_ci				skip("gltestpersistentcache gm _ glyph_pos_h_b")
424cb93a386Sopenharmony_ci				skip("gltestpersistentcache gm _ glyph_pos_h_f")
425cb93a386Sopenharmony_ci				skip("gltestpersistentcache gm _ glyph_pos_n_f")
426cb93a386Sopenharmony_ci				skip("gltestglslcache gm _ atlastext")
427cb93a386Sopenharmony_ci				skip("gltestglslcache gm _ dftext")
428cb93a386Sopenharmony_ci				skip("gltestglslcache gm _ glyph_pos_h_b")
429cb93a386Sopenharmony_ci				skip("gltestglslcache gm _ glyph_pos_h_f")
430cb93a386Sopenharmony_ci				skip("gltestglslcache gm _ glyph_pos_n_f")
431cb93a386Sopenharmony_ci				skip("gltestprecompile gm _ atlastext")
432cb93a386Sopenharmony_ci				skip("gltestprecompile gm _ dftext")
433cb93a386Sopenharmony_ci				skip("gltestprecompile gm _ glyph_pos_h_b")
434cb93a386Sopenharmony_ci				skip("gltestprecompile gm _ glyph_pos_h_f")
435cb93a386Sopenharmony_ci				skip("gltestprecompile gm _ glyph_pos_n_f")
436cb93a386Sopenharmony_ci				// Tessellation shaders do not yet participate in the persistent cache.
437cb93a386Sopenharmony_ci				skip("gltestpersistentcache gm _ tessellation")
438cb93a386Sopenharmony_ci				skip("gltestglslcache gm _ tessellation")
439cb93a386Sopenharmony_ci				skip("gltestprecompile gm _ tessellation")
440cb93a386Sopenharmony_ci			}
441cb93a386Sopenharmony_ci		}
442cb93a386Sopenharmony_ci
443cb93a386Sopenharmony_ci		// We also test the SkSL precompile config on Pixel2XL as a representative
444cb93a386Sopenharmony_ci		// Android device - this feature is primarily used by Flutter.
445cb93a386Sopenharmony_ci		if b.model("Pixel2XL") && !b.extraConfig("Vulkan") {
446cb93a386Sopenharmony_ci			configs = append(configs, "glestestprecompile")
447cb93a386Sopenharmony_ci		}
448cb93a386Sopenharmony_ci
449cb93a386Sopenharmony_ci		// Test SkSL precompile on iPhone 8 as representative iOS device
450cb93a386Sopenharmony_ci		if b.model("iPhone8") && b.extraConfig("Metal") {
451cb93a386Sopenharmony_ci			configs = append(configs, "mtltestprecompile")
452cb93a386Sopenharmony_ci			// avoid tests that can generate slightly different pixels per run
453cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ atlastext")
454cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ circular_arcs_hairline")
455cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ dashcircle")
456cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ dftext")
457cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ fontmgr_bounds")
458cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ fontmgr_bounds_1_-0.25")
459cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ glyph_pos_h_b")
460cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ glyph_pos_h_f")
461cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ glyph_pos_n_f")
462cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ persp_images")
463cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ ovals")
464cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ roundrects")
465cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ shadow_utils_occl")
466cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ strokedlines")
467cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ strokerect")
468cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ strokes3")
469cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ texel_subset_linear_mipmap_nearest_down")
470cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ texel_subset_linear_mipmap_linear_down")
471cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ textblobmixedsizes_df")
472cb93a386Sopenharmony_ci			skip("mtltestprecompile gm _ yuv420_odd_dim_repeat")
473cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ A_large_blank_world_map_with_oceans_marked_in_blue.svg")
474cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ Chalkboard.svg")
475cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ Ghostscript_Tiger.svg")
476cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ Seal_of_American_Samoa.svg")
477cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ Seal_of_Illinois.svg")
478cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ desk_motionmark_paths.svg")
479cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ rg1024_green_grapes.svg")
480cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ shapes-intro-02-f.svg")
481cb93a386Sopenharmony_ci			skip("mtltestprecompile svg _ tiger-8.svg")
482cb93a386Sopenharmony_ci		}
483cb93a386Sopenharmony_ci		// Test reduced shader mode on iPhone 11 as representative iOS device
484cb93a386Sopenharmony_ci		if b.model("iPhone11") && b.extraConfig("Metal") {
485cb93a386Sopenharmony_ci			configs = append(configs, "mtlreducedshaders")
486cb93a386Sopenharmony_ci		}
487cb93a386Sopenharmony_ci
488cb93a386Sopenharmony_ci		if b.gpu("AppleM1") && !b.extraConfig("Metal") {
489cb93a386Sopenharmony_ci			skip("_ test _ TransferPixelsFromTextureTest") // skia:11814
490cb93a386Sopenharmony_ci		}
491cb93a386Sopenharmony_ci
492cb93a386Sopenharmony_ci		if b.model(DONT_REDUCE_OPS_TASK_SPLITTING_MODELS...) {
493cb93a386Sopenharmony_ci			args = append(args, "--dontReduceOpsTaskSplitting", "true")
494cb93a386Sopenharmony_ci		}
495cb93a386Sopenharmony_ci
496cb93a386Sopenharmony_ci		// Test reduceOpsTaskSplitting fallback when over budget.
497cb93a386Sopenharmony_ci		if b.model("NUC7i5BNK") && b.extraConfig("ASAN") {
498cb93a386Sopenharmony_ci			args = append(args, "--gpuResourceCacheLimit", "16777216")
499cb93a386Sopenharmony_ci		}
500cb93a386Sopenharmony_ci
501cb93a386Sopenharmony_ci		// Test rendering to wrapped dsts on a few bots
502cb93a386Sopenharmony_ci		// Also test "narrow-glf16", which hits F16 surfaces and F16 vertex colors.
503cb93a386Sopenharmony_ci		if b.extraConfig("BonusConfigs") {
504cb93a386Sopenharmony_ci			configs = []string{"glbetex", "glbert", "narrow-glf16", "glreducedshaders"}
505cb93a386Sopenharmony_ci		}
506cb93a386Sopenharmony_ci
507cb93a386Sopenharmony_ci		if b.os("ChromeOS") {
508cb93a386Sopenharmony_ci			// Just run GLES for now - maybe add gles_msaa4 in the future
509cb93a386Sopenharmony_ci			configs = []string{"gles"}
510cb93a386Sopenharmony_ci		}
511cb93a386Sopenharmony_ci
512cb93a386Sopenharmony_ci		// Test GPU tessellation path renderer.
513cb93a386Sopenharmony_ci		if b.extraConfig("GpuTess") {
514cb93a386Sopenharmony_ci			configs = []string{glPrefix + "msaa4"}
515cb93a386Sopenharmony_ci			// Use hardware tessellation as much as possible for testing. Use 16 segments max to
516cb93a386Sopenharmony_ci			// verify the chopping logic.
517cb93a386Sopenharmony_ci			args = append(args,
518cb93a386Sopenharmony_ci				"--pr", "atlas", "tess", "--hwtess", "--alwaysHwTess",
519cb93a386Sopenharmony_ci				"--maxTessellationSegments", "16")
520cb93a386Sopenharmony_ci		}
521cb93a386Sopenharmony_ci
522cb93a386Sopenharmony_ci		// DDL is a GPU-only feature
523cb93a386Sopenharmony_ci		if b.extraConfig("DDL1") {
524cb93a386Sopenharmony_ci			// This bot generates comparison images for the large skps and the gms
525cb93a386Sopenharmony_ci			configs = filter(configs, "gl", "vk", "mtl")
526cb93a386Sopenharmony_ci			args = append(args, "--skpViewportSize", "2048")
527cb93a386Sopenharmony_ci		}
528cb93a386Sopenharmony_ci		if b.extraConfig("DDL3") {
529cb93a386Sopenharmony_ci			// This bot generates the real ddl images for the large skps and the gms
530cb93a386Sopenharmony_ci			configs = suffix(filter(configs, "gl", "vk", "mtl"), "ddl")
531cb93a386Sopenharmony_ci			args = append(args, "--skpViewportSize", "2048")
532cb93a386Sopenharmony_ci			args = append(args, "--gpuThreads", "0")
533cb93a386Sopenharmony_ci		}
534cb93a386Sopenharmony_ci		if b.extraConfig("OOPRDDL") {
535cb93a386Sopenharmony_ci			// This bot generates the real oopr/DDL images for the large skps and the GMs
536cb93a386Sopenharmony_ci			configs = suffix(filter(configs, "gl", "vk", "mtl"), "ooprddl")
537cb93a386Sopenharmony_ci			args = append(args, "--skpViewportSize", "2048")
538cb93a386Sopenharmony_ci			args = append(args, "--gpuThreads", "0")
539cb93a386Sopenharmony_ci		}
540cb93a386Sopenharmony_ci	}
541cb93a386Sopenharmony_ci
542cb93a386Sopenharmony_ci	// Sharding.
543cb93a386Sopenharmony_ci	tf := b.parts["test_filter"]
544cb93a386Sopenharmony_ci	if tf != "" && tf != "All" {
545cb93a386Sopenharmony_ci		// Expected format: shard_XX_YY
546cb93a386Sopenharmony_ci		split := strings.Split(tf, "_")
547cb93a386Sopenharmony_ci		if len(split) == 3 {
548cb93a386Sopenharmony_ci			args = append(args, "--shard", split[1])
549cb93a386Sopenharmony_ci			args = append(args, "--shards", split[2])
550cb93a386Sopenharmony_ci		} else {
551cb93a386Sopenharmony_ci			glog.Fatalf("Invalid task name - bad shards: %s", tf)
552cb93a386Sopenharmony_ci		}
553cb93a386Sopenharmony_ci	}
554cb93a386Sopenharmony_ci
555cb93a386Sopenharmony_ci	args = append(args, "--config")
556cb93a386Sopenharmony_ci	args = append(args, configs...)
557cb93a386Sopenharmony_ci
558cb93a386Sopenharmony_ci	removeFromArgs := func(arg string) {
559cb93a386Sopenharmony_ci		args = remove(args, arg)
560cb93a386Sopenharmony_ci	}
561cb93a386Sopenharmony_ci
562cb93a386Sopenharmony_ci	// Run tests, gms, and image decoding tests everywhere.
563cb93a386Sopenharmony_ci	args = append(args, "--src", "tests", "gm", "image", "lottie", "colorImage", "svg", "skp")
564cb93a386Sopenharmony_ci	if b.gpu() {
565cb93a386Sopenharmony_ci		// Don't run the "svgparse_*" svgs on GPU.
566cb93a386Sopenharmony_ci		skip("_ svg _ svgparse_")
567cb93a386Sopenharmony_ci	} else if b.Name == "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN" {
568cb93a386Sopenharmony_ci		// Only run the CPU SVGs on 8888.
569cb93a386Sopenharmony_ci		skip("~8888 svg _ _")
570cb93a386Sopenharmony_ci	} else {
571cb93a386Sopenharmony_ci		// On CPU SVGs we only care about parsing. Only run them on the above bot.
572cb93a386Sopenharmony_ci		removeFromArgs("svg")
573cb93a386Sopenharmony_ci	}
574cb93a386Sopenharmony_ci
575cb93a386Sopenharmony_ci	// Eventually I'd like these to pass, but for now just skip 'em.
576cb93a386Sopenharmony_ci	if b.extraConfig("SK_FORCE_RASTER_PIPELINE_BLITTER") {
577cb93a386Sopenharmony_ci		removeFromArgs("tests")
578cb93a386Sopenharmony_ci	}
579cb93a386Sopenharmony_ci
580cb93a386Sopenharmony_ci	if b.extraConfig("NativeFonts") { // images won't exercise native font integration :)
581cb93a386Sopenharmony_ci		removeFromArgs("image")
582cb93a386Sopenharmony_ci		removeFromArgs("colorImage")
583cb93a386Sopenharmony_ci	}
584cb93a386Sopenharmony_ci
585cb93a386Sopenharmony_ci	if b.matchExtraConfig("Graphite") {
586cb93a386Sopenharmony_ci		// The Graphite bots run the skps, gms and tests
587cb93a386Sopenharmony_ci		removeFromArgs("image")
588cb93a386Sopenharmony_ci		removeFromArgs("colorImage")
589cb93a386Sopenharmony_ci		removeFromArgs("svg")
590cb93a386Sopenharmony_ci	} else if b.matchExtraConfig("DDL", "PDF") {
591cb93a386Sopenharmony_ci		// The DDL and PDF bots just render the large skps and the gms
592cb93a386Sopenharmony_ci		removeFromArgs("tests")
593cb93a386Sopenharmony_ci		removeFromArgs("image")
594cb93a386Sopenharmony_ci		removeFromArgs("colorImage")
595cb93a386Sopenharmony_ci		removeFromArgs("svg")
596cb93a386Sopenharmony_ci	} else {
597cb93a386Sopenharmony_ci		// No other bots render the .skps.
598cb93a386Sopenharmony_ci		removeFromArgs("skp")
599cb93a386Sopenharmony_ci	}
600cb93a386Sopenharmony_ci
601cb93a386Sopenharmony_ci	if b.extraConfig("Lottie") {
602cb93a386Sopenharmony_ci		// Only run the lotties on Lottie bots.
603cb93a386Sopenharmony_ci		removeFromArgs("tests")
604cb93a386Sopenharmony_ci		removeFromArgs("gm")
605cb93a386Sopenharmony_ci		removeFromArgs("image")
606cb93a386Sopenharmony_ci		removeFromArgs("colorImage")
607cb93a386Sopenharmony_ci		removeFromArgs("svg")
608cb93a386Sopenharmony_ci		removeFromArgs("skp")
609cb93a386Sopenharmony_ci	} else {
610cb93a386Sopenharmony_ci		removeFromArgs("lottie")
611cb93a386Sopenharmony_ci	}
612cb93a386Sopenharmony_ci
613cb93a386Sopenharmony_ci	if b.extraConfig("TSAN") {
614cb93a386Sopenharmony_ci		// skbug.com/10848
615cb93a386Sopenharmony_ci		removeFromArgs("svg")
616cb93a386Sopenharmony_ci	}
617cb93a386Sopenharmony_ci
618cb93a386Sopenharmony_ci	// TODO: ???
619cb93a386Sopenharmony_ci	skip("f16 _ _ dstreadshuffle")
620cb93a386Sopenharmony_ci	skip("srgb-gl image _ _")
621cb93a386Sopenharmony_ci	skip("srgb-gles image _ _")
622cb93a386Sopenharmony_ci
623cb93a386Sopenharmony_ci	// --src image --config g8 means "decode into Gray8", which isn't supported.
624cb93a386Sopenharmony_ci	skip("g8 image _ _")
625cb93a386Sopenharmony_ci	skip("g8 colorImage _ _")
626cb93a386Sopenharmony_ci
627cb93a386Sopenharmony_ci	if b.extraConfig("Valgrind") {
628cb93a386Sopenharmony_ci		// These take 18+ hours to run.
629cb93a386Sopenharmony_ci		skip("pdf gm _ fontmgr_iter")
630cb93a386Sopenharmony_ci		skip("pdf _ _ PANO_20121023_214540.jpg")
631cb93a386Sopenharmony_ci		skip("pdf skp _ worldjournal")
632cb93a386Sopenharmony_ci		skip("pdf skp _ desk_baidu.skp")
633cb93a386Sopenharmony_ci		skip("pdf skp _ desk_wikipedia.skp")
634cb93a386Sopenharmony_ci		skip("_ svg _ _")
635cb93a386Sopenharmony_ci		// skbug.com/9171 and 8847
636cb93a386Sopenharmony_ci		skip("_ test _ InitialTextureClear")
637cb93a386Sopenharmony_ci	}
638cb93a386Sopenharmony_ci
639cb93a386Sopenharmony_ci	if b.model("Pixel3") {
640cb93a386Sopenharmony_ci		// skbug.com/10546
641cb93a386Sopenharmony_ci		skip("vkddl gm _ compressed_textures_nmof")
642cb93a386Sopenharmony_ci		skip("vkddl gm _ compressed_textures_npot")
643cb93a386Sopenharmony_ci		skip("vkddl gm _ compressed_textures")
644cb93a386Sopenharmony_ci	}
645cb93a386Sopenharmony_ci
646cb93a386Sopenharmony_ci	if b.model("TecnoSpark3Pro", "Wembley") {
647cb93a386Sopenharmony_ci		// skbug.com/9421
648cb93a386Sopenharmony_ci		skip("_ test _ InitialTextureClear")
649cb93a386Sopenharmony_ci	}
650cb93a386Sopenharmony_ci
651cb93a386Sopenharmony_ci	if b.model("Wembley") {
652cb93a386Sopenharmony_ci		// These tests run forever on the Wembley.
653cb93a386Sopenharmony_ci		skip("_ gm _ async_rescale_and_read")
654cb93a386Sopenharmony_ci	}
655cb93a386Sopenharmony_ci
656cb93a386Sopenharmony_ci	if b.os("iOS") {
657cb93a386Sopenharmony_ci		skip(glPrefix + " skp _ _")
658cb93a386Sopenharmony_ci	}
659cb93a386Sopenharmony_ci
660cb93a386Sopenharmony_ci	if b.matchOs("Mac", "iOS") {
661cb93a386Sopenharmony_ci		// CG fails on questionable bmps
662cb93a386Sopenharmony_ci		skip("_ image gen_platf rgba32abf.bmp")
663cb93a386Sopenharmony_ci		skip("_ image gen_platf rgb24prof.bmp")
664cb93a386Sopenharmony_ci		skip("_ image gen_platf rgb24lprof.bmp")
665cb93a386Sopenharmony_ci		skip("_ image gen_platf 8bpp-pixeldata-cropped.bmp")
666cb93a386Sopenharmony_ci		skip("_ image gen_platf 4bpp-pixeldata-cropped.bmp")
667cb93a386Sopenharmony_ci		skip("_ image gen_platf 32bpp-pixeldata-cropped.bmp")
668cb93a386Sopenharmony_ci		skip("_ image gen_platf 24bpp-pixeldata-cropped.bmp")
669cb93a386Sopenharmony_ci
670cb93a386Sopenharmony_ci		// CG has unpredictable behavior on this questionable gif
671cb93a386Sopenharmony_ci		// It's probably using uninitialized memory
672cb93a386Sopenharmony_ci		skip("_ image gen_platf frame_larger_than_image.gif")
673cb93a386Sopenharmony_ci
674cb93a386Sopenharmony_ci		// CG has unpredictable behavior on incomplete pngs
675cb93a386Sopenharmony_ci		// skbug.com/5774
676cb93a386Sopenharmony_ci		skip("_ image gen_platf inc0.png")
677cb93a386Sopenharmony_ci		skip("_ image gen_platf inc1.png")
678cb93a386Sopenharmony_ci		skip("_ image gen_platf inc2.png")
679cb93a386Sopenharmony_ci		skip("_ image gen_platf inc3.png")
680cb93a386Sopenharmony_ci		skip("_ image gen_platf inc4.png")
681cb93a386Sopenharmony_ci		skip("_ image gen_platf inc5.png")
682cb93a386Sopenharmony_ci		skip("_ image gen_platf inc6.png")
683cb93a386Sopenharmony_ci		skip("_ image gen_platf inc7.png")
684cb93a386Sopenharmony_ci		skip("_ image gen_platf inc8.png")
685cb93a386Sopenharmony_ci		skip("_ image gen_platf inc9.png")
686cb93a386Sopenharmony_ci		skip("_ image gen_platf inc10.png")
687cb93a386Sopenharmony_ci		skip("_ image gen_platf inc11.png")
688cb93a386Sopenharmony_ci		skip("_ image gen_platf inc12.png")
689cb93a386Sopenharmony_ci		skip("_ image gen_platf inc13.png")
690cb93a386Sopenharmony_ci		skip("_ image gen_platf inc14.png")
691cb93a386Sopenharmony_ci		skip("_ image gen_platf incInterlaced.png")
692cb93a386Sopenharmony_ci
693cb93a386Sopenharmony_ci		// These images fail after Mac 10.13.1 upgrade.
694cb93a386Sopenharmony_ci		skip("_ image gen_platf incInterlaced.gif")
695cb93a386Sopenharmony_ci		skip("_ image gen_platf inc1.gif")
696cb93a386Sopenharmony_ci		skip("_ image gen_platf inc0.gif")
697cb93a386Sopenharmony_ci		skip("_ image gen_platf butterfly.gif")
698cb93a386Sopenharmony_ci	}
699cb93a386Sopenharmony_ci
700cb93a386Sopenharmony_ci	// WIC fails on questionable bmps
701cb93a386Sopenharmony_ci	if b.matchOs("Win") {
702cb93a386Sopenharmony_ci		skip("_ image gen_platf pal8os2v2.bmp")
703cb93a386Sopenharmony_ci		skip("_ image gen_platf pal8os2v2-16.bmp")
704cb93a386Sopenharmony_ci		skip("_ image gen_platf rgba32abf.bmp")
705cb93a386Sopenharmony_ci		skip("_ image gen_platf rgb24prof.bmp")
706cb93a386Sopenharmony_ci		skip("_ image gen_platf rgb24lprof.bmp")
707cb93a386Sopenharmony_ci		skip("_ image gen_platf 8bpp-pixeldata-cropped.bmp")
708cb93a386Sopenharmony_ci		skip("_ image gen_platf 4bpp-pixeldata-cropped.bmp")
709cb93a386Sopenharmony_ci		skip("_ image gen_platf 32bpp-pixeldata-cropped.bmp")
710cb93a386Sopenharmony_ci		skip("_ image gen_platf 24bpp-pixeldata-cropped.bmp")
711cb93a386Sopenharmony_ci		if b.arch("x86_64") && b.cpu() {
712cb93a386Sopenharmony_ci			// This GM triggers a SkSmallAllocator assert.
713cb93a386Sopenharmony_ci			skip("_ gm _ composeshader_bitmap")
714cb93a386Sopenharmony_ci		}
715cb93a386Sopenharmony_ci	}
716cb93a386Sopenharmony_ci
717cb93a386Sopenharmony_ci	if b.matchOs("Win", "Mac") {
718cb93a386Sopenharmony_ci		// WIC and CG fail on arithmetic jpegs
719cb93a386Sopenharmony_ci		skip("_ image gen_platf testimgari.jpg")
720cb93a386Sopenharmony_ci		// More questionable bmps that fail on Mac, too. skbug.com/6984
721cb93a386Sopenharmony_ci		skip("_ image gen_platf rle8-height-negative.bmp")
722cb93a386Sopenharmony_ci		skip("_ image gen_platf rle4-height-negative.bmp")
723cb93a386Sopenharmony_ci	}
724cb93a386Sopenharmony_ci
725cb93a386Sopenharmony_ci	// These PNGs have CRC errors. The platform generators seem to draw
726cb93a386Sopenharmony_ci	// uninitialized memory without reporting an error, so skip them to
727cb93a386Sopenharmony_ci	// avoid lots of images on Gold.
728cb93a386Sopenharmony_ci	skip("_ image gen_platf error")
729cb93a386Sopenharmony_ci
730cb93a386Sopenharmony_ci	if b.os("Android", "iOS") {
731cb93a386Sopenharmony_ci		// This test crashes the N9 (perhaps because of large malloc/frees). It also
732cb93a386Sopenharmony_ci		// is fairly slow and not platform-specific. So we just disable it on all of
733cb93a386Sopenharmony_ci		// Android and iOS. skia:5438
734cb93a386Sopenharmony_ci		skip("_ test _ GrStyledShape")
735cb93a386Sopenharmony_ci	}
736cb93a386Sopenharmony_ci
737cb93a386Sopenharmony_ci	if internalHardwareLabel == "5" {
738cb93a386Sopenharmony_ci		// http://b/118312149#comment9
739cb93a386Sopenharmony_ci		skip("_ test _ SRGBReadWritePixels")
740cb93a386Sopenharmony_ci	}
741cb93a386Sopenharmony_ci
742cb93a386Sopenharmony_ci	// skia:4095
743cb93a386Sopenharmony_ci	badSerializeGMs := []string{
744cb93a386Sopenharmony_ci		"strict_constraint_batch_no_red_allowed", // https://crbug.com/skia/10278
745cb93a386Sopenharmony_ci		"strict_constraint_no_red_allowed",       // https://crbug.com/skia/10278
746cb93a386Sopenharmony_ci		"fast_constraint_red_is_allowed",         // https://crbug.com/skia/10278
747cb93a386Sopenharmony_ci		"c_gms",
748cb93a386Sopenharmony_ci		"colortype",
749cb93a386Sopenharmony_ci		"colortype_xfermodes",
750cb93a386Sopenharmony_ci		"drawfilter",
751cb93a386Sopenharmony_ci		"fontmgr_bounds_0.75_0",
752cb93a386Sopenharmony_ci		"fontmgr_bounds_1_-0.25",
753cb93a386Sopenharmony_ci		"fontmgr_bounds",
754cb93a386Sopenharmony_ci		"fontmgr_match",
755cb93a386Sopenharmony_ci		"fontmgr_iter",
756cb93a386Sopenharmony_ci		"imagemasksubset",
757cb93a386Sopenharmony_ci		"wacky_yuv_formats_domain",
758cb93a386Sopenharmony_ci		"imagemakewithfilter",
759cb93a386Sopenharmony_ci		"imagemakewithfilter_crop",
760cb93a386Sopenharmony_ci		"imagemakewithfilter_crop_ref",
761cb93a386Sopenharmony_ci		"imagemakewithfilter_ref",
762cb93a386Sopenharmony_ci	}
763cb93a386Sopenharmony_ci
764cb93a386Sopenharmony_ci	// skia:5589
765cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs,
766cb93a386Sopenharmony_ci		"bitmapfilters",
767cb93a386Sopenharmony_ci		"bitmapshaders",
768cb93a386Sopenharmony_ci		"convex_poly_clip",
769cb93a386Sopenharmony_ci		"extractalpha",
770cb93a386Sopenharmony_ci		"filterbitmap_checkerboard_32_32_g8",
771cb93a386Sopenharmony_ci		"filterbitmap_image_mandrill_64",
772cb93a386Sopenharmony_ci		"shadows",
773cb93a386Sopenharmony_ci		"simpleaaclip_aaclip",
774cb93a386Sopenharmony_ci	)
775cb93a386Sopenharmony_ci
776cb93a386Sopenharmony_ci	// skia:5595
777cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs,
778cb93a386Sopenharmony_ci		"composeshader_bitmap",
779cb93a386Sopenharmony_ci		"scaled_tilemodes_npot",
780cb93a386Sopenharmony_ci		"scaled_tilemodes",
781cb93a386Sopenharmony_ci	)
782cb93a386Sopenharmony_ci
783cb93a386Sopenharmony_ci	// skia:5778
784cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "typefacerendering_pfaMac")
785cb93a386Sopenharmony_ci	// skia:5942
786cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "parsedpaths")
787cb93a386Sopenharmony_ci
788cb93a386Sopenharmony_ci	// these use a custom image generator which doesn't serialize
789cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "ImageGeneratorExternal_rect")
790cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "ImageGeneratorExternal_shader")
791cb93a386Sopenharmony_ci
792cb93a386Sopenharmony_ci	// skia:6189
793cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "shadow_utils")
794cb93a386Sopenharmony_ci
795cb93a386Sopenharmony_ci	// skia:7938
796cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "persp_images")
797cb93a386Sopenharmony_ci
798cb93a386Sopenharmony_ci	// Not expected to round trip encoding/decoding.
799cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "all_bitmap_configs")
800cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "makecolorspace")
801cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "readpixels")
802cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "draw_image_set_rect_to_rect")
803cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "draw_image_set_alpha_only")
804cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "compositor_quads_shader")
805cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "wacky_yuv_formats_qtr")
806cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "runtime_effect_image")
807cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "ctmpatheffect")
808cb93a386Sopenharmony_ci
809cb93a386Sopenharmony_ci	// This GM forces a path to be convex. That property doesn't survive
810cb93a386Sopenharmony_ci	// serialization.
811cb93a386Sopenharmony_ci	badSerializeGMs = append(badSerializeGMs, "analytic_antialias_convex")
812cb93a386Sopenharmony_ci
813cb93a386Sopenharmony_ci	for _, test := range badSerializeGMs {
814cb93a386Sopenharmony_ci		skip("serialize-8888", "gm", "_", test)
815cb93a386Sopenharmony_ci	}
816cb93a386Sopenharmony_ci
817cb93a386Sopenharmony_ci	// We skip these to avoid out-of-memory failures.
818cb93a386Sopenharmony_ci	if b.matchOs("Win", "Android") {
819cb93a386Sopenharmony_ci		for _, test := range []string{"verylargebitmap", "verylarge_picture_image"} {
820cb93a386Sopenharmony_ci			skip("serialize-8888", "gm", "_", test)
821cb93a386Sopenharmony_ci		}
822cb93a386Sopenharmony_ci	}
823cb93a386Sopenharmony_ci	if b.model("iPhone6") {
824cb93a386Sopenharmony_ci		skip("_", "gm", "_", "verylargebitmap")
825cb93a386Sopenharmony_ci		skip("_", "gm", "_", "verylarge_picture_image")
826cb93a386Sopenharmony_ci		skip("_", "svg", "_", "A_large_blank_world_map_with_oceans_marked_in_blue.svg")
827cb93a386Sopenharmony_ci		skip("_", "tests", "_", "ImageFilterBlurLargeImage_Gpu")
828cb93a386Sopenharmony_ci	}
829cb93a386Sopenharmony_ci	if b.matchOs("Mac") && b.cpu() {
830cb93a386Sopenharmony_ci		// skia:6992
831cb93a386Sopenharmony_ci		skip("pic-8888", "gm", "_", "encode-platform")
832cb93a386Sopenharmony_ci		skip("serialize-8888", "gm", "_", "encode-platform")
833cb93a386Sopenharmony_ci	}
834cb93a386Sopenharmony_ci
835cb93a386Sopenharmony_ci	// skia:4769
836cb93a386Sopenharmony_ci	skip("pic-8888", "gm", "_", "drawfilter")
837cb93a386Sopenharmony_ci
838cb93a386Sopenharmony_ci	// skia:4703
839cb93a386Sopenharmony_ci	for _, test := range []string{"image-cacherator-from-picture",
840cb93a386Sopenharmony_ci		"image-cacherator-from-raster",
841cb93a386Sopenharmony_ci		"image-cacherator-from-ctable"} {
842cb93a386Sopenharmony_ci		skip("pic-8888", "gm", "_", test)
843cb93a386Sopenharmony_ci		skip("serialize-8888", "gm", "_", test)
844cb93a386Sopenharmony_ci	}
845cb93a386Sopenharmony_ci
846cb93a386Sopenharmony_ci	// GM that requires raster-backed canvas
847cb93a386Sopenharmony_ci	for _, test := range []string{"complexclip4_bw", "complexclip4_aa", "p3",
848cb93a386Sopenharmony_ci		"async_rescale_and_read_text_up_large",
849cb93a386Sopenharmony_ci		"async_rescale_and_read_text_up",
850cb93a386Sopenharmony_ci		"async_rescale_and_read_text_down",
851cb93a386Sopenharmony_ci		"async_rescale_and_read_dog_up",
852cb93a386Sopenharmony_ci		"async_rescale_and_read_dog_down",
853cb93a386Sopenharmony_ci		"async_rescale_and_read_rose",
854cb93a386Sopenharmony_ci		"async_rescale_and_read_no_bleed",
855cb93a386Sopenharmony_ci		"async_rescale_and_read_alpha_type"} {
856cb93a386Sopenharmony_ci		skip("pic-8888", "gm", "_", test)
857cb93a386Sopenharmony_ci		skip("serialize-8888", "gm", "_", test)
858cb93a386Sopenharmony_ci
859cb93a386Sopenharmony_ci		// GM requires canvas->makeSurface() to return a valid surface.
860cb93a386Sopenharmony_ci		// TODO(borenet): These should be just outside of this block but are
861cb93a386Sopenharmony_ci		// left here to match the recipe which has an indentation bug.
862cb93a386Sopenharmony_ci		skip("pic-8888", "gm", "_", "blurrect_compare")
863cb93a386Sopenharmony_ci		skip("serialize-8888", "gm", "_", "blurrect_compare")
864cb93a386Sopenharmony_ci	}
865cb93a386Sopenharmony_ci
866cb93a386Sopenharmony_ci	// Extensions for RAW images
867cb93a386Sopenharmony_ci	r := []string{
868cb93a386Sopenharmony_ci		"arw", "cr2", "dng", "nef", "nrw", "orf", "raf", "rw2", "pef", "srw",
869cb93a386Sopenharmony_ci		"ARW", "CR2", "DNG", "NEF", "NRW", "ORF", "RAF", "RW2", "PEF", "SRW",
870cb93a386Sopenharmony_ci	}
871cb93a386Sopenharmony_ci
872cb93a386Sopenharmony_ci	// skbug.com/4888
873cb93a386Sopenharmony_ci	// Skip RAW images (and a few large PNGs) on GPU bots
874cb93a386Sopenharmony_ci	// until we can resolve failures.
875cb93a386Sopenharmony_ci	if b.gpu() {
876cb93a386Sopenharmony_ci		skip("_ image _ interlaced1.png")
877cb93a386Sopenharmony_ci		skip("_ image _ interlaced2.png")
878cb93a386Sopenharmony_ci		skip("_ image _ interlaced3.png")
879cb93a386Sopenharmony_ci		for _, rawExt := range r {
880cb93a386Sopenharmony_ci			skip(fmt.Sprintf("_ image _ .%s", rawExt))
881cb93a386Sopenharmony_ci		}
882cb93a386Sopenharmony_ci	}
883cb93a386Sopenharmony_ci
884cb93a386Sopenharmony_ci	// Skip memory intensive tests on 32-bit bots.
885cb93a386Sopenharmony_ci	if b.os("Win8") && b.arch("x86") {
886cb93a386Sopenharmony_ci		skip("_ image f16 _")
887cb93a386Sopenharmony_ci		skip("_ image _ abnormal.wbmp")
888cb93a386Sopenharmony_ci		skip("_ image _ interlaced1.png")
889cb93a386Sopenharmony_ci		skip("_ image _ interlaced2.png")
890cb93a386Sopenharmony_ci		skip("_ image _ interlaced3.png")
891cb93a386Sopenharmony_ci		for _, rawExt := range r {
892cb93a386Sopenharmony_ci			skip(fmt.Sprintf("_ image _ .%s", rawExt))
893cb93a386Sopenharmony_ci		}
894cb93a386Sopenharmony_ci	}
895cb93a386Sopenharmony_ci
896cb93a386Sopenharmony_ci	if b.model("Nexus5", "Nexus5x") && b.gpu() {
897cb93a386Sopenharmony_ci		// skia:5876
898cb93a386Sopenharmony_ci		skip("_", "gm", "_", "encode-platform")
899cb93a386Sopenharmony_ci	}
900cb93a386Sopenharmony_ci
901cb93a386Sopenharmony_ci	if b.model("AndroidOne") && b.gpu() { // skia:4697, skia:4704, skia:4694, skia:4705, skia:11133
902cb93a386Sopenharmony_ci		skip("_", "gm", "_", "bigblurs")
903cb93a386Sopenharmony_ci		skip("_", "gm", "_", "strict_constraint_no_red_allowed")
904cb93a386Sopenharmony_ci		skip("_", "gm", "_", "fast_constraint_red_is_allowed")
905cb93a386Sopenharmony_ci		skip("_", "gm", "_", "dropshadowimagefilter")
906cb93a386Sopenharmony_ci		skip("_", "gm", "_", "filterfastbounds")
907cb93a386Sopenharmony_ci		skip(glPrefix, "gm", "_", "imageblurtiled")
908cb93a386Sopenharmony_ci		skip("_", "gm", "_", "imagefiltersclipped")
909cb93a386Sopenharmony_ci		skip("_", "gm", "_", "imagefiltersscaled")
910cb93a386Sopenharmony_ci		skip("_", "gm", "_", "imageresizetiled")
911cb93a386Sopenharmony_ci		skip("_", "gm", "_", "matrixconvolution")
912cb93a386Sopenharmony_ci		skip("_", "gm", "_", "strokedlines")
913cb93a386Sopenharmony_ci		skip("_", "gm", "_", "runtime_intrinsics_matrix")
914cb93a386Sopenharmony_ci		if sampleCount > 0 {
915cb93a386Sopenharmony_ci			glMsaaConfig := fmt.Sprintf("%smsaa%d", glPrefix, sampleCount)
916cb93a386Sopenharmony_ci			skip(glMsaaConfig, "gm", "_", "imageblurtiled")
917cb93a386Sopenharmony_ci			skip(glMsaaConfig, "gm", "_", "imagefiltersbase")
918cb93a386Sopenharmony_ci		}
919cb93a386Sopenharmony_ci	}
920cb93a386Sopenharmony_ci
921cb93a386Sopenharmony_ci	if b.matchGpu("Adreno[3456]") { // disable broken tests on Adreno 3/4/5/6xx
922cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLArrayCast_GPU")       // skia:12332
923cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLArrayComparison_GPU") // skia:12332
924cb93a386Sopenharmony_ci	}
925cb93a386Sopenharmony_ci
926cb93a386Sopenharmony_ci	if b.matchGpu("Adreno[345]") && !b.extraConfig("Vulkan") { // disable broken tests on Adreno 3/4/5xx GLSL
927cb93a386Sopenharmony_ci		skip("_", "tests", "_", "DSLFPTest_SwitchStatement")  // skia:11891
928cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLMatrixToVectorCast_GPU") // skia:12192
929cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLStructsInFunctions_GPU") // skia:11929
930cb93a386Sopenharmony_ci	}
931cb93a386Sopenharmony_ci
932cb93a386Sopenharmony_ci	if b.matchGpu("Adreno6") && !b.extraConfig("Vulkan") { // disable broken tests on Adreno 6xx GLSL
933cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLIntrinsicIsInf_GPU") // skia:12377
934cb93a386Sopenharmony_ci	}
935cb93a386Sopenharmony_ci
936cb93a386Sopenharmony_ci	if (b.matchGpu("Adreno3") || b.matchGpu("Mali400")) && !b.extraConfig("Vulkan") {
937cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLMatrices") // skia:12456
938cb93a386Sopenharmony_ci	}
939cb93a386Sopenharmony_ci
940cb93a386Sopenharmony_ci	if b.gpu("IntelIris6100", "IntelHD4400") && b.matchOs("Win") && !b.extraConfig("Vulkan") {
941cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLVectorToMatrixCast_GPU") // skia:12179
942cb93a386Sopenharmony_ci	}
943cb93a386Sopenharmony_ci
944cb93a386Sopenharmony_ci	if b.matchGpu("Intel") && b.matchOs("Win") && !b.extraConfig("Vulkan") {
945cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLReturnsValueOnEveryPathES3_GPU") // skia:12465
946cb93a386Sopenharmony_ci	}
947cb93a386Sopenharmony_ci
948cb93a386Sopenharmony_ci	if (b.extraConfig("Vulkan") && b.isLinux() && b.matchGpu("Intel")) ||
949cb93a386Sopenharmony_ci		(b.extraConfig("ANGLE") && b.matchOs("Win") && b.matchGpu("IntelIris(540|655)")) {
950cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLSwitchDefaultOnly_GPU") // skia:12465
951cb93a386Sopenharmony_ci	}
952cb93a386Sopenharmony_ci
953cb93a386Sopenharmony_ci	if b.gpu("Tegra3") {
954cb93a386Sopenharmony_ci		// Tegra3 fails to compile break stmts inside a for loop (skia:12477)
955cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLSwitch_GPU")
956cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLSwitchDefaultOnly_GPU")
957cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLSwitchWithFallthrough_GPU")
958cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLSwitchWithLoops_GPU")
959cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLLoopFloat_GPU")
960cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLLoopInt_GPU")
961cb93a386Sopenharmony_ci	}
962cb93a386Sopenharmony_ci
963cb93a386Sopenharmony_ci	if !b.extraConfig("Vulkan") &&
964cb93a386Sopenharmony_ci		(b.gpu("QuadroP400") || b.gpu("GTX660") || b.gpu("GTX960") || b.gpu("Tegra3")) {
965cb93a386Sopenharmony_ci		// Various Nvidia GPUs crash or generate errors when assembling weird matrices (skia:12443)
966cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLMatrixConstructorsES2_GPU")
967cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLMatrixConstructorsES3_GPU")
968cb93a386Sopenharmony_ci	}
969cb93a386Sopenharmony_ci
970cb93a386Sopenharmony_ci	if !b.extraConfig("Vulkan") && (b.gpu("RadeonR9M470X") || b.gpu("RadeonHD7770")) {
971cb93a386Sopenharmony_ci		// Some AMD GPUs can get the wrong result when assembling non-square matrices (skia:12443)
972cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLMatrixConstructorsES3_GPU")
973cb93a386Sopenharmony_ci	}
974cb93a386Sopenharmony_ci
975cb93a386Sopenharmony_ci	if b.matchGpu("Intel") { // some Intel GPUs don't return zero for the derivative of a uniform
976cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLIntrinsicDFdy_GPU")
977cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLIntrinsicDFdx_GPU")
978cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLIntrinsicFwidth_GPU")
979cb93a386Sopenharmony_ci	}
980cb93a386Sopenharmony_ci
981cb93a386Sopenharmony_ci	if b.matchOs("Mac") && b.matchGpu("Intel(Iris5100|HD6000)") {
982cb93a386Sopenharmony_ci		skip("_", "tests", "_", "SkSLLoopFloat_GPU") // skia:12426
983cb93a386Sopenharmony_ci	}
984cb93a386Sopenharmony_ci
985cb93a386Sopenharmony_ci	match := []string{}
986cb93a386Sopenharmony_ci	if b.extraConfig("Valgrind") { // skia:3021
987cb93a386Sopenharmony_ci		match = append(match, "~Threaded")
988cb93a386Sopenharmony_ci	}
989cb93a386Sopenharmony_ci
990cb93a386Sopenharmony_ci	if b.extraConfig("Valgrind") && b.extraConfig("PreAbandonGpuContext") {
991cb93a386Sopenharmony_ci		// skia:6575
992cb93a386Sopenharmony_ci		match = append(match, "~multipicturedraw_")
993cb93a386Sopenharmony_ci	}
994cb93a386Sopenharmony_ci
995cb93a386Sopenharmony_ci	if b.model("AndroidOne") {
996cb93a386Sopenharmony_ci		match = append(match, "~WritePixels")                             // skia:4711
997cb93a386Sopenharmony_ci		match = append(match, "~PremulAlphaRoundTrip_Gpu")                // skia:7501
998cb93a386Sopenharmony_ci		match = append(match, "~ReimportImageTextureWithMipLevels")       // skia:8090
999cb93a386Sopenharmony_ci		match = append(match, "~MorphologyFilterRadiusWithMirrorCTM_Gpu") // skia:10383
1000cb93a386Sopenharmony_ci	}
1001cb93a386Sopenharmony_ci
1002cb93a386Sopenharmony_ci	if b.extraConfig("MSAN") {
1003cb93a386Sopenharmony_ci		match = append(match, "~Once", "~Shared") // Not sure what's up with these tests.
1004cb93a386Sopenharmony_ci	}
1005cb93a386Sopenharmony_ci
1006cb93a386Sopenharmony_ci	// By default, we test with GPU threading enabled, unless specifically
1007cb93a386Sopenharmony_ci	// disabled.
1008cb93a386Sopenharmony_ci	if b.extraConfig("NoGPUThreads") {
1009cb93a386Sopenharmony_ci		args = append(args, "--gpuThreads", "0")
1010cb93a386Sopenharmony_ci	}
1011cb93a386Sopenharmony_ci
1012cb93a386Sopenharmony_ci	if b.extraConfig("Vulkan") && b.gpu("Adreno530") {
1013cb93a386Sopenharmony_ci		// skia:5777
1014cb93a386Sopenharmony_ci		match = append(match, "~CopySurface")
1015cb93a386Sopenharmony_ci	}
1016cb93a386Sopenharmony_ci
1017cb93a386Sopenharmony_ci	if b.extraConfig("Vulkan") && b.matchGpu("Adreno") {
1018cb93a386Sopenharmony_ci		// skia:7663
1019cb93a386Sopenharmony_ci		match = append(match, "~WritePixelsNonTextureMSAA_Gpu")
1020cb93a386Sopenharmony_ci		match = append(match, "~WritePixelsMSAA_Gpu")
1021cb93a386Sopenharmony_ci	}
1022cb93a386Sopenharmony_ci
1023cb93a386Sopenharmony_ci	if b.extraConfig("Vulkan") && b.isLinux() && b.gpu("IntelIris640") {
1024cb93a386Sopenharmony_ci		match = append(match, "~VkHeapTests") // skia:6245
1025cb93a386Sopenharmony_ci	}
1026cb93a386Sopenharmony_ci
1027cb93a386Sopenharmony_ci	if b.isLinux() && b.gpu("IntelIris640") {
1028cb93a386Sopenharmony_ci		match = append(match, "~Programs") // skia:7849
1029cb93a386Sopenharmony_ci	}
1030cb93a386Sopenharmony_ci
1031cb93a386Sopenharmony_ci	if b.model("TecnoSpark3Pro", "Wembley") {
1032cb93a386Sopenharmony_ci		// skia:9814
1033cb93a386Sopenharmony_ci		match = append(match, "~Programs")
1034cb93a386Sopenharmony_ci		match = append(match, "~ProcessorCloneTest")
1035cb93a386Sopenharmony_ci		match = append(match, "~ProcessorOptimizationValidationTest")
1036cb93a386Sopenharmony_ci	}
1037cb93a386Sopenharmony_ci
1038cb93a386Sopenharmony_ci	if b.gpu("IntelIris640", "IntelHD615", "IntelHDGraphics615") {
1039cb93a386Sopenharmony_ci		match = append(match, "~^SRGBReadWritePixels$") // skia:9225
1040cb93a386Sopenharmony_ci	}
1041cb93a386Sopenharmony_ci
1042cb93a386Sopenharmony_ci	if b.extraConfig("Vulkan") && b.isLinux() && b.gpu("IntelHD405") {
1043cb93a386Sopenharmony_ci		// skia:7322
1044cb93a386Sopenharmony_ci		skip("vk", "gm", "_", "skbug_257")
1045cb93a386Sopenharmony_ci		skip("vk", "gm", "_", "filltypespersp")
1046cb93a386Sopenharmony_ci		match = append(match, "~^ClearOp$")
1047cb93a386Sopenharmony_ci		match = append(match, "~^CopySurface$")
1048cb93a386Sopenharmony_ci		match = append(match, "~^ImageNewShader_GPU$")
1049cb93a386Sopenharmony_ci		match = append(match, "~^InitialTextureClear$")
1050cb93a386Sopenharmony_ci		match = append(match, "~^PinnedImageTest$")
1051cb93a386Sopenharmony_ci		match = append(match, "~^ReadPixels_Gpu$")
1052cb93a386Sopenharmony_ci		match = append(match, "~^ReadPixels_Texture$")
1053cb93a386Sopenharmony_ci		match = append(match, "~^SRGBReadWritePixels$")
1054cb93a386Sopenharmony_ci		match = append(match, "~^VkUploadPixelsTests$")
1055cb93a386Sopenharmony_ci		match = append(match, "~^WritePixelsNonTexture_Gpu$")
1056cb93a386Sopenharmony_ci		match = append(match, "~^WritePixelsNonTextureMSAA_Gpu$")
1057cb93a386Sopenharmony_ci		match = append(match, "~^WritePixels_Gpu$")
1058cb93a386Sopenharmony_ci		match = append(match, "~^WritePixelsMSAA_Gpu$")
1059cb93a386Sopenharmony_ci	}
1060cb93a386Sopenharmony_ci
1061cb93a386Sopenharmony_ci	if b.extraConfig("Vulkan") && b.gpu("GTX660") && b.matchOs("Win") {
1062cb93a386Sopenharmony_ci		// skbug.com/8047
1063cb93a386Sopenharmony_ci		match = append(match, "~FloatingPointTextureTest$")
1064cb93a386Sopenharmony_ci	}
1065cb93a386Sopenharmony_ci
1066cb93a386Sopenharmony_ci	if b.extraConfig("Metal") && b.gpu("RadeonHD8870M") && b.matchOs("Mac") {
1067cb93a386Sopenharmony_ci		// skia:9255
1068cb93a386Sopenharmony_ci		match = append(match, "~WritePixelsNonTextureMSAA_Gpu")
1069cb93a386Sopenharmony_ci		// skbug.com/11366
1070cb93a386Sopenharmony_ci		match = append(match, "~SurfacePartialDraw_Gpu")
1071cb93a386Sopenharmony_ci	}
1072cb93a386Sopenharmony_ci
1073cb93a386Sopenharmony_ci	if b.extraConfig("Metal") && b.gpu("PowerVRGX6450") && b.matchOs("iOS") {
1074cb93a386Sopenharmony_ci		// skbug.com/11885
1075cb93a386Sopenharmony_ci		match = append(match, "~flight_animated_image")
1076cb93a386Sopenharmony_ci	}
1077cb93a386Sopenharmony_ci
1078cb93a386Sopenharmony_ci	if b.extraConfig("ANGLE") {
1079cb93a386Sopenharmony_ci		// skia:7835
1080cb93a386Sopenharmony_ci		match = append(match, "~BlurMaskBiggerThanDest")
1081cb93a386Sopenharmony_ci	}
1082cb93a386Sopenharmony_ci
1083cb93a386Sopenharmony_ci	if b.gpu("IntelIris6100") && b.extraConfig("ANGLE") && !b.debug() {
1084cb93a386Sopenharmony_ci		// skia:7376
1085cb93a386Sopenharmony_ci		match = append(match, "~^ProcessorOptimizationValidationTest$")
1086cb93a386Sopenharmony_ci	}
1087cb93a386Sopenharmony_ci
1088cb93a386Sopenharmony_ci	if b.gpu("IntelIris6100", "IntelHD4400") && b.extraConfig("ANGLE") {
1089cb93a386Sopenharmony_ci		// skia:6857
1090cb93a386Sopenharmony_ci		skip("angle_d3d9_es2", "gm", "_", "lighting")
1091cb93a386Sopenharmony_ci	}
1092cb93a386Sopenharmony_ci
1093cb93a386Sopenharmony_ci	if b.gpu("PowerVRGX6250") {
1094cb93a386Sopenharmony_ci		match = append(match, "~gradients_view_perspective_nodither") //skia:6972
1095cb93a386Sopenharmony_ci	}
1096cb93a386Sopenharmony_ci
1097cb93a386Sopenharmony_ci	if b.arch("arm") && b.extraConfig("ASAN") {
1098cb93a386Sopenharmony_ci		// TODO: can we run with env allocator_may_return_null=1 instead?
1099cb93a386Sopenharmony_ci		match = append(match, "~BadImage")
1100cb93a386Sopenharmony_ci	}
1101cb93a386Sopenharmony_ci
1102cb93a386Sopenharmony_ci	if b.matchOs("Mac") && b.gpu("IntelHD6000") {
1103cb93a386Sopenharmony_ci		// skia:7574
1104cb93a386Sopenharmony_ci		match = append(match, "~^ProcessorCloneTest$")
1105cb93a386Sopenharmony_ci		match = append(match, "~^GrMeshTest$")
1106cb93a386Sopenharmony_ci	}
1107cb93a386Sopenharmony_ci
1108cb93a386Sopenharmony_ci	if b.matchOs("Mac") && b.gpu("IntelHD615") {
1109cb93a386Sopenharmony_ci		// skia:7603
1110cb93a386Sopenharmony_ci		match = append(match, "~^GrMeshTest$")
1111cb93a386Sopenharmony_ci	}
1112cb93a386Sopenharmony_ci
1113cb93a386Sopenharmony_ci	if b.extraConfig("Vulkan") && b.model("GalaxyS20") {
1114cb93a386Sopenharmony_ci		// skia:10247
1115cb93a386Sopenharmony_ci		match = append(match, "~VkPrepareForExternalIOQueueTransitionTest")
1116cb93a386Sopenharmony_ci	}
1117cb93a386Sopenharmony_ci
1118cb93a386Sopenharmony_ci	if len(skipped) > 0 {
1119cb93a386Sopenharmony_ci		args = append(args, "--skip")
1120cb93a386Sopenharmony_ci		args = append(args, skipped...)
1121cb93a386Sopenharmony_ci	}
1122cb93a386Sopenharmony_ci
1123cb93a386Sopenharmony_ci	if len(match) > 0 {
1124cb93a386Sopenharmony_ci		args = append(args, "--match")
1125cb93a386Sopenharmony_ci		args = append(args, match...)
1126cb93a386Sopenharmony_ci	}
1127cb93a386Sopenharmony_ci
1128cb93a386Sopenharmony_ci	// These bots run out of memory running RAW codec tests. Do not run them in
1129cb93a386Sopenharmony_ci	// parallel
1130cb93a386Sopenharmony_ci	// TODO(borenet): Previously this was `'Nexus5' in bot or 'Nexus9' in bot`
1131cb93a386Sopenharmony_ci	// which also matched 'Nexus5x'. I added That here to maintain the
1132cb93a386Sopenharmony_ci	// existing behavior, but we should verify that it's needed.
1133cb93a386Sopenharmony_ci	if b.model("Nexus5", "Nexus5x", "Nexus9") {
1134cb93a386Sopenharmony_ci		args = append(args, "--noRAW_threading")
1135cb93a386Sopenharmony_ci	}
1136cb93a386Sopenharmony_ci
1137cb93a386Sopenharmony_ci	if b.extraConfig("FSAA") {
1138cb93a386Sopenharmony_ci		args = append(args, "--analyticAA", "false")
1139cb93a386Sopenharmony_ci	}
1140cb93a386Sopenharmony_ci	if b.extraConfig("FAAA") {
1141cb93a386Sopenharmony_ci		args = append(args, "--forceAnalyticAA")
1142cb93a386Sopenharmony_ci	}
1143cb93a386Sopenharmony_ci
1144cb93a386Sopenharmony_ci	if !b.extraConfig("NativeFonts") {
1145cb93a386Sopenharmony_ci		args = append(args, "--nonativeFonts")
1146cb93a386Sopenharmony_ci	}
1147cb93a386Sopenharmony_ci
1148cb93a386Sopenharmony_ci	if b.extraConfig("GDI") {
1149cb93a386Sopenharmony_ci		args = append(args, "--gdi")
1150cb93a386Sopenharmony_ci	}
1151cb93a386Sopenharmony_ci
1152cb93a386Sopenharmony_ci	// Let's make all bots produce verbose output by default.
1153cb93a386Sopenharmony_ci	args = append(args, "--verbose")
1154cb93a386Sopenharmony_ci
1155cb93a386Sopenharmony_ci	// See skia:2789.
1156cb93a386Sopenharmony_ci	if b.extraConfig("AbandonGpuContext") {
1157cb93a386Sopenharmony_ci		args = append(args, "--abandonGpuContext")
1158cb93a386Sopenharmony_ci	}
1159cb93a386Sopenharmony_ci	if b.extraConfig("PreAbandonGpuContext") {
1160cb93a386Sopenharmony_ci		args = append(args, "--preAbandonGpuContext")
1161cb93a386Sopenharmony_ci	}
1162cb93a386Sopenharmony_ci	if b.extraConfig("ReleaseAndAbandonGpuContext") {
1163cb93a386Sopenharmony_ci		args = append(args, "--releaseAndAbandonGpuContext")
1164cb93a386Sopenharmony_ci	}
1165cb93a386Sopenharmony_ci
1166cb93a386Sopenharmony_ci	// Finalize the DM flags and properties.
1167cb93a386Sopenharmony_ci	b.recipeProp("dm_flags", marshalJson(args))
1168cb93a386Sopenharmony_ci	b.recipeProp("dm_properties", marshalJson(properties))
1169cb93a386Sopenharmony_ci
1170cb93a386Sopenharmony_ci	// Add properties indicating which assets the task should use.
1171cb93a386Sopenharmony_ci	if b.matchExtraConfig("Lottie") {
1172cb93a386Sopenharmony_ci		b.asset("lottie-samples")
1173cb93a386Sopenharmony_ci		b.recipeProp("lotties", "true")
1174cb93a386Sopenharmony_ci	} else {
1175cb93a386Sopenharmony_ci		b.asset("skimage")
1176cb93a386Sopenharmony_ci		b.recipeProp("images", "true")
1177cb93a386Sopenharmony_ci		b.asset("skp")
1178cb93a386Sopenharmony_ci		b.recipeProp("skps", "true")
1179cb93a386Sopenharmony_ci		b.asset("svg")
1180cb93a386Sopenharmony_ci		b.recipeProp("svgs", "true")
1181cb93a386Sopenharmony_ci	}
1182cb93a386Sopenharmony_ci	b.recipeProp("do_upload", fmt.Sprintf("%t", b.doUpload()))
1183cb93a386Sopenharmony_ci	b.recipeProp("resources", "true")
1184cb93a386Sopenharmony_ci}
1185