xref: /aosp_15_r20/external/skia/bazel/device_specific_configs/device_specific_configs.go (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1// Copyright 2023 Google LLC
2//
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5
6package device_specific_configs
7
8import (
9	"fmt"
10	"sort"
11)
12
13// Config represents a Bazel config that communicates information about the device under test.
14//
15// This struct is used to generate file //bazel/devicesrc.
16//
17// Configurations of this kind should not be used to set build time settings, such as the target
18// Bazel platform (e.g. Linux, Android), optimization level (e.g. Debug, Release) or local vs. RBE.
19// For that kind of information, please pass a second --config flag using one of the configurations
20// defined in //bazel/buildrc.
21type Config struct {
22	// Name of the config (the <foo> that gets passed to Bazel via --config=<foo>).
23	Name string
24
25	// Any device-specific key/value pairs to include in Gold and Perf traces produced by GM and
26	// benchmark tests, except for keys "cpu_or_gpu" and "cpu_or_gpu_value". See fields CPU and GPU.
27	Keys map[string]string
28
29	// CPU is the name of the CPU on this device.
30	//
31	// When a GM or benchmark test case is executed, the corresponding test runner will set the
32	// "cpu_or_gpu_value" key of the resulting Gold or Perf trace with the contents of this field
33	// if the test case is CPU-bound, in which case it will also set the "cpu_or_gpu" key to "CPU".
34	CPU string
35
36	// GPU is the name of the GPU on this device.
37	//
38	// This field is the GPU analogous of the CPU field; see its documentation for details.
39	GPU string
40
41	// SwarmingDimensions are the Swarming dimensions that a CI task must exhibit in order to get
42	// scheduled to run on a machine that corresponds with the device under test indicated by the
43	// Bazel config.
44	SwarmingDimensions map[string]string
45}
46
47// Model returns the "model" key in the Keys dictionary.
48func (d Config) Model() string {
49	model, ok := d.Keys["model"]
50	if !ok {
51		// Should never happen. We have a unit test that ensures all configs have this key.
52		panic(fmt.Sprintf("config %q does not contain key \"model\"", d.Name))
53	}
54	return model
55}
56
57// TestRunnerArgs returns the command-line arguments that should be passed to the Bazel test
58// target.
59func (d Config) TestRunnerArgs() []string {
60	args := []string{
61		// Pass the name of the Bazel configuration as an argument. Android tests use this to infer the
62		// model of the device under test. Specifically, adb_test_runner.go will take device-specific
63		// setup and teardown steps based on the model. C++ tests running on the same machine as Bazel
64		// will ignore this flag.
65		"--device-specific-bazel-config",
66		d.Name,
67	}
68
69	// Sort keys for determinism.
70	var keys []string
71	for key := range d.Keys {
72		keys = append(keys, key)
73	}
74	sort.Strings(keys)
75
76	// Add key/value pairs.
77	args = append(args, "--key")
78	for _, key := range keys {
79		args = append(args, key, d.Keys[key])
80	}
81
82	if d.CPU != "" {
83		args = append(args, "--cpuName", d.CPU)
84	}
85
86	if d.GPU != "" {
87		args = append(args, "--gpuName", d.GPU)
88	}
89
90	return args
91}
92
93// Configs contains all known device-specific Bazel configs.
94//
95// The contents of this map are used to generate file //bazel/devicesrc.
96//
97// TODO(lovisolo): Populate field SwarmingDimensions for all configs.
98var Configs = map[string]Config{
99	"AlphaR2": {
100		Name: "AlphaR2",
101		Keys: map[string]string{
102			"arch":  "x86_64",
103			"model": "AlphaR2",
104			"os":    "Win10",
105		},
106		GPU: "RadeonR9M470X",
107	},
108	"AndroidOne": {
109		Name: "AndroidOne",
110		Keys: map[string]string{
111			"arch":  "arm",
112			"model": "AndroidOne",
113			"os":    "Android",
114		},
115		GPU: "Mali400MP2",
116	},
117	"GCE_Debian10_AVX2": {
118		Name: "GCE_Debian10_AVX2",
119		Keys: map[string]string{
120			"arch":  "x86_64",
121			"model": "GCE",
122			"os":    "Debian10",
123		},
124		CPU: "AVX2",
125		GPU: "SwiftShader",
126	},
127	"GCE_Debian10_AVX512": {
128		Name: "GCE_Debian10_AVX512",
129		Keys: map[string]string{
130			"arch":  "x86_64",
131			"model": "GCE",
132			"os":    "Debian10",
133		},
134		CPU: "AVX512",
135		GPU: "SwiftShader",
136	},
137	"GCE_Debian10_Rome": {
138		Name: "GCE_Debian10_Rome",
139		Keys: map[string]string{
140			"arch":  "x86_64",
141			"model": "GCE",
142			"os":    "Debian10",
143		},
144		CPU: "Rome",
145		GPU: "SwiftShader",
146	},
147	"GCE_Win2019_AVX2": {
148		Name: "GCE_Win2019_AVX2",
149		Keys: map[string]string{
150			"arch":  "x86_64",
151			"model": "GCE",
152			"os":    "Win2019",
153		},
154		CPU: "AVX2",
155		GPU: "SwiftShader",
156	},
157	"GCE_Win2019_AVX512": {
158		Name: "GCE_Win2019_AVX512",
159		Keys: map[string]string{
160			"arch":  "x86_64",
161			"model": "GCE",
162			"os":    "Win2019",
163		},
164		CPU: "AVX512",
165		GPU: "SwiftShader",
166	},
167	"GCE_Win2019_Rome": {
168		Name: "GCE_Win2019_Rome",
169		Keys: map[string]string{
170			"arch":  "x86_64",
171			"model": "GCE",
172			"os":    "Win2019",
173		},
174		CPU: "Rome",
175		GPU: "SwiftShader",
176	},
177	"GCE_x86_Debian10_AVX2": {
178		Name: "GCE_x86_Debian10_AVX2",
179		Keys: map[string]string{
180			"arch":  "x86",
181			"model": "GCE",
182			"os":    "Debian10",
183		},
184		CPU: "AVX2",
185		GPU: "SwiftShader",
186	},
187	"GCE_x86_Debian10_AVX512": {
188		Name: "GCE_x86_Debian10_AVX512",
189		Keys: map[string]string{
190			"arch":  "x86",
191			"model": "GCE",
192			"os":    "Debian10",
193		},
194		CPU: "AVX512",
195		GPU: "SwiftShader",
196	},
197	"GCE_x86_Debian10_Rome": {
198		Name: "GCE_x86_Debian10_Rome",
199		Keys: map[string]string{
200			"arch":  "x86",
201			"model": "GCE",
202			"os":    "Debian10",
203		},
204		CPU: "Rome",
205		GPU: "SwiftShader",
206	},
207	"GCE_x86_Win2019_AVX2": {
208		Name: "GCE_x86_Win2019_AVX2",
209		Keys: map[string]string{
210			"arch":  "x86",
211			"model": "GCE",
212			"os":    "Win2019",
213		},
214		CPU: "AVX2",
215		GPU: "SwiftShader",
216	},
217	"GCE_x86_Win2019_AVX512": {
218		Name: "GCE_x86_Win2019_AVX512",
219		Keys: map[string]string{
220			"arch":  "x86",
221			"model": "GCE",
222			"os":    "Win2019",
223		},
224		CPU: "AVX512",
225		GPU: "SwiftShader",
226	},
227	"GCE_x86_Win2019_Rome": {
228		Name: "GCE_x86_Win2019_Rome",
229		Keys: map[string]string{
230			"arch":  "x86",
231			"model": "GCE",
232			"os":    "Win2019",
233		},
234		CPU: "Rome",
235		GPU: "SwiftShader",
236	},
237	"GalaxyS20": {
238		Name: "GalaxyS20",
239		Keys: map[string]string{
240			"arch":  "arm64",
241			"model": "GalaxyS20",
242			"os":    "Android",
243		},
244		GPU: "MaliG77",
245	},
246	"GalaxyS7_G930FD": {
247		Name: "GalaxyS7_G930FD",
248		Keys: map[string]string{
249			"arch":  "arm64",
250			"model": "GalaxyS7_G930FD",
251			"os":    "Android",
252		},
253		GPU: "MaliT880",
254	},
255	"GalaxyS9": {
256		Name: "GalaxyS9",
257		Keys: map[string]string{
258			"arch":  "arm64",
259			"model": "GalaxyS9",
260			"os":    "Android",
261		},
262		GPU: "MaliG72",
263	},
264	"Golo_wasm_Ubuntu18": {
265		Name: "Golo_wasm_Ubuntu18",
266		Keys: map[string]string{
267			"arch":  "wasm",
268			"model": "Golo",
269			"os":    "Ubuntu18",
270		},
271		GPU: "QuadroP400",
272	},
273	"Golo_wasm_Win10": {
274		Name: "Golo_wasm_Win10",
275		Keys: map[string]string{
276			"arch":  "wasm",
277			"model": "Golo",
278			"os":    "Win10",
279		},
280		GPU: "QuadroP400",
281	},
282	"Golo_x86_64_Ubuntu18": {
283		Name: "Golo_x86_64_Ubuntu18",
284		Keys: map[string]string{
285			"arch":  "x86_64",
286			"model": "Golo",
287			"os":    "Ubuntu18",
288		},
289		GPU: "QuadroP400",
290	},
291	"Golo_x86_64_Win10": {
292		Name: "Golo_x86_64_Win10",
293		Keys: map[string]string{
294			"arch":  "x86_64",
295			"model": "Golo",
296			"os":    "Win10",
297		},
298		GPU: "QuadroP400",
299	},
300	"JioNext": {
301		Name: "JioNext",
302		Keys: map[string]string{
303			"arch":  "arm",
304			"model": "JioNext",
305			"os":    "Android",
306		},
307		CPU: "SnapdragonQM215",
308		GPU: "Adreno308",
309	},
310	"Kevin": {
311		Name: "Kevin",
312		Keys: map[string]string{
313			"arch":  "arm",
314			"model": "Kevin",
315			"os":    "ChromeOS",
316		},
317		GPU: "MaliT860",
318	},
319	"MacBook10.1": {
320		Name: "MacBook10.1",
321		Keys: map[string]string{
322			"arch":  "x86_64",
323			"model": "MacBook10.1",
324			"os":    "Mac10.13",
325		},
326		GPU: "IntelHD615",
327	},
328	"MacBookAir7.2": {
329		Name: "MacBookAir7.2",
330		Keys: map[string]string{
331			"arch":  "x86_64",
332			"model": "MacBookAir7.2",
333			"os":    "Mac10.15.1",
334		},
335		GPU: "IntelHD6000",
336	},
337	"MacBookPro11.5_Mac10.13": {
338		Name: "MacBookPro11.5_Mac10.13",
339		Keys: map[string]string{
340			"arch":  "x86_64",
341			"model": "MacBookPro11.5",
342			"os":    "Mac10.13",
343		},
344		CPU: "AVX2",
345		GPU: "RadeonHD8870M",
346	},
347	"MacBookPro11.5_Mac10.15.7": {
348		Name: "MacBookPro11.5_Mac10.15.7",
349		Keys: map[string]string{
350			"arch":  "x86_64",
351			"model": "MacBookPro11.5",
352			"os":    "Mac10.15.7",
353		},
354		CPU: "AVX2",
355		GPU: "RadeonHD8870M",
356	},
357	"MacBookPro16.2": {
358		Name: "MacBookPro16.2",
359		Keys: map[string]string{
360			"arch":  "x86_64",
361			"model": "MacBookPro16.2",
362			"os":    "Mac12",
363		},
364		CPU: "AppleIntel",
365		GPU: "IntelIrisPlus",
366	},
367	"MacMini7.1_Mac10.13": {
368		Name: "MacMini7.1_Mac10.13",
369		Keys: map[string]string{
370			"arch":  "x86_64",
371			"model": "MacMini7.1",
372			"os":    "Mac10.13",
373		},
374		CPU: "AVX2",
375		GPU: "IntelIris5100",
376	},
377	"MacMini7.1_Mac10.14": {
378		Name: "MacMini7.1_Mac10.14",
379		Keys: map[string]string{
380			"arch":  "x86_64",
381			"model": "MacMini7.1",
382			"os":    "Mac10.14",
383		},
384		CPU: "AVX2",
385		GPU: "IntelIris5100",
386	},
387	"MacMini7.1_Mac10.15.7": {
388		Name: "MacMini7.1_Mac10.15.7",
389		Keys: map[string]string{
390			"arch":  "x86_64",
391			"model": "MacMini7.1",
392			"os":    "Mac10.15.7",
393		},
394		CPU: "AVX2",
395		GPU: "IntelIris5100",
396	},
397	"MacMini9.1_Mac11": {
398		Name: "MacMini9.1_Mac11",
399		Keys: map[string]string{
400			"arch":  "arm64",
401			"model": "MacMini9.1",
402			"os":    "Mac11",
403		},
404		CPU: "AppleM1",
405		GPU: "AppleM1",
406	},
407	"MacMini9.1_Mac12": {
408		Name: "MacMini9.1_Mac12",
409		Keys: map[string]string{
410			"arch":  "arm64",
411			"model": "MacMini9.1",
412			"os":    "Mac12",
413		},
414		CPU: "AppleM1",
415		GPU: "AppleM1",
416	},
417	"MacMini9.1_Mac13": {
418		Name: "MacMini9.1_Mac13",
419		Keys: map[string]string{
420			"arch":  "arm64",
421			"model": "MacMini9.1",
422			"os":    "Mac13",
423		},
424		CPU: "AppleM1",
425		GPU: "AppleM1",
426	},
427	"NUC11TZi5_Debian11": {
428		Name: "NUC11TZi5_Debian11",
429		Keys: map[string]string{
430			"arch":  "x86_64",
431			"model": "NUC11TZi5",
432			"os":    "Debian11",
433		},
434		CPU: "AVX2",
435		GPU: "IntelIrisXe",
436	},
437	"NUC11TZi5_Win10": {
438		Name: "NUC11TZi5_Win10",
439		Keys: map[string]string{
440			"arch":  "x86_64",
441			"model": "NUC11TZi5",
442			"os":    "Win10",
443		},
444		CPU: "AVX2",
445		GPU: "IntelIrisXe",
446	},
447	"NUC5PPYH": {
448		Name: "NUC5PPYH",
449		Keys: map[string]string{
450			"arch":  "x86_64",
451			"model": "NUC5PPYH",
452			"os":    "Debian10",
453		},
454		GPU: "IntelHD405",
455	},
456	"NUC5i7RYH": {
457		Name: "NUC5i7RYH",
458		Keys: map[string]string{
459			"arch":  "x86_64",
460			"model": "NUC5i7RYH",
461			"os":    "Win10",
462		},
463		CPU: "AVX2",
464		GPU: "IntelIris6100",
465	},
466	"NUC6i5SYK": {
467		Name: "NUC6i5SYK",
468		Keys: map[string]string{
469			"arch":  "x86_64",
470			"model": "NUC6i5SYK",
471			"os":    "Win10",
472		},
473		GPU: "IntelIris540",
474	},
475	"NUC8i5BEK": {
476		Name: "NUC8i5BEK",
477		Keys: map[string]string{
478			"arch":  "x86_64",
479			"model": "NUC8i5BEK",
480			"os":    "Win10",
481		},
482		GPU: "IntelIris655",
483	},
484	"NUC9i7QN_Debian11": {
485		Name: "NUC9i7QN_Debian11",
486		Keys: map[string]string{
487			"arch":  "x86_64",
488			"model": "NUC9i7QN",
489			"os":    "Debian11",
490		},
491		CPU: "AVX2",
492		GPU: "RTX3060",
493		// Based on
494		// https://skia.googlesource.com/skia/+/5606ef899116266132253e979a793fea97f12604/infra/bots/gen_tasks_logic/gen_tasks_logic.go#952.
495		SwarmingDimensions: map[string]string{
496			"os":  "Debian-11.5",
497			"cpu": "x86-64-i7-9750H",
498		},
499	},
500	"NUC9i7QN_Win10": {
501		Name: "NUC9i7QN_Win10",
502		Keys: map[string]string{
503			"arch":  "x86_64",
504			"model": "NUC9i7QN",
505			"os":    "Win10",
506		},
507		CPU: "AVX2",
508		GPU: "RTX3060",
509	},
510	"NUCD34010WYKH": {
511		Name: "NUCD34010WYKH",
512		Keys: map[string]string{
513			"arch":  "x86_64",
514			"model": "NUCD34010WYKH",
515			"os":    "Win10",
516		},
517		GPU: "IntelHD4400",
518	},
519	"NUCDE3815TYKHE": {
520		Name: "NUCDE3815TYKHE",
521		Keys: map[string]string{
522			"arch":  "x86_64",
523			"model": "NUCDE3815TYKHE",
524			"os":    "Debian10",
525		},
526		GPU: "IntelBayTrail",
527	},
528	"Nexus7": {
529		Name: "Nexus7",
530		Keys: map[string]string{
531			"arch":  "arm",
532			"model": "Nexus7",
533			"os":    "Android",
534		},
535		GPU: "Tegra3",
536	},
537	"P30": {
538		Name: "P30",
539		Keys: map[string]string{
540			"arch":  "arm64",
541			"model": "P30",
542			"os":    "Android",
543		},
544		GPU: "MaliG76",
545	},
546	"Pixel2XL": {
547		Name: "Pixel2XL",
548		Keys: map[string]string{
549			"arch":  "arm64",
550			"model": "Pixel2XL",
551			"os":    "Android",
552		},
553		GPU: "Adreno540",
554	},
555	"Pixel3": {
556		Name: "Pixel3",
557		Keys: map[string]string{
558			"arch":  "arm64",
559			"model": "Pixel3",
560			"os":    "Android",
561		},
562		GPU: "Adreno630",
563	},
564	"Pixel4": {
565		Name: "Pixel4",
566		Keys: map[string]string{
567			"arch":  "arm64",
568			"model": "Pixel4",
569			"os":    "Android",
570		},
571		CPU: "Snapdragon855",
572		GPU: "Adreno640",
573	},
574	"Pixel4XL": {
575		Name: "Pixel4XL",
576		Keys: map[string]string{
577			"arch":  "arm64",
578			"model": "Pixel4XL",
579			"os":    "Android",
580		},
581		GPU: "Adreno640",
582	},
583	"Pixel5": {
584		Name: "Pixel5",
585		Keys: map[string]string{
586			"arch":  "arm64",
587			"model": "Pixel5",
588			"os":    "Android",
589		},
590		GPU: "Adreno620",
591		// Based on
592		// https://skia.googlesource.com/skia/+/f8daeeb7f092abe1674bc2303c0781f9fb1756ab/infra/bots/gen_tasks_logic/gen_tasks_logic.go#836.
593		SwarmingDimensions: map[string]string{
594			"os":          "Android",
595			"device_type": "redfin",
596			"device_os":   "RD1A.200810.022.A4",
597		},
598	},
599	"Pixel5_Android12": {
600		Name: "Pixel5_Android12",
601		Keys: map[string]string{
602			"arch":  "arm64",
603			"model": "Pixel5",
604			"os":    "Android12",
605		},
606		GPU: "Adreno620",
607		// Based on
608		// https://skia.googlesource.com/skia/+/f8daeeb7f092abe1674bc2303c0781f9fb1756ab/infra/bots/gen_tasks_logic/gen_tasks_logic.go#910.
609		SwarmingDimensions: map[string]string{
610			"os":          "Android",
611			"device_type": "redfin",
612			"device_os":   "SP2A.220305.012",
613		},
614	},
615	"Pixel6": {
616		Name: "Pixel6",
617		Keys: map[string]string{
618			"arch":  "arm64",
619			"model": "Pixel6",
620			"os":    "Android",
621		},
622		GPU: "MaliG78",
623	},
624	"Pixel7": {
625		Name: "Pixel7",
626		Keys: map[string]string{
627			"arch":  "arm64",
628			"model": "Pixel7",
629			"os":    "Android",
630		},
631		GPU: "MaliG710",
632	},
633	"RUBYR5_Debian11": {
634		Name: "RUBYR5_Debian11",
635		Keys: map[string]string{
636			"arch":  "x86_64",
637			"model": "RUBYR5",
638			"os":    "Debian11",
639		},
640		GPU: "RadeonVega6",
641	},
642	"RUBYR5_Win10": {
643		Name: "RUBYR5_Win10",
644		Keys: map[string]string{
645			"arch":  "x86_64",
646			"model": "RUBYR5",
647			"os":    "Win10",
648		},
649		GPU: "RadeonVega6",
650	},
651	"ShuttleA_Debian10_GTX660": {
652		Name: "ShuttleA_Debian10_GTX660",
653		Keys: map[string]string{
654			"arch":  "x86_64",
655			"model": "ShuttleA",
656			"os":    "Debian10",
657		},
658		GPU: "GTX660",
659	},
660	"ShuttleA_Debian10_IntelHD2000": {
661		Name: "ShuttleA_Debian10_IntelHD2000",
662		Keys: map[string]string{
663			"arch":  "x86_64",
664			"model": "ShuttleA",
665			"os":    "Debian10",
666		},
667		GPU: "IntelHD2000",
668	},
669	"ShuttleA_Debian10_RadeonHD7770": {
670		Name: "ShuttleA_Debian10_RadeonHD7770",
671		Keys: map[string]string{
672			"arch":  "x86_64",
673			"model": "ShuttleA",
674			"os":    "Debian10",
675		},
676		GPU: "RadeonHD7770",
677	},
678	"ShuttleA_Win10_GTX660": {
679		Name: "ShuttleA_Win10_GTX660",
680		Keys: map[string]string{
681			"arch":  "x86_64",
682			"model": "ShuttleA",
683			"os":    "Win10",
684		},
685		GPU: "GTX660",
686	},
687	"ShuttleA_Win10_IntelHD2000": {
688		Name: "ShuttleA_Win10_IntelHD2000",
689		Keys: map[string]string{
690			"arch":  "x86_64",
691			"model": "ShuttleA",
692			"os":    "Win10",
693		},
694		GPU: "IntelHD2000",
695	},
696	"ShuttleA_Win10_RadeonHD7770": {
697		Name: "ShuttleA_Win10_RadeonHD7770",
698		Keys: map[string]string{
699			"arch":  "x86_64",
700			"model": "ShuttleA",
701			"os":    "Win10",
702		},
703		GPU: "RadeonHD7770",
704	},
705	"ShuttleC": {
706		Name: "ShuttleC",
707		Keys: map[string]string{
708			"arch":  "x86_64",
709			"model": "ShuttleC",
710			"os":    "Win10",
711		},
712		GPU: "GTX960",
713	},
714	"Sparky360": {
715		Name: "Sparky360",
716		Keys: map[string]string{
717			"arch":  "x86_64",
718			"model": "Sparky360",
719			"os":    "ChromeOS",
720		},
721		GPU: "IntelUHDGraphics605",
722	},
723	"Spin513": {
724		Name: "Spin513",
725		Keys: map[string]string{
726			"arch":  "arm",
727			"model": "Spin513",
728			"os":    "ChromeOS",
729		},
730		GPU: "Adreno618",
731	},
732	"Spin514": {
733		Name: "Spin514",
734		Keys: map[string]string{
735			"arch":  "x86_64",
736			"model": "Spin514",
737			"os":    "ChromeOS",
738		},
739		GPU: "RadeonVega3",
740	},
741	"VMware7.1_Mac10.13": {
742		Name: "VMware7.1_Mac10.13",
743		Keys: map[string]string{
744			"arch":  "x86_64",
745			"model": "VMware7.1",
746			"os":    "Mac10.13",
747		},
748		CPU: "AVX",
749	},
750	"VMware7.1_Mac10.14": {
751		Name: "VMware7.1_Mac10.14",
752		Keys: map[string]string{
753			"arch":  "x86_64",
754			"model": "VMware7.1",
755			"os":    "Mac10.14",
756		},
757		CPU: "AVX",
758	},
759	"VMware7.1_Mac10.15.7": {
760		Name: "VMware7.1_Mac10.15.7",
761		Keys: map[string]string{
762			"arch":  "x86_64",
763			"model": "VMware7.1",
764			"os":    "Mac10.15.7",
765		},
766		CPU: "AVX",
767	},
768	"Wembley": {
769		Name: "Wembley",
770		Keys: map[string]string{
771			"arch":  "arm",
772			"model": "Wembley",
773			"os":    "Android",
774		},
775		GPU: "PowerVRGE8320",
776	},
777	"iPadPro": {
778		Name: "iPadPro",
779		Keys: map[string]string{
780			"arch":  "arm64",
781			"model": "iPadPro",
782			"os":    "iOS",
783		},
784		GPU: "PowerVRGT7800",
785	},
786	"iPhone11": {
787		Name: "iPhone11",
788		Keys: map[string]string{
789			"arch":  "arm64",
790			"model": "iPhone11",
791			"os":    "iOS",
792		},
793		GPU: "AppleA13",
794	},
795	"iPhone7": {
796		Name: "iPhone7",
797		Keys: map[string]string{
798			"arch":  "arm64",
799			"model": "iPhone7",
800			"os":    "iOS",
801		},
802		GPU: "PowerVRGT7600",
803	},
804	"iPhone8": {
805		Name: "iPhone8",
806		Keys: map[string]string{
807			"arch":  "arm64",
808			"model": "iPhone8",
809			"os":    "iOS",
810		},
811		GPU: "AppleA11",
812	},
813}
814