1# Copyright 2016 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5 6# Recipe module for Skia Swarming test. 7 8 9DEPS = [ 10 'env', 11 'flavor', 12 'recipe_engine/context', 13 'recipe_engine/file', 14 'recipe_engine/path', 15 'recipe_engine/platform', 16 'recipe_engine/properties', 17 'recipe_engine/python', 18 'recipe_engine/raw_io', 19 'recipe_engine/step', 20 'run', 21 'vars', 22] 23 24 25def upload_dm_results(buildername): 26 skip_upload_bots = [ 27 'ASAN', 28 'Coverage', 29 'MSAN', 30 'TSAN', 31 'UBSAN', 32 'Valgrind', 33 ] 34 for s in skip_upload_bots: 35 if s in buildername: 36 return False 37 return True 38 39 40def dm_flags(api, bot): 41 args = [] 42 configs = [] 43 blacklisted = [] 44 45 def blacklist(quad): 46 config, src, options, name = ( 47 quad.split(' ') if isinstance(quad, str) else quad) 48 if (config == '_' or 49 config in configs or 50 (config[0] == '~' and config[1:] in configs)): 51 blacklisted.extend([config, src, options, name]) 52 53 # We've been spending lots of time writing out and especially uploading 54 # .pdfs, but not doing anything further with them. skia:6821 55 args.extend(['--dont_write', 'pdf']) 56 57 # This enables non-deterministic random seeding of the GPU FP optimization 58 # test. 59 # Not Android due to: 60 # - https://skia.googlesource.com/skia/+/ 61 # 5910ed347a638ded8cd4c06dbfda086695df1112/BUILD.gn#160 62 # - https://skia.googlesource.com/skia/+/ 63 # ce06e261e68848ae21cac1052abc16bc07b961bf/tests/ProcessorTest.cpp#307 64 # Not MSAN due to: 65 # - https://skia.googlesource.com/skia/+/ 66 # 0ac06e47269a40c177747310a613d213c95d1d6d/infra/bots/recipe_modules/ 67 # flavor/gn_flavor.py#80 68 if 'Android' not in bot and 'MSAN' not in bot: 69 args.append('--randomProcessorTest') 70 71 # 32-bit desktop bots tend to run out of memory, because they have relatively 72 # far more cores than RAM (e.g. 32 cores, 3G RAM). Hold them back a bit. 73 if '-x86-' in bot and not 'NexusPlayer' in bot: 74 args.extend(['--threads', '4']) 75 76 # Nexus7 runs out of memory due to having 4 cores and only 1G RAM. 77 if 'CPU' in bot and 'Nexus7' in bot: 78 args.extend(['--threads', '2']) 79 80 # MotoG4 occasionally fails when multiple threads read the same image file. 81 if 'CPU' in bot and 'MotoG4' in bot: 82 args.extend(['--threads', '0']) 83 84 if 'Chromecast' in bot: 85 args.extend(['--threads', '0']) 86 87 # Avoid issues with dynamically exceeding resource cache limits. 88 if 'Test' in bot and 'DISCARDABLE' in bot: 89 args.extend(['--threads', '0']) 90 91 # See if staying on the main thread helps skia:6748. 92 if 'Test-iOS' in bot: 93 args.extend(['--threads', '0']) 94 95 # Android's kernel will occasionally attempt to kill our process, using 96 # SIGINT, in an effort to free up resources. If requested, that signal 97 # is ignored and dm will keep attempting to proceed until we actually 98 # exhaust the available resources. 99 if ('NexusPlayer' in bot or 100 'Chromecast' in bot): 101 args.append('--ignoreSigInt') 102 103 if 'SwiftShader' in api.vars.extra_tokens: 104 configs.extend(['gles', 'glesdft']) 105 args.append('--disableDriverCorrectnessWorkarounds') 106 107 elif api.vars.builder_cfg.get('cpu_or_gpu') == 'CPU': 108 args.append('--nogpu') 109 110 configs.append('8888') 111 112 if 'BonusConfigs' in bot or ('SAN' in bot and 'GCE' in bot): 113 configs.extend([ 114 'pdf', 115 'g8', '565', 116 'pic-8888', 'tiles_rt-8888', 'lite-8888', 'serialize-8888', 117 'gbr-8888', 118 'f16', 'srgb', 'esrgb', 'narrow', 'enarrow', 119 'p3', 'ep3', 'rec2020', 'erec2020']) 120 121 elif api.vars.builder_cfg.get('cpu_or_gpu') == 'GPU': 122 args.append('--nocpu') 123 124 # Add in either gles or gl configs to the canonical set based on OS 125 sample_count = '8' 126 gl_prefix = 'gl' 127 if 'Android' in bot or 'iOS' in bot: 128 sample_count = '4' 129 # We want to test the OpenGL config not the GLES config on the Shield 130 if 'NVIDIA_Shield' not in bot: 131 gl_prefix = 'gles' 132 elif 'Intel' in bot: 133 sample_count = '' 134 elif 'ChromeOS' in bot: 135 gl_prefix = 'gles' 136 137 if 'NativeFonts' in bot: 138 configs.append(gl_prefix) 139 else: 140 configs.extend([gl_prefix, 141 gl_prefix + 'dft', 142 gl_prefix + 'srgb']) 143 if sample_count is not '': 144 configs.append(gl_prefix + 'msaa' + sample_count) 145 146 # The NP produces a long error stream when we run with MSAA. The Tegra3 just 147 # doesn't support it. 148 if ('NexusPlayer' in bot or 149 'Tegra3' in bot or 150 # We aren't interested in fixing msaa bugs on current iOS devices. 151 'iPad4' in bot or 152 'iPadPro' in bot or 153 'iPhone6' in bot or 154 'iPhone7' in bot or 155 # skia:5792 156 'IntelHD530' in bot or 157 'IntelIris540' in bot): 158 configs = [x for x in configs if 'msaa' not in x] 159 160 # The NP produces different images for dft on every run. 161 if 'NexusPlayer' in bot: 162 configs = [x for x in configs if 'dft' not in x] 163 164 # We want to test both the OpenGL config and the GLES config on Linux Intel: 165 # GL is used by Chrome, GLES is used by ChromeOS. 166 # Also do the Ganesh threading verification test (render with and without 167 # worker threads, using only the SW path renderer, and compare the results). 168 if 'Intel' in bot and api.vars.is_linux: 169 configs.extend(['gles', 170 'glesdft', 171 'glessrgb', 172 'gltestthreading']) 173 # skbug.com/6333, skbug.com/6419, skbug.com/6702 174 blacklist('gltestthreading gm _ lcdblendmodes') 175 blacklist('gltestthreading gm _ lcdoverlap') 176 blacklist('gltestthreading gm _ textbloblooper') 177 # All of these GMs are flaky, too: 178 blacklist('gltestthreading gm _ bleed_alpha_bmp') 179 blacklist('gltestthreading gm _ bleed_alpha_bmp_shader') 180 blacklist('gltestthreading gm _ bleed_alpha_image') 181 blacklist('gltestthreading gm _ bleed_alpha_image_shader') 182 blacklist('gltestthreading gm _ savelayer_with_backdrop') 183 blacklist('gltestthreading gm _ persp_shaders_bw') 184 blacklist('gltestthreading gm _ dftext_blob_persp') 185 blacklist('gltestthreading gm _ dftext') 186 # skbug.com/7523 - Flaky on various GPUs 187 blacklist('gltestthreading gm _ orientation') 188 189 # CommandBuffer bot *only* runs the command_buffer config. 190 if 'CommandBuffer' in bot: 191 configs = ['commandbuffer'] 192 193 # ANGLE bot *only* runs the angle configs 194 if 'ANGLE' in bot: 195 configs = ['angle_d3d11_es2', 196 'angle_d3d9_es2', 197 'angle_gl_es2', 198 'angle_d3d11_es3'] 199 if sample_count is not '': 200 configs.append('angle_d3d11_es2_msaa' + sample_count) 201 configs.append('angle_d3d11_es3_msaa' + sample_count) 202 if 'GTX' in bot or 'Quadro' in bot: 203 # See skia:7823 and chromium:693090. 204 configs.append('angle_gl_es3') 205 if sample_count is not '': 206 configs.append('angle_gl_es2_msaa' + sample_count) 207 configs.append('angle_gl_es3_msaa' + sample_count) 208 if 'NUC5i7RYH' in bot: 209 # skbug.com/7376 210 blacklist('_ test _ ProcessorCloneTest') 211 212 # Vulkan bot *only* runs the vk config. 213 if 'Vulkan' in bot: 214 configs = ['vk'] 215 216 if 'Metal' in bot: 217 configs = ['mtl'] 218 219 # Test 1010102 on our Linux/NVIDIA bots and the persistent cache config 220 # on the GL bots. 221 if ('QuadroP400' in bot and 'PreAbandonGpuContext' not in bot and 222 'TSAN' not in bot and api.vars.is_linux): 223 if 'Vulkan' in bot: 224 configs.append('vk1010102') 225 # Decoding transparent images to 1010102 just looks bad 226 blacklist('vk1010102 image _ _') 227 else: 228 configs.extend(['gl1010102', 'gltestpersistentcache']) 229 # Decoding transparent images to 1010102 just looks bad 230 blacklist('gl1010102 image _ _') 231 # These tests produce slightly different pixels run to run on NV. 232 blacklist('gltestpersistentcache gm _ atlastext') 233 blacklist('gltestpersistentcache gm _ dftext') 234 blacklist('gltestpersistentcache gm _ glyph_pos_h_b') 235 236 # Test SkColorSpaceXformCanvas and rendering to wrapped dsts on a few bots 237 # Also test 'glenarrow', which hits F16 surfaces and F16 vertex colors. 238 if 'BonusConfigs' in api.vars.extra_tokens: 239 configs = ['gbr-gl', 'glbetex', 'glbert', 'glenarrow'] 240 241 242 if 'ChromeOS' in bot: 243 # Just run GLES for now - maybe add gles_msaa4 in the future 244 configs = ['gles'] 245 246 if 'Chromecast' in bot: 247 configs = ['gles'] 248 249 # Test coverage counting path renderer. 250 if 'CCPR' in bot: 251 configs = [c for c in configs if c == 'gl' or c == 'gles'] 252 args.extend(['--pr', 'ccpr', '--cachePathMasks', 'false']) 253 254 # DDL is a GPU-only feature 255 if 'DDL1' in bot: 256 # This bot generates gl and vk comparison images for the large skps 257 configs = [c for c in configs if c == 'gl' or c == 'vk'] 258 args.extend(['--skpViewportSize', "2048"]) 259 args.extend(['--pr', '~small']) 260 if 'DDL3' in bot: 261 # This bot generates the ddl-gl and ddl-vk images for the 262 # large skps and the gms 263 ddl_configs = ['ddl-' + c for c in configs if c == 'gl' or c == 'vk'] 264 ddl2_configs = ['ddl2-' + c for c in configs if c == 'gl' or c == 'vk'] 265 configs = ddl_configs + ddl2_configs 266 args.extend(['--skpViewportSize', "2048"]) 267 args.extend(['--gpuThreads', "0"]) 268 269 if 'Lottie' in bot: 270 configs = ['gl'] 271 272 tf = api.vars.builder_cfg.get('test_filter') 273 if 'All' != tf: 274 # Expected format: shard_XX_YY 275 parts = tf.split('_') 276 if len(parts) == 3: 277 args.extend(['--shard', parts[1]]) 278 args.extend(['--shards', parts[2]]) 279 else: # pragma: nocover 280 raise Exception('Invalid task name - bad shards: %s' % tf) 281 282 args.append('--config') 283 args.extend(configs) 284 285 # Run tests, gms, and image decoding tests everywhere. 286 args.extend('--src tests gm image lottie colorImage svg skp'.split(' ')) 287 if api.vars.builder_cfg.get('cpu_or_gpu') == 'GPU': 288 # Don't run the 'svgparse_*' svgs on GPU. 289 blacklist('_ svg _ svgparse_') 290 elif bot == 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN': 291 # Only run the CPU SVGs on 8888. 292 blacklist('~8888 svg _ _') 293 else: 294 # On CPU SVGs we only care about parsing. Only run them on the above bot. 295 args.remove('svg') 296 297 # Eventually I'd like these to pass, but for now just skip 'em. 298 if 'SK_FORCE_RASTER_PIPELINE_BLITTER' in bot: 299 args.remove('tests') 300 301 if 'NativeFonts' in bot: # images won't exercise native font integration :) 302 args.remove('image') 303 args.remove('colorImage') 304 305 def remove_from_args(arg): 306 if arg in args: 307 args.remove(arg) 308 309 if 'DDL' in bot: 310 # The DDL bots just render the large skps and the gms 311 remove_from_args('tests') 312 remove_from_args('image') 313 remove_from_args('colorImage') 314 remove_from_args('svg') 315 else: 316 # Currently, only the DDL bots render skps 317 remove_from_args('skp') 318 319 if 'Lottie' in api.vars.builder_cfg.get('extra_config', ''): 320 # Only run the lotties on Lottie bots. 321 remove_from_args('tests') 322 remove_from_args('gm') 323 remove_from_args('image') 324 remove_from_args('colorImage') 325 remove_from_args('svg') 326 remove_from_args('skp') 327 else: 328 remove_from_args('lottie') 329 330 # TODO: ??? 331 blacklist('f16 _ _ dstreadshuffle') 332 blacklist('glsrgb image _ _') 333 blacklist('glessrgb image _ _') 334 335 # Not any point to running these. 336 blacklist('gbr-8888 image _ _') 337 blacklist('gbr-8888 colorImage _ _') 338 339 # --src image --config g8 means "decode into Gray8", which isn't supported. 340 blacklist('g8 image _ _') 341 blacklist('g8 colorImage _ _') 342 343 if 'Valgrind' in bot: 344 # These take 18+ hours to run. 345 blacklist('pdf gm _ fontmgr_iter') 346 blacklist('pdf _ _ PANO_20121023_214540.jpg') 347 blacklist('pdf skp _ worldjournal') 348 blacklist('pdf skp _ desk_baidu.skp') 349 blacklist('pdf skp _ desk_wikipedia.skp') 350 blacklist('_ svg _ _') 351 352 if 'iOS' in bot: 353 blacklist(gl_prefix + ' skp _ _') 354 355 if 'Mac' in bot or 'iOS' in bot: 356 # CG fails on questionable bmps 357 blacklist('_ image gen_platf rgba32abf.bmp') 358 blacklist('_ image gen_platf rgb24prof.bmp') 359 blacklist('_ image gen_platf rgb24lprof.bmp') 360 blacklist('_ image gen_platf 8bpp-pixeldata-cropped.bmp') 361 blacklist('_ image gen_platf 4bpp-pixeldata-cropped.bmp') 362 blacklist('_ image gen_platf 32bpp-pixeldata-cropped.bmp') 363 blacklist('_ image gen_platf 24bpp-pixeldata-cropped.bmp') 364 365 # CG has unpredictable behavior on this questionable gif 366 # It's probably using uninitialized memory 367 blacklist('_ image gen_platf frame_larger_than_image.gif') 368 369 # CG has unpredictable behavior on incomplete pngs 370 # skbug.com/5774 371 blacklist('_ image gen_platf inc0.png') 372 blacklist('_ image gen_platf inc1.png') 373 blacklist('_ image gen_platf inc2.png') 374 blacklist('_ image gen_platf inc3.png') 375 blacklist('_ image gen_platf inc4.png') 376 blacklist('_ image gen_platf inc5.png') 377 blacklist('_ image gen_platf inc6.png') 378 blacklist('_ image gen_platf inc7.png') 379 blacklist('_ image gen_platf inc8.png') 380 blacklist('_ image gen_platf inc9.png') 381 blacklist('_ image gen_platf inc10.png') 382 blacklist('_ image gen_platf inc11.png') 383 blacklist('_ image gen_platf inc12.png') 384 blacklist('_ image gen_platf inc13.png') 385 blacklist('_ image gen_platf inc14.png') 386 blacklist('_ image gen_platf incInterlaced.png') 387 388 # These images fail after Mac 10.13.1 upgrade. 389 blacklist('_ image gen_platf incInterlaced.gif') 390 blacklist('_ image gen_platf inc1.gif') 391 blacklist('_ image gen_platf inc0.gif') 392 blacklist('_ image gen_platf butterfly.gif') 393 394 # WIC fails on questionable bmps 395 if 'Win' in bot: 396 blacklist('_ image gen_platf pal8os2v2.bmp') 397 blacklist('_ image gen_platf pal8os2v2-16.bmp') 398 blacklist('_ image gen_platf rgba32abf.bmp') 399 blacklist('_ image gen_platf rgb24prof.bmp') 400 blacklist('_ image gen_platf rgb24lprof.bmp') 401 blacklist('_ image gen_platf 8bpp-pixeldata-cropped.bmp') 402 blacklist('_ image gen_platf 4bpp-pixeldata-cropped.bmp') 403 blacklist('_ image gen_platf 32bpp-pixeldata-cropped.bmp') 404 blacklist('_ image gen_platf 24bpp-pixeldata-cropped.bmp') 405 if 'x86_64' in bot and 'CPU' in bot: 406 # This GM triggers a SkSmallAllocator assert. 407 blacklist('_ gm _ composeshader_bitmap') 408 409 if 'Win' in bot or 'Mac' in bot: 410 # WIC and CG fail on arithmetic jpegs 411 blacklist('_ image gen_platf testimgari.jpg') 412 # More questionable bmps that fail on Mac, too. skbug.com/6984 413 blacklist('_ image gen_platf rle8-height-negative.bmp') 414 blacklist('_ image gen_platf rle4-height-negative.bmp') 415 416 # These PNGs have CRC errors. The platform generators seem to draw 417 # uninitialized memory without reporting an error, so skip them to 418 # avoid lots of images on Gold. 419 blacklist('_ image gen_platf error') 420 421 if 'Android' in bot or 'iOS' in bot or 'Chromecast' in bot: 422 # This test crashes the N9 (perhaps because of large malloc/frees). It also 423 # is fairly slow and not platform-specific. So we just disable it on all of 424 # Android and iOS. skia:5438 425 blacklist('_ test _ GrShape') 426 427 if api.vars.internal_hardware_label == '2': 428 # skia:7160 429 blacklist('_ test _ SRGBReadWritePixels') 430 blacklist('_ test _ SRGBMipMap') 431 432 if api.vars.internal_hardware_label == '5': 433 # http://b/118312149#comment9 434 blacklist('_ test _ SRGBReadWritePixels') 435 436 # skia:4095 437 bad_serialize_gms = ['bleed_image', 438 'c_gms', 439 'colortype', 440 'colortype_xfermodes', 441 'drawfilter', 442 'fontmgr_bounds_0.75_0', 443 'fontmgr_bounds_1_-0.25', 444 'fontmgr_bounds', 445 'fontmgr_match', 446 'fontmgr_iter', 447 'imagemasksubset'] 448 449 # skia:5589 450 bad_serialize_gms.extend(['bitmapfilters', 451 'bitmapshaders', 452 'bleed', 453 'bleed_alpha_bmp', 454 'bleed_alpha_bmp_shader', 455 'convex_poly_clip', 456 'extractalpha', 457 'filterbitmap_checkerboard_32_32_g8', 458 'filterbitmap_image_mandrill_64', 459 'shadows', 460 'simpleaaclip_aaclip']) 461 # skia:5595 462 bad_serialize_gms.extend(['composeshader_bitmap', 463 'scaled_tilemodes_npot', 464 'scaled_tilemodes']) 465 466 # skia:5778 467 bad_serialize_gms.append('typefacerendering_pfaMac') 468 # skia:5942 469 bad_serialize_gms.append('parsedpaths') 470 471 # these use a custom image generator which doesn't serialize 472 bad_serialize_gms.append('ImageGeneratorExternal_rect') 473 bad_serialize_gms.append('ImageGeneratorExternal_shader') 474 475 # skia:6189 476 bad_serialize_gms.append('shadow_utils') 477 478 # skia:7938 479 bad_serialize_gms.append('persp_images') 480 481 # Not expected to round trip encoding/decoding. 482 bad_serialize_gms.append('all_bitmap_configs') 483 bad_serialize_gms.append('makecolorspace') 484 bad_serialize_gms.append('readpixels') 485 bad_serialize_gms.append('draw_image_set_rect_to_rect') 486 487 # This GM forces a path to be convex. That property doesn't survive 488 # serialization. 489 bad_serialize_gms.append('analytic_antialias_convex') 490 491 for test in bad_serialize_gms: 492 blacklist(['serialize-8888', 'gm', '_', test]) 493 494 if 'Mac' not in bot: 495 for test in ['bleed_alpha_image', 'bleed_alpha_image_shader']: 496 blacklist(['serialize-8888', 'gm', '_', test]) 497 # It looks like we skip these only for out-of-memory concerns. 498 if 'Win' in bot or 'Android' in bot: 499 for test in ['verylargebitmap', 'verylarge_picture_image']: 500 blacklist(['serialize-8888', 'gm', '_', test]) 501 if 'Mac' in bot and 'CPU' in bot: 502 # skia:6992 503 blacklist(['pic-8888', 'gm', '_', 'encode-platform']) 504 blacklist(['serialize-8888', 'gm', '_', 'encode-platform']) 505 506 # skia:4769 507 for test in ['drawfilter']: 508 blacklist([ 'pic-8888', 'gm', '_', test]) 509 blacklist([ 'lite-8888', 'gm', '_', test]) 510 # skia:4703 511 for test in ['image-cacherator-from-picture', 512 'image-cacherator-from-raster', 513 'image-cacherator-from-ctable']: 514 blacklist([ 'pic-8888', 'gm', '_', test]) 515 blacklist(['serialize-8888', 'gm', '_', test]) 516 517 # GM that requires raster-backed canvas 518 for test in ['complexclip4_bw', 'complexclip4_aa', 'p3']: 519 blacklist([ 'pic-8888', 'gm', '_', test]) 520 blacklist([ 'lite-8888', 'gm', '_', test]) 521 blacklist(['serialize-8888', 'gm', '_', test]) 522 523 # GM that not support tiles_rt 524 for test in ['complexclip4_bw', 'complexclip4_aa']: 525 blacklist([ 'tiles_rt-8888', 'gm', '_', test]) 526 527 # Extensions for RAW images 528 r = ['arw', 'cr2', 'dng', 'nef', 'nrw', 'orf', 'raf', 'rw2', 'pef', 'srw', 529 'ARW', 'CR2', 'DNG', 'NEF', 'NRW', 'ORF', 'RAF', 'RW2', 'PEF', 'SRW'] 530 531 # skbug.com/4888 532 # Blacklist RAW images (and a few large PNGs) on GPU bots 533 # until we can resolve failures. 534 if 'GPU' in bot: 535 blacklist('_ image _ interlaced1.png') 536 blacklist('_ image _ interlaced2.png') 537 blacklist('_ image _ interlaced3.png') 538 for raw_ext in r: 539 blacklist('_ image _ .%s' % raw_ext) 540 541 # Blacklist memory intensive tests on 32-bit bots. 542 if ('Win8' in bot or 'Win2016' in bot) and 'x86-' in bot: 543 blacklist('_ image f16 _') 544 blacklist('_ image _ abnormal.wbmp') 545 blacklist('_ image _ interlaced1.png') 546 blacklist('_ image _ interlaced2.png') 547 blacklist('_ image _ interlaced3.png') 548 for raw_ext in r: 549 blacklist('_ image _ .%s' % raw_ext) 550 551 if 'Nexus5' in bot and 'GPU' in bot: 552 # skia:5876 553 blacklist(['_', 'gm', '_', 'encode-platform']) 554 555 if 'AndroidOne-GPU' in bot: # skia:4697, skia:4704, skia:4694, skia:4705 556 blacklist(['_', 'gm', '_', 'bigblurs']) 557 blacklist(['_', 'gm', '_', 'bleed']) 558 blacklist(['_', 'gm', '_', 'bleed_alpha_bmp']) 559 blacklist(['_', 'gm', '_', 'bleed_alpha_bmp_shader']) 560 blacklist(['_', 'gm', '_', 'bleed_alpha_image']) 561 blacklist(['_', 'gm', '_', 'bleed_alpha_image_shader']) 562 blacklist(['_', 'gm', '_', 'bleed_image']) 563 blacklist(['_', 'gm', '_', 'dropshadowimagefilter']) 564 blacklist(['_', 'gm', '_', 'filterfastbounds']) 565 blacklist([gl_prefix, 'gm', '_', 'imageblurtiled']) 566 blacklist(['_', 'gm', '_', 'imagefiltersclipped']) 567 blacklist(['_', 'gm', '_', 'imagefiltersscaled']) 568 blacklist(['_', 'gm', '_', 'imageresizetiled']) 569 blacklist(['_', 'gm', '_', 'matrixconvolution']) 570 blacklist(['_', 'gm', '_', 'strokedlines']) 571 if sample_count is not '': 572 gl_msaa_config = gl_prefix + 'msaa' + sample_count 573 blacklist([gl_msaa_config, 'gm', '_', 'imageblurtiled']) 574 blacklist([gl_msaa_config, 'gm', '_', 'imagefiltersbase']) 575 576 match = [] 577 if 'Valgrind' in bot: # skia:3021 578 match.append('~Threaded') 579 580 if 'Valgrind' in bot and 'PreAbandonGpuContext' in bot: 581 # skia:6575 582 match.append('~multipicturedraw_') 583 584 if 'CommandBuffer' in bot: 585 # https://crbug.com/697030 586 match.append('~HalfFloatAlphaTextureTest') 587 588 if 'AndroidOne' in bot: 589 match.append('~WritePixels') # skia:4711 590 match.append('~PremulAlphaRoundTrip_Gpu') # skia:7501 591 match.append('~ReimportImageTextureWithMipLevels') # skia:8090 592 593 if 'Chromecast' in bot: 594 if 'GPU' in bot: 595 # skia:6687 596 match.append('~animated-image-blurs') 597 match.append('~blur_0.01') 598 match.append('~blur_image_filter') 599 match.append('~check_small_sigma_offset') 600 match.append('~imageblur2') 601 match.append('~lighting') 602 match.append('~longpathdash') 603 match.append('~matrixconvolution') 604 match.append('~textblobmixedsizes_df') 605 match.append('~textblobrandomfont') 606 # Blacklisted to avoid OOM (we see DM just end with "broken pipe") 607 match.append('~bigbitmaprect_') 608 match.append('~DrawBitmapRect') 609 match.append('~drawbitmaprect') 610 match.append('~GM_animated-image-blurs') 611 match.append('~ImageFilterBlurLargeImage') 612 match.append('~savelayer_clipmask') 613 match.append('~TextBlobCache') 614 match.append('~verylarge') 615 616 if 'GalaxyS6' in bot: 617 match.append('~SpecialImage') # skia:6338 618 match.append('~skbug6653') # skia:6653 619 620 if 'MSAN' in bot: 621 match.extend(['~Once', '~Shared']) # Not sure what's up with these tests. 622 623 if 'TSAN' in bot: 624 match.extend(['~ReadWriteAlpha']) # Flaky on TSAN-covered on nvidia bots. 625 match.extend(['~RGBA4444TextureTest', # Flakier than they are important. 626 '~RGB565TextureTest']) 627 628 # By default, we test with GPU threading enabled, unless specifically 629 # disabled. 630 if 'NoGPUThreads' in bot: 631 args.extend(['--gpuThreads', '0']) 632 633 if 'Vulkan' in bot and 'Adreno530' in bot: 634 # skia:5777 635 match.extend(['~CopySurface']) 636 637 if 'Vulkan' in bot and 'Adreno' in bot: 638 # skia:7663 639 match.extend(['~WritePixelsNonTextureMSAA_Gpu']) 640 match.extend(['~WritePixelsMSAA_Gpu']) 641 642 if 'Vulkan' in bot and api.vars.is_linux and 'IntelIris640' in bot: 643 match.extend(['~VkHeapTests']) # skia:6245 644 645 if api.vars.is_linux and 'IntelIris640' in bot: 646 match.extend(['~GLPrograms']) # skia:7849 647 648 if 'Vulkan' in bot and api.vars.is_linux and 'IntelHD405' in bot: 649 # skia:7322 650 blacklist(['vk', 'gm', '_', 'skbug_257']) 651 blacklist(['vk', 'gm', '_', 'filltypespersp']) 652 match.append('~^ClearOp$') 653 match.append('~^CopySurface$') 654 match.append('~^ImageNewShader_GPU$') 655 match.append('~^InitialTextureClear$') 656 match.append('~^PinnedImageTest$') 657 match.append('~^ReadPixels_Gpu$') 658 match.append('~^ReadPixels_Texture$') 659 match.append('~^SRGBReadWritePixels$') 660 match.append('~^VkUploadPixelsTests$') 661 match.append('~^WritePixelsNonTexture_Gpu$') 662 match.append('~^WritePixelsNonTextureMSAA_Gpu$') 663 match.append('~^WritePixels_Gpu$') 664 match.append('~^WritePixelsMSAA_Gpu$') 665 666 if 'Vulkan' in bot and 'GTX660' in bot and 'Win' in bot: 667 # skbug.com/8047 668 match.append('~FloatingPointTextureTest$') 669 670 if 'Vulkan' in bot and 'Win10' in bot and 'IntelIris655' in bot: 671 # skia:8659 672 blacklist(['vk', 'gm', '_', 'aarectmodes']) 673 blacklist(['vk', 'gm', '_', 'aaxfermodes']) 674 blacklist(['vk', 'gm', '_', 'crbug_892988']) 675 blacklist(['vk', 'gm', '_', 'dftext']) 676 blacklist(['vk', 'gm', '_', 'dftext_blob_persp']) 677 blacklist(['vk', 'gm', '_', 'dont_clip_to_layer']) 678 blacklist(['vk', 'gm', '_', 'drawregionmodes']) 679 blacklist(['vk', 'gm', '_', 'filterfastbounds']) 680 blacklist(['vk', 'gm', '_', 'fontmgr_iter']) 681 blacklist(['vk', 'gm', '_', 'fontmgr_match']) 682 blacklist(['vk', 'gm', '_', 'fontscalerdistortable']) 683 blacklist(['vk', 'gm', '_', 'gammagradienttext']) 684 blacklist(['vk', 'gm', '_', 'gammatext']) 685 blacklist(['vk', 'gm', '_', 'gradtext']) 686 blacklist(['vk', 'gm', '_', 'hairmodes']) 687 blacklist(['vk', 'gm', '_', 'imagefilters_xfermodes']) 688 blacklist(['vk', 'gm', '_', 'imagefiltersclipped']) 689 blacklist(['vk', 'gm', '_', 'imagefiltersscaled']) 690 blacklist(['vk', 'gm', '_', 'imagefiltersstroked']) 691 blacklist(['vk', 'gm', '_', 'imagefilterstransformed']) 692 blacklist(['vk', 'gm', '_', 'imageresizetiled']) 693 blacklist(['vk', 'gm', '_', 'lcdblendmodes']) 694 blacklist(['vk', 'gm', '_', 'lcdoverlap']) 695 blacklist(['vk', 'gm', '_', 'lcdtext']) 696 blacklist(['vk', 'gm', '_', 'lcdtextsize']) 697 blacklist(['vk', 'gm', '_', 'matriximagefilter']) 698 blacklist(['vk', 'gm', '_', 'resizeimagefilter']) 699 blacklist(['vk', 'gm', '_', 'rotate_imagefilter']) 700 blacklist(['vk', 'gm', '_', 'savelayer_lcdtext']) 701 blacklist(['vk', 'gm', '_', 'shadermaskfilter_image']) 702 blacklist(['vk', 'gm', '_', 'srcmode']) 703 blacklist(['vk', 'gm', '_', 'surfaceprops']) 704 blacklist(['vk', 'gm', '_', 'textblobgeometrychange']) 705 blacklist(['vk', 'gm', '_', 'textbloblooper']) 706 blacklist(['vk', 'gm', '_', 'textblobrandomfont']) 707 blacklist(['vk', 'gm', '_', 'textfilter_color']) 708 blacklist(['vk', 'gm', '_', 'textfilter_image']) 709 blacklist(['vk', 'gm', '_', 'tilemodes']) 710 blacklist(['vk', 'gm', '_', 'varied_text_clipped_lcd']) 711 blacklist(['vk', 'gm', '_', 'varied_text_ignorable_clip_lcd']) 712 if 'Debug' in bot: 713 blacklist(['vk', 'gm', '_', 'fontscaler']) 714 blacklist(['vk', 'gm', '_', 'mixedtextblobs']) 715 blacklist(['vk', 'gm', '_', 'textblobmixedsizes']) 716 blacklist(['vk', 'gm', '_', 'textblobmixedsizes_df']) 717 718 if 'MoltenVK' in bot: 719 # skbug.com/7959 720 blacklist(['_', 'gm', '_', 'vertices_scaled_shader']) 721 blacklist(['_', 'gm', '_', 'vertices']) 722 match.append('~^InitialTextureClear$') 723 match.append('~^RGB565TextureTest$') 724 match.append('~^RGBA4444TextureTest$') 725 match.append('~^WritePixelsNonTextureMSAA_Gpu$') 726 727 if 'ANGLE' in bot: 728 # skia:7835 729 match.append('~BlurMaskBiggerThanDest') 730 731 if 'IntelIris6100' in bot and 'ANGLE' in bot and 'Release' in bot: 732 # skia:7376 733 match.append('~^ProcessorOptimizationValidationTest$') 734 735 if ('IntelIris6100' in bot or 'IntelHD4400' in bot) and 'ANGLE' in bot: 736 # skia:6857 737 blacklist(['angle_d3d9_es2', 'gm', '_', 'lighting']) 738 739 if 'PowerVRGX6250' in bot: 740 match.append('~gradients_view_perspective_nodither') #skia:6972 741 742 if '-arm-' in bot and 'ASAN' in bot: 743 # TODO: can we run with env allocator_may_return_null=1 instead? 744 match.append('~BadImage') 745 746 if 'Mac' in bot and 'IntelHD6000' in bot: 747 # skia:7574 748 match.append('~^ProcessorCloneTest$') 749 match.append('~^GrMeshTest$') 750 751 if 'Mac' in bot and 'IntelHD615' in bot: 752 # skia:7603 753 match.append('~^GrMeshTest$') 754 755 if 'Metal' in bot: 756 # skia:8243 757 match.append('~^ClearOp$') 758 match.append('~^DDLSurfaceCharacterizationTest$') 759 match.append('~^DDLNonTextureabilityTest$') 760 match.append('~^DDLOperatorEqTest$') 761 match.append('~^DeferredProxyTest$') 762 match.append('~^GPUMemorySize$') 763 match.append('~^GrContext_colorTypeSupportedAsImage$') 764 match.append('~^GrContext_colorTypeSupportedAsSurface$') 765 match.append('~^GrContext_maxSurfaceSamplesForColorType$') 766 match.append('~^GrContextFactory_sharedContexts$') 767 match.append('~^GrPipelineDynamicStateTest$') 768 match.append('~^InitialTextureClear$') 769 match.append('~^PromiseImageTestNoDelayedRelease$') 770 match.append('~^PromiseImageTestDelayedRelease$') 771 match.append('~^PromiseImageTextureReuse$') 772 match.append('~^PromiseImageTextureReuseDifferentConfig$') 773 match.append('~^PromiseImageTextureShutdown$') 774 match.append('~^PromiseImageTextureFullCache$') 775 match.append('~^ResourceAllocatorTest$') 776 match.append('~^RGB565TextureTest$') 777 match.append('~^RGBA4444TextureTest$') 778 match.append('~^TransferPixelsTest$') 779 match.append('~^SurfaceSemaphores$') 780 match.append('~^VertexAttributeCount$') 781 match.append('~^WrappedProxyTest$') 782 783 if blacklisted: 784 args.append('--blacklist') 785 args.extend(blacklisted) 786 787 if match: 788 args.append('--match') 789 args.extend(match) 790 791 # These bots run out of memory running RAW codec tests. Do not run them in 792 # parallel 793 if 'NexusPlayer' in bot or 'Nexus5' in bot or 'Nexus9' in bot: 794 args.append('--noRAW_threading') 795 796 if 'FSAA' in bot: 797 args.extend(['--analyticAA', 'false', '--deltaAA', 'false']) 798 if 'FAAA' in bot: 799 args.extend(['--deltaAA', 'false', '--forceAnalyticAA']) 800 if 'FDAA' in bot: 801 args.extend(['--deltaAA', '--forceDeltaAA']) 802 803 if 'NativeFonts' not in bot: 804 args.append('--nonativeFonts') 805 806 if 'GDI' in bot: 807 args.append('--gdi') 808 809 if ('QuadroP400' in bot or 810 'Adreno540' in bot or 811 'IntelHD2000' in bot or # gen 6 - sandy bridge 812 'IntelHD4400' in bot or # gen 7 - haswell 813 'IntelHD405' in bot or # gen 8 - cherryview braswell 814 'IntelIris6100' in bot or # gen 8 - broadwell 815 'IntelIris540' in bot or # gen 9 - skylake 816 'IntelIris640' in bot or # gen 9 - kaby lake 817 'IntelIris655' in bot or # gen 9 - coffee lake 818 'MaliT760' in bot or 819 'MaliT860' in bot or 820 'MaliT880' in bot): 821 args.extend(['--reduceOpListSplitting']) 822 823 # Let's make all bots produce verbose output by default. 824 args.append('--verbose') 825 826 return args 827 828 829def key_params(api): 830 """Build a unique key from the builder name (as a list). 831 832 E.g. arch x86 gpu GeForce320M mode MacMini4.1 os Mac10.6 833 """ 834 # Don't bother to include role, which is always Test. 835 blacklist = ['role', 'test_filter'] 836 837 flat = [] 838 for k in sorted(api.vars.builder_cfg.keys()): 839 if k not in blacklist: 840 flat.append(k) 841 flat.append(api.vars.builder_cfg[k]) 842 843 return flat 844 845 846def test_steps(api): 847 """Run the DM test.""" 848 b = api.properties['buildername'] 849 use_hash_file = False 850 if upload_dm_results(b): 851 host_dm_dir = str(api.flavor.host_dirs.dm_dir) 852 api.flavor.create_clean_host_dir(api.path['start_dir'].join('test')) 853 device_dm_dir = str(api.flavor.device_dirs.dm_dir) 854 if host_dm_dir != device_dm_dir: 855 api.flavor.create_clean_device_dir(device_dm_dir) 856 857 # Obtain the list of already-generated hashes. 858 hash_filename = 'uninteresting_hashes.txt' 859 860 host_hashes_file = api.vars.tmp_dir.join(hash_filename) 861 hashes_file = api.flavor.device_path_join( 862 api.flavor.device_dirs.tmp_dir, hash_filename) 863 api.run( 864 api.python.inline, 865 'get uninteresting hashes', 866 program=""" 867 import contextlib 868 import math 869 import socket 870 import sys 871 import time 872 import urllib2 873 874 HASHES_URL = sys.argv[1] 875 RETRIES = 5 876 TIMEOUT = 60 877 WAIT_BASE = 15 878 879 socket.setdefaulttimeout(TIMEOUT) 880 for retry in range(RETRIES): 881 try: 882 with contextlib.closing( 883 urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w: 884 hashes = w.read() 885 with open(sys.argv[2], 'w') as f: 886 f.write(hashes) 887 break 888 except Exception as e: 889 print 'Failed to get uninteresting hashes from %s:' % HASHES_URL 890 print e 891 if retry == RETRIES: 892 raise 893 waittime = WAIT_BASE * math.pow(2, retry) 894 print 'Retry in %d seconds.' % waittime 895 time.sleep(waittime) 896 """, 897 args=[api.properties['gold_hashes_url'], host_hashes_file], 898 abort_on_failure=False, 899 fail_build_on_failure=False, 900 infra_step=True) 901 902 if api.path.exists(host_hashes_file): 903 api.flavor.copy_file_to_device(host_hashes_file, hashes_file) 904 use_hash_file = True 905 906 # Run DM. 907 properties = [ 908 'gitHash', api.properties['revision'], 909 'builder', api.vars.builder_name, 910 'buildbucket_build_id', api.properties.get('buildbucket_build_id', ''), 911 ] 912 if api.vars.is_trybot: 913 properties.extend([ 914 'issue', api.vars.issue, 915 'patchset', api.vars.patchset, 916 'patch_storage', api.vars.patch_storage, 917 ]) 918 properties.extend(['swarming_bot_id', api.vars.swarming_bot_id]) 919 properties.extend(['swarming_task_id', api.vars.swarming_task_id]) 920 921 if 'Chromecast' in api.vars.builder_cfg.get('os', ''): 922 # Due to limited disk space, we only deal with skps and one image. 923 args = [ 924 'dm', 925 '--resourcePath', api.flavor.device_dirs.resource_dir, 926 '--skps', api.flavor.device_dirs.skp_dir, 927 '--images', api.flavor.device_path_join( 928 api.flavor.device_dirs.resource_dir, 'images', 'color_wheel.jpg'), 929 '--nameByHash', 930 '--properties' 931 ] + properties 932 else: 933 args = [ 934 'dm', 935 '--resourcePath', api.flavor.device_dirs.resource_dir, 936 '--skps', api.flavor.device_dirs.skp_dir, 937 '--images', api.flavor.device_path_join( 938 api.flavor.device_dirs.images_dir, 'dm'), 939 '--colorImages', api.flavor.device_path_join( 940 api.flavor.device_dirs.images_dir, 'colorspace'), 941 '--nameByHash', 942 '--properties' 943 ] + properties 944 945 args.extend(['--svgs', api.flavor.device_dirs.svg_dir]) 946 if 'Lottie' in api.vars.builder_cfg.get('extra_config', ''): 947 args.extend(['--lotties', api.flavor.device_dirs.lotties_dir]) 948 949 args.append('--key') 950 keys = key_params(api) 951 952 if 'Lottie' in api.vars.builder_cfg.get('extra_config', ''): 953 keys.extend(['renderer', 'skottie']) 954 955 args.extend(keys) 956 957 if use_hash_file: 958 args.extend(['--uninterestingHashesFile', hashes_file]) 959 if upload_dm_results(b): 960 args.extend(['--writePath', api.flavor.device_dirs.dm_dir]) 961 962 args.extend(dm_flags(api, api.vars.builder_name)) 963 964 # See skia:2789. 965 if 'AbandonGpuContext' in api.vars.extra_tokens: 966 args.append('--abandonGpuContext') 967 if 'PreAbandonGpuContext' in api.vars.extra_tokens: 968 args.append('--preAbandonGpuContext') 969 if 'ReleaseAndAbandonGpuContext' in api.vars.extra_tokens: 970 args.append('--releaseAndAbandonGpuContext') 971 972 api.run(api.flavor.step, 'dm', cmd=args, abort_on_failure=False) 973 974 if upload_dm_results(b): 975 # Copy images and JSON to host machine if needed. 976 api.flavor.copy_directory_contents_to_host( 977 api.flavor.device_dirs.dm_dir, api.flavor.host_dirs.dm_dir) 978 979 980def RunSteps(api): 981 api.vars.setup() 982 api.file.ensure_directory('makedirs tmp_dir', api.vars.tmp_dir) 983 api.flavor.setup() 984 985 env = {} 986 if 'iOS' in api.vars.builder_name: 987 env['IOS_BUNDLE_ID'] = 'com.google.dm' 988 env['IOS_MOUNT_POINT'] = api.vars.slave_dir.join('mnt_iosdevice') 989 with api.context(env=env): 990 try: 991 if 'Chromecast' in api.vars.builder_name: 992 api.flavor.install(resources=True, skps=True) 993 elif 'Lottie' in api.vars.builder_name: 994 api.flavor.install(resources=True, lotties=True) 995 else: 996 api.flavor.install(skps=True, images=True, svgs=True, resources=True) 997 test_steps(api) 998 finally: 999 api.flavor.cleanup_steps() 1000 api.run.check_failure() 1001 1002 1003TEST_BUILDERS = [ 1004 'Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android', 1005 'Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android', 1006 ('Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All' 1007 '-Android_NoGPUThreads'), 1008 ('Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All' 1009 '-Android_Vulkan'), 1010 'Test-Android-Clang-MotoG4-CPU-Snapdragon617-arm-Release-All-Android', 1011 'Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR', 1012 'Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android', 1013 'Test-Android-Clang-Nexus7-CPU-Tegra3-arm-Release-All-Android', 1014 'Test-Android-Clang-NexusPlayer-GPU-PowerVRG6430-x86-Release-All-Android', 1015 'Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan', 1016 'Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN', 1017 ('Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-' 1018 'arm-Debug-All'), 1019 'Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All', 1020 'Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All', 1021 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN', 1022 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs', 1023 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-shard_00_10-Coverage', 1024 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN', 1025 ('Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All' 1026 '-SK_USE_DISCARDABLE_SCALEDIMAGECACHE'), 1027 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-Lottie', 1028 ('Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All' 1029 '-SK_FORCE_RASTER_PIPELINE_BLITTER'), 1030 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-TSAN', 1031 'Test-Debian9-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader', 1032 'Test-Debian9-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan', 1033 'Test-Debian9-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-Vulkan', 1034 'Test-Mac-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts', 1035 'Test-Mac-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All', 1036 'Test-Mac-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All', 1037 'Test-Mac-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-Metal', 1038 ('Test-Mac-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-' 1039 'MoltenVK_Vulkan'), 1040 'Test-Mac-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer', 1041 'Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_Coverage', 1042 ('Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All' 1043 '-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41'), 1044 ('Test-Ubuntu17-GCC-Golo-GPU-QuadroP400-x86_64-Release-All' 1045 '-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41'), 1046 'Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1', 1047 'Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3', 1048 'Test-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Lottie', 1049 'Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs', 1050 ('Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All' 1051 '-ReleaseAndAbandonGpuContext'), 1052 'Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts_GDI', 1053 'Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE', 1054 'Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan', 1055 'Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE', 1056 'Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan', 1057 'Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE', 1058 'Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FAAA', 1059 'Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FDAA', 1060 'Test-Win2016-Clang-GCE-CPU-AVX2-x86_64-Debug-All-FSAA', 1061 'Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All', 1062] 1063 1064 1065def GenTests(api): 1066 for builder in TEST_BUILDERS: 1067 test = ( 1068 api.test(builder) + 1069 api.properties(buildername=builder, 1070 buildbucket_build_id='123454321', 1071 revision='abc123', 1072 path_config='kitchen', 1073 gold_hashes_url='https://example.com/hashes.txt', 1074 swarm_out_dir='[SWARM_OUT_DIR]') + 1075 api.path.exists( 1076 api.path['start_dir'].join('skia'), 1077 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1078 'skimage', 'VERSION'), 1079 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1080 'skp', 'VERSION'), 1081 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1082 'svg', 'VERSION'), 1083 api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 1084 ) + 1085 api.step_data('get swarming bot id', 1086 stdout=api.raw_io.output('skia-bot-123')) + 1087 api.step_data('get swarming task id', 1088 stdout=api.raw_io.output('123456')) 1089 ) 1090 if 'Win' in builder: 1091 test += api.platform('win', 64) 1092 1093 if 'Chromecast' in builder: 1094 test += api.step_data( 1095 'read chromecast ip', 1096 stdout=api.raw_io.output('192.168.1.2:5555')) 1097 1098 if 'ChromeOS' in builder: 1099 test += api.step_data( 1100 'read chromeos ip', 1101 stdout=api.raw_io.output('{"user_ip":"foo@127.0.0.1"}')) 1102 1103 yield test 1104 1105 builder = 'Test-Win8-Clang-Golo-CPU-AVX-x86-Debug-All' 1106 yield ( 1107 api.test('trybot') + 1108 api.properties(buildername=builder, 1109 buildbucket_build_id='123454321', 1110 revision='abc123', 1111 path_config='kitchen', 1112 gold_hashes_url='https://example.com/hashes.txt', 1113 swarm_out_dir='[SWARM_OUT_DIR]') + 1114 api.properties(patch_storage='gerrit') + 1115 api.properties.tryserver( 1116 buildername=builder, 1117 gerrit_project='skia', 1118 gerrit_url='https://skia-review.googlesource.com/', 1119 )+ 1120 api.path.exists( 1121 api.path['start_dir'].join('skia'), 1122 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1123 'skimage', 'VERSION'), 1124 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1125 'skp', 'VERSION'), 1126 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1127 'svg', 'VERSION'), 1128 api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 1129 ) 1130 ) 1131 1132 builder = 'Test-Debian9-GCC-GCE-CPU-AVX2-x86_64-Debug-All' 1133 yield ( 1134 api.test('failed_dm') + 1135 api.properties(buildername=builder, 1136 buildbucket_build_id='123454321', 1137 revision='abc123', 1138 path_config='kitchen', 1139 gold_hashes_url='https://example.com/hashes.txt', 1140 swarm_out_dir='[SWARM_OUT_DIR]') + 1141 api.path.exists( 1142 api.path['start_dir'].join('skia'), 1143 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1144 'skimage', 'VERSION'), 1145 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1146 'skp', 'VERSION'), 1147 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1148 'svg', 'VERSION'), 1149 api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 1150 ) + 1151 api.step_data('symbolized dm', retcode=1) 1152 ) 1153 1154 builder = 'Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android' 1155 yield ( 1156 api.test('failed_get_hashes') + 1157 api.properties(buildername=builder, 1158 buildbucket_build_id='123454321', 1159 revision='abc123', 1160 path_config='kitchen', 1161 gold_hashes_url='https://example.com/hashes.txt', 1162 swarm_out_dir='[SWARM_OUT_DIR]') + 1163 api.path.exists( 1164 api.path['start_dir'].join('skia'), 1165 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1166 'skimage', 'VERSION'), 1167 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1168 'skp', 'VERSION'), 1169 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1170 'svg', 'VERSION'), 1171 api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 1172 ) + 1173 api.step_data('get uninteresting hashes', retcode=1) 1174 ) 1175 1176 builder = ('Test-Android-Clang-NexusPlayer-CPU-Moorefield-x86-' 1177 'Debug-All-Android') 1178 yield ( 1179 api.test('failed_push') + 1180 api.properties(buildername=builder, 1181 buildbucket_build_id='123454321', 1182 revision='abc123', 1183 path_config='kitchen', 1184 gold_hashes_url='https://example.com/hashes.txt', 1185 swarm_out_dir='[SWARM_OUT_DIR]') + 1186 api.path.exists( 1187 api.path['start_dir'].join('skia'), 1188 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1189 'skimage', 'VERSION'), 1190 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1191 'skp', 'VERSION'), 1192 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1193 'svg', 'VERSION'), 1194 api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 1195 ) + 1196 api.step_data('get swarming bot id', 1197 stdout=api.raw_io.output('build123-m2--device5')) + 1198 api.step_data('push [START_DIR]/skia/resources/* '+ 1199 '/sdcard/revenge_of_the_skiabot/resources', retcode=1) 1200 ) 1201 1202 builder = 'Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android' 1203 retry_step_name = 'adb pull.pull /sdcard/revenge_of_the_skiabot/dm_out' 1204 yield ( 1205 api.test('failed_pull') + 1206 api.properties(buildername=builder, 1207 buildbucket_build_id='123454321', 1208 revision='abc123', 1209 path_config='kitchen', 1210 gold_hashes_url='https://example.com/hashes.txt', 1211 swarm_out_dir='[SWARM_OUT_DIR]') + 1212 api.path.exists( 1213 api.path['start_dir'].join('skia'), 1214 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1215 'skimage', 'VERSION'), 1216 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1217 'skp', 'VERSION'), 1218 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1219 'svg', 'VERSION'), 1220 api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 1221 ) + 1222 api.step_data('dm', retcode=1) + 1223 api.step_data(retry_step_name, retcode=1) + 1224 api.step_data(retry_step_name + ' (attempt 2)', retcode=1) + 1225 api.step_data(retry_step_name + ' (attempt 3)', retcode=1) 1226 ) 1227 1228 yield ( 1229 api.test('internal_bot_2') + 1230 api.properties(buildername=builder, 1231 buildbucket_build_id='123454321', 1232 revision='abc123', 1233 path_config='kitchen', 1234 swarm_out_dir='[SWARM_OUT_DIR]', 1235 gold_hashes_url='https://example.com/hashes.txt', 1236 internal_hardware_label='2') + 1237 api.path.exists( 1238 api.path['start_dir'].join('skia'), 1239 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1240 'skimage', 'VERSION'), 1241 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1242 'skp', 'VERSION'), 1243 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1244 'svg', 'VERSION'), 1245 api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 1246 ) 1247 ) 1248 1249 yield ( 1250 api.test('internal_bot_5') + 1251 api.properties(buildername=builder, 1252 buildbucket_build_id='123454321', 1253 revision='abc123', 1254 path_config='kitchen', 1255 swarm_out_dir='[SWARM_OUT_DIR]', 1256 gold_hashes_url='https://example.com/hashes.txt', 1257 internal_hardware_label='5') + 1258 api.path.exists( 1259 api.path['start_dir'].join('skia'), 1260 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1261 'skimage', 'VERSION'), 1262 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1263 'skp', 'VERSION'), 1264 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 1265 'svg', 'VERSION'), 1266 api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 1267 ) 1268 ) 1269