1import os 2from talos import filter, utils 3 4""" 5test definitions for Talos 6""" 7 8_TESTS = {} # internal dict of Talos test classes 9 10 11def register_test(): 12 """Decorator to register Talos test classes""" 13 def wrapper(klass): 14 assert issubclass(klass, Test) 15 assert klass.name() not in _TESTS 16 17 _TESTS[klass.name()] = klass 18 return klass 19 return wrapper 20 21 22def test_dict(): 23 """Return the dict of the registered test classes""" 24 return _TESTS 25 26 27class Test(object): 28 """abstract base class for a Talos test case""" 29 cycles = None # number of cycles 30 keys = [] 31 desktop = True 32 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 33 lower_is_better = True 34 alert_threshold = 2.0 35 36 @classmethod 37 def name(cls): 38 return cls.__name__ 39 40 @classmethod 41 def description(cls): 42 if cls.__doc__ is None: 43 return "No documentation available yet." 44 else: 45 doc = cls.__doc__ 46 description_lines = [i.strip() for i in doc.strip().splitlines()] 47 return "\n".join(description_lines) 48 49 def __init__(self, **kw): 50 self.update(**kw) 51 52 def update(self, **kw): 53 self.__dict__.update(kw) 54 55 def items(self): 56 """ 57 returns a list of 2-tuples 58 """ 59 retval = [('name', self.name())] 60 for key in self.keys: 61 value = getattr(self, key, None) 62 if value is not None: 63 retval.append((key, value)) 64 return retval 65 66 def __str__(self): 67 """string form appropriate for YAML output""" 68 items = self.items() 69 70 key, value = items.pop(0) 71 lines = ["- %s: %s" % (key, value)] 72 for key, value in items: 73 lines.append(' %s: %s' % (key, value)) 74 return '\n'.join(lines) 75 76 77# ts-style startup tests (ts, twinopen, ts_cold, etc) 78# The overall test number is calculated by excluding the max opening time 79# and taking an average of the remaining numbers. 80class TsBase(Test): 81 """abstract base class for ts-style tests""" 82 keys = [ 83 'url', 84 'url_timestamp', 85 'timeout', 86 'cycles', 87 'shutdown', # If True, collect data on shutdown (using the value 88 # provided by __startTimestamp/__endTimestamp). 89 # Otherwise, ignore shutdown data 90 # (__startTimestamp/__endTimestamp is still 91 # required but ignored). 92 'profile_path', # The path containing the template profile. This 93 # directory is copied to the temporary profile during 94 # initialization of the test. If some of the files may 95 # be overwritten by Firefox and need to be reinstalled 96 # before each pass, use key |reinstall| 97 'sps_profile', 98 'sps_profile_interval', 99 'sps_profile_entries', 100 'sps_profile_startup', 101 'preferences', 102 'xperf_counters', 103 'xperf_providers', 104 'xperf_user_providers', 105 'xperf_stackwalk', 106 'tpmozafterpaint', 107 'extensions', 108 'filters', 109 'setup', 110 'cleanup', 111 'reinstall', # A list of files from the profile directory that 112 # should be copied to the temporary profile prior to 113 # running each cycle, to avoid one cycle overwriting 114 # the data used by the next another cycle (may be used 115 # e.g. for sessionstore.js to ensure that all cycles 116 # use the exact same sessionstore.js, rather than a 117 # more recent copy). 118 ] 119 120 121@register_test() 122class ts_paint(TsBase): 123 """ 124 Launches tspaint_test.html with the current timestamp in the url, 125 waits for [MozAfterPaint and onLoad] to fire, then records the end 126 time and calculates the time to startup. 127 """ 128 cycles = 20 129 timeout = 150 130 sps_profile_startup = True 131 sps_profile_entries = 10000000 132 url = 'startup_test/tspaint_test.html' 133 shutdown = False 134 xperf_counters = [] 135 win7_counters = [] 136 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 137 tpmozafterpaint = True 138 rss = False 139 mainthread = False 140 responsiveness = False 141 unit = 'ms' 142 143 144@register_test() 145class sessionrestore(TsBase): 146 """ 147 A start up test measuring the time it takes to load a sessionstore.js file. 148 149 1. Set up Firefox to restore from a given sessionstore.js file. 150 2. Launch Firefox. 151 3. Measure the delta between firstPaint and sessionRestored. 152 """ 153 extensions = \ 154 '${talos}/startup_test/sessionrestore/addon/sessionrestore-signed.xpi' 155 cycles = 10 156 timeout = 1000000 157 sps_profile_startup = True 158 sps_profile_entries = 10000000 159 profile_path = '${talos}/startup_test/sessionrestore/profile' 160 url = 'startup_test/sessionrestore/index.html' 161 shutdown = False 162 reinstall = ['sessionstore.js', 'sessionCheckpoints.json'] 163 # Restore the session 164 preferences = {'browser.startup.page': 3} 165 unit = 'ms' 166 167 168@register_test() 169class sessionrestore_no_auto_restore(sessionrestore): 170 """ 171 A start up test measuring the time it takes to load a sessionstore.js file. 172 173 1. Set up Firefox to *not* restore automatically from sessionstore.js file. 174 2. Launch Firefox. 175 3. Measure the delta between firstPaint and sessionRestored. 176 """ 177 # Restore about:home 178 preferences = {'browser.startup.page': 1} 179 180 181@register_test() 182class tpaint(TsBase): 183 """ 184 Tests the amount of time it takes the open a new window. This test does 185 not include startup time. Multiple test windows are opened in succession, 186 results reported are the average amount of time required to create and 187 display a window in the running instance of the browser. 188 (Measures ctrl-n performance.) 189 """ 190 url = 'file://${talos}/startup_test/tpaint.html?auto=1' 191 timeout = 300 192 sps_profile_interval = 1 193 sps_profile_entries = 2000000 194 tpmozafterpaint = True 195 filters = filter.ignore_first.prepare(5) + filter.median.prepare() 196 unit = 'ms' 197 198 199@register_test() 200class tresize(TsBase): 201 """ 202 This test does some resize thing. 203 """ 204 extensions = '${talos}/startup_test/tresize/addon/tresize-signed.xpi' 205 cycles = 20 206 url = 'startup_test/tresize/addon/content/tresize-test.html' 207 timeout = 150 208 sps_profile_interval = 2 209 sps_profile_entries = 1000000 210 tpmozafterpaint = True 211 filters = filter.ignore_first.prepare(5) + filter.median.prepare() 212 unit = 'ms' 213 214 215# pageloader tests(tp5, etc) 216 217# The overall test number is determined by first calculating the median 218# page load time for each page in the set (excluding the max page load 219# per individual page). The max median from that set is then excluded and 220# the average is taken; that becomes the number reported to the tinderbox 221# waterfall. 222 223 224class PageloaderTest(Test): 225 """abstract base class for a Talos Pageloader test""" 226 tpmanifest = None # test manifest 227 tpcycles = 1 # number of time to run each page 228 cycles = None 229 timeout = None 230 keys = ['tpmanifest', 'tpcycles', 'tppagecycles', 'tprender', 'tpchrome', 231 'tpmozafterpaint', 'tploadnocache', 'rss', 'mainthread', 232 'resolution', 'cycles', 'sps_profile', 'sps_profile_interval', 233 'sps_profile_entries', 'tptimeout', 'win_counters', 'w7_counters', 234 'linux_counters', 'mac_counters', 'tpscrolltest', 'xperf_counters', 235 'timeout', 'shutdown', 'responsiveness', 'profile_path', 236 'xperf_providers', 'xperf_user_providers', 'xperf_stackwalk', 237 'filters', 'preferences', 'extensions', 'setup', 'cleanup', 238 'lower_is_better', 'alert_threshold', 'unit'] 239 240 241@register_test() 242class tabpaint(PageloaderTest): 243 """ 244 Tests the amount of time it takes to open new tabs, triggered from 245 both the parent process and the content process. 246 """ 247 extensions = '${talos}/tests/tabpaint/tabpaint-signed.xpi' 248 tpmanifest = '${talos}/tests/tabpaint/tabpaint.manifest' 249 tppagecycles = 20 250 sps_profile_entries = 1000000 251 tploadnocache = True 252 unit = 'ms' 253 preferences = { 254 # By default, Talos is configured to open links from 255 # content in new windows. We're overriding them so that 256 # they open in new tabs instead. 257 # See http://kb.mozillazine.org/Browser.link.open_newwindow 258 # and http://kb.mozillazine.org/Browser.link.open_newwindow.restriction 259 'browser.link.open_newwindow': 3, 260 'browser.link.open_newwindow.restriction': 2, 261 } 262 263 264@register_test() 265class tps(PageloaderTest): 266 """ 267 Tests the amount of time it takes to switch between tabs 268 """ 269 extensions = '${talos}/tests/tabswitch/tabswitch-signed.xpi' 270 tpmanifest = '${talos}/tests/tabswitch/tps.manifest' 271 tppagecycles = 5 272 sps_profile_entries = 1000000 273 tploadnocache = True 274 preferences = { 275 'addon.test.tabswitch.urlfile': os.path.join('${talos}', 276 'tests', 277 'tp5o.html'), 278 'addon.test.tabswitch.webserver': '${webserver}', 279 # limit the page set number for winxp as we have issues. 280 # see https://bugzilla.mozilla.org/show_bug.cgi?id=1195288 281 'addon.test.tabswitch.maxurls': 282 45 if utils.PLATFORM_TYPE == 'win_' else -1, 283 } 284 unit = 'ms' 285 286 287@register_test() 288class tart(PageloaderTest): 289 """ 290 Tab Animation Regression Test 291 Tests tab animation on these cases: 292 1. Simple: single new tab of about:blank open/close without affecting 293 (shrinking/expanding) other tabs. 294 2. icon: same as above with favicons and long title instead of about:blank. 295 3. Newtab: newtab open with thumbnails preview - without affecting other 296 tabs, with and without preload. 297 4. Fade: opens a tab, then measures fadeout/fadein (tab animation without 298 the overhead of opening/closing a tab). 299 - Case 1 is tested with DPI scaling of 1. 300 - Case 2 is tested with DPI scaling of 1.0 and 2.0. 301 - Case 3 is tested with the default scaling of the test system. 302 - Case 4 is tested with DPI scaling of 2.0 with the "icon" tab 303 (favicon and long title). 304 - Each animation produces 3 test results: 305 - error: difference between the designated duration and the actual 306 completion duration from the trigger. 307 - half: average interval over the 2nd half of the animation. 308 - all: average interval over all recorded intervals. 309 """ 310 tpmanifest = '${talos}/tests/tart/tart.manifest' 311 extensions = '${talos}/tests/tart/addon/tart-signed.xpi' 312 tpcycles = 1 313 tppagecycles = 25 314 tploadnocache = True 315 tpmozafterpaint = False 316 sps_profile_interval = 10 317 sps_profile_entries = 1000000 318 win_counters = w7_counters = linux_counters = mac_counters = None 319 """ 320 ASAP mode 321 The recording API is broken with OMTC before ~2013-11-27 322 After ~2013-11-27, disabling OMTC will also implicitly disable 323 OGL HW composition to disable OMTC with older firefox builds, also 324 set 'layers.offmainthreadcomposition.enabled': False 325 """ 326 preferences = {'layout.frame_rate': 0, 327 'docshell.event_starvation_delay_hint': 1, 328 'dom.send_after_paint_to_content': False} 329 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 330 unit = 'ms' 331 332 333@register_test() 334class cart(PageloaderTest): 335 """ 336 Customize Animation Regression Test 337 Tests Australis customize animations (default DPI scaling). Uses the 338 TART addon but with a different URL. 339 Reports the same animation values as TART (.half/.all/.error). 340 All comments for TART also apply here (e.g. for ASAP+OMTC, etc) 341 Subtests are: 342 1-customize-enter - from triggering customize mode until it's ready for 343 the user 344 2-customize-exit - exiting customize 345 3-customize-enter-css - only the CSS animation part of entering customize 346 """ 347 tpmanifest = '${talos}/tests/tart/cart.manifest' 348 extensions = '${talos}/tests/tart/addon/tart-signed.xpi' 349 tpcycles = 1 350 tppagecycles = 25 351 tploadnocache = True 352 tpmozafterpaint = False 353 sps_profile_interval = 1 354 sps_profile_entries = 10000000 355 win_counters = w7_counters = linux_counters = mac_counters = None 356 """ 357 ASAP mode 358 """ 359 preferences = {'layout.frame_rate': 0, 360 'docshell.event_starvation_delay_hint': 1, 361 'dom.send_after_paint_to_content': False} 362 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 363 unit = 'ms' 364 365 366@register_test() 367class damp(PageloaderTest): 368 """ 369 Devtools At Maximum Performance 370 Tests the speed of DevTools toolbox open, close, and page reload 371 for each tool, across a very simple and very complicated page. 372 """ 373 tpmanifest = '${talos}/tests/devtools/damp.manifest' 374 extensions = '${talos}/tests/devtools/addon/devtools-signed.xpi' 375 tpcycles = 1 376 tppagecycles = 25 377 tploadnocache = True 378 tpmozafterpaint = False 379 sps_profile_interval = 10 380 sps_profile_entries = 1000000 381 win_counters = w7_counters = linux_counters = mac_counters = None 382 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 383 preferences = {'devtools.memory.enabled': True, 384 'addon.test.damp.webserver': '${webserver}'} 385 unit = 'ms' 386 387 388@register_test() 389class glterrain(PageloaderTest): 390 """ 391 Simple rotating WebGL scene with moving light source over a 392 textured terrain. 393 Measures average frame intervals. 394 The same sequence is measured 4 times for combinations of alpha and 395 antialias as canvas properties. 396 Each of these 4 runs is reported as a different test name. 397 """ 398 tpmanifest = '${talos}/tests/webgl/glterrain.manifest' 399 tpcycles = 1 400 tppagecycles = 25 401 tploadnocache = True 402 tpmozafterpaint = False 403 sps_profile_interval = 10 404 sps_profile_entries = 2000000 405 win_counters = w7_counters = linux_counters = mac_counters = None 406 """ ASAP mode """ 407 preferences = {'layout.frame_rate': 0, 408 'docshell.event_starvation_delay_hint': 1, 409 'dom.send_after_paint_to_content': False} 410 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 411 unit = 'frame interval' 412 413 414@register_test() 415class tp5n(PageloaderTest): 416 """ 417 Tests the time it takes Firefox to load the tp5 web page test set. 418 419 The tp5 is an updated web page test set to 100 pages from April 8th, 2011. 420 Effort was made for the pages to no longer be splash screens/login 421 pages/home pages but to be pages that better reflect the actual content 422 of the site in question. 423 """ 424 resolution = 20 425 shutdown = True 426 tpmanifest = '${talos}/tests/tp5n/tp5n.manifest' 427 tpcycles = 1 428 tppagecycles = 1 429 cycles = 1 430 tpmozafterpaint = True 431 tptimeout = 5000 432 rss = True 433 mainthread = True 434 w7_counters = [] 435 win_counters = [] 436 linux_counters = [] 437 mac_counters = [] 438 xperf_counters = ['main_startup_fileio', 'main_startup_netio', 439 'main_normal_fileio', 'main_normal_netio', 440 'nonmain_startup_fileio', 'nonmain_normal_fileio', 441 'nonmain_normal_netio', 'mainthread_readcount', 442 'mainthread_readbytes', 'mainthread_writecount', 443 'mainthread_writebytes'] 444 xperf_providers = ['PROC_THREAD', 'LOADER', 'HARD_FAULTS', 'FILENAME', 445 'FILE_IO', 'FILE_IO_INIT'] 446 xperf_user_providers = ['Mozilla Generic Provider', 447 'Microsoft-Windows-TCPIP'] 448 xperf_stackwalk = ['FileCreate', 'FileRead', 'FileWrite', 'FileFlush', 449 'FileClose'] 450 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 451 timeout = 1800 452 setup = '${talos}/xtalos/start_xperf.py -c ${talos}/bcontroller.json' 453 cleanup = '${talos}/xtalos/parse_xperf.py -c ${talos}/bcontroller.json' 454 preferences = {'extensions.enabledScopes': '', 455 'talos.logfile': 'browser_output.txt'} 456 unit = 'ms' 457 458 459@register_test() 460class tp5o(PageloaderTest): 461 """ 462 Derived from the tp5n pageset, this is the 49 most reliable webpages. 463 """ 464 tpcycles = 1 465 tppagecycles = 25 466 cycles = 1 467 tpmozafterpaint = True 468 tptimeout = 5000 469 rss = True 470 mainthread = False 471 tpmanifest = '${talos}/tests/tp5n/tp5o.manifest' 472 win_counters = ['Main_RSS', 'Private Bytes', '% Processor Time'] 473 w7_counters = ['Main_RSS', 'Private Bytes', '% Processor Time', 474 'Modified Page List Bytes'] 475 linux_counters = ['Private Bytes', 'XRes', 'Main_RSS'] 476 mac_counters = ['Main_RSS'] 477 responsiveness = True 478 sps_profile_interval = 2 479 sps_profile_entries = 4000000 480 filters = filter.ignore_first.prepare(5) + filter.median.prepare() 481 timeout = 1800 482 unit = 'ms' 483 484 485@register_test() 486class tp5o_scroll(PageloaderTest): 487 """ 488 Tests scroll (like tscrollx does, including ASAP) but on the tp5o pageset. 489 """ 490 tpmanifest = '${talos}/tests/tp5n/tp5o.manifest' 491 tpcycles = 1 492 tppagecycles = 12 493 sps_profile_interval = 2 494 sps_profile_entries = 2000000 495 496 tpscrolltest = True 497 """ASAP mode""" 498 tpmozafterpaint = False 499 preferences = {'layout.frame_rate': 0, 500 'docshell.event_starvation_delay_hint': 1, 501 'dom.send_after_paint_to_content': False, 502 'layout.css.scroll-behavior.spring-constant': "'10'", 503 'toolkit.framesRecording.bufferSize': 10000} 504 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 505 unit = '1/FPS' 506 507 508@register_test() 509class v8_7(PageloaderTest): 510 """ 511 This is the V8 (version 7) javascript benchmark taken verbatim and 512 slightly modified to fit into our pageloader extension and talos harness. 513 514 The previous version of this test is V8 version 5 which was run on 515 selective branches and operating systems. 516 """ 517 tpmanifest = '${talos}/tests/v8_7/v8.manifest' 518 sps_profile_interval = 1 519 sps_profile_entries = 1000000 520 tpcycles = 1 521 resolution = 20 522 tpmozafterpaint = False 523 preferences = {'dom.send_after_paint_to_content': False} 524 filters = filter.v8_subtest.prepare() 525 unit = 'score' 526 lower_is_better = False 527 528 529@register_test() 530class kraken(PageloaderTest): 531 """ 532 This is the Kraken javascript benchmark taken verbatim and slightly 533 modified to fit into our pageloader extension and talos harness. 534 """ 535 tpmanifest = '${talos}/tests/kraken/kraken.manifest' 536 tpcycles = 1 537 tppagecycles = 1 538 sps_profile_interval = 0.1 539 sps_profile_entries = 1000000 540 tpmozafterpaint = False 541 preferences = {'dom.send_after_paint_to_content': False} 542 filters = filter.mean.prepare() 543 unit = 'score' 544 545 546@register_test() 547class basic_compositor_video(PageloaderTest): 548 """ 549 Video test 550 """ 551 tpmanifest = '${talos}/tests/video/video.manifest' 552 tpcycles = 1 553 tppagecycles = 12 554 timeout = 10000 555 sps_profile_interval = 1 556 sps_profile_entries = 2000000 557 preferences = {'full-screen-api.allow-trusted-requests-only': False, 558 'layers.acceleration.force-enabled': False, 559 'layers.acceleration.disabled': True, 560 'layout.frame_rate': 0, 561 'docshell.event_starvation_delay_hint': 1, 562 'full-screen-api.warning.timeout': 500, 563 'media.ruin-av-sync.enabled': True} 564 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 565 unit = 'ms/frame' 566 lower_is_better = True 567 568 569@register_test() 570class tcanvasmark(PageloaderTest): 571 """ 572 CanvasMark benchmark v0.6 573 """ 574 tpmanifest = '${talos}/tests/canvasmark/canvasmark.manifest' 575 win_counters = w7_counters = linux_counters = mac_counters = None 576 tpcycles = 5 577 tppagecycles = 1 578 timeout = 900 579 sps_profile_interval = 10 580 sps_profile_entries = 2500000 581 tpmozafterpaint = False 582 preferences = {'dom.send_after_paint_to_content': False} 583 filters = filter.ignore_first.prepare(1) + filter.median.prepare() 584 unit = 'score' 585 lower_is_better = False 586 587 588class dromaeo(PageloaderTest): 589 """abstract base class for dramaeo tests""" 590 filters = filter.dromaeo.prepare() 591 lower_is_better = False 592 alert_threshold = 5.0 593 594 595@register_test() 596class dromaeo_css(dromaeo): 597 """ 598 Dromaeo suite of tests for JavaScript performance testing. 599 See the Dromaeo wiki (https://wiki.mozilla.org/Dromaeo) 600 for more information. 601 602 Each page in the manifest is part of the dromaemo css benchmark. 603 """ 604 sps_profile_interval = 2 605 sps_profile_entries = 10000000 606 tpmanifest = '${talos}/tests/dromaeo/css.manifest' 607 unit = 'score' 608 609 610@register_test() 611class dromaeo_dom(dromaeo): 612 """ 613 Dromaeo suite of tests for JavaScript performance testing. 614 See the Dromaeo wiki (https://wiki.mozilla.org/Dromaeo) 615 for more information. 616 617 Each page in the manifest is part of the dromaemo dom benchmark. 618 """ 619 sps_profile_interval = 2 620 sps_profile_entries = 10000000 621 tpmanifest = '${talos}/tests/dromaeo/dom.manifest' 622 tpdisable_e10s = True 623 unit = 'score' 624 625 626@register_test() 627class tsvgm(PageloaderTest): 628 """ 629 An svg-only number that measures SVG rendering performance. 630 """ 631 tpmanifest = '${talos}/tests/svgx/svgm.manifest' 632 tpcycles = 1 633 tppagecycles = 7 634 tpmozafterpaint = False 635 sps_profile_interval = 10 636 sps_profile_entries = 1000000 637 """ASAP mode""" 638 preferences = {'layout.frame_rate': 0, 639 'docshell.event_starvation_delay_hint': 1, 640 'dom.send_after_paint_to_content': False} 641 filters = filter.ignore_first.prepare(2) + filter.median.prepare() 642 unit = 'ms' 643 644 645@register_test() 646class tsvgx(PageloaderTest): 647 """ 648 An svg-only number that measures SVG rendering performance. 649 """ 650 tpmanifest = '${talos}/tests/svgx/svgx.manifest' 651 tpcycles = 1 652 tppagecycles = 25 653 tpmozafterpaint = False 654 sps_profile_interval = 10 655 sps_profile_entries = 1000000 656 """ASAP mode""" 657 preferences = {'layout.frame_rate': 0, 658 'docshell.event_starvation_delay_hint': 1, 659 'dom.send_after_paint_to_content': False} 660 filters = filter.ignore_first.prepare(5) + filter.median.prepare() 661 unit = 'ms' 662 663 664@register_test() 665class tsvgr_opacity(PageloaderTest): 666 """ 667 An svg-only number that measures SVG rendering performance. 668 """ 669 tpmanifest = '${talos}/tests/svg_opacity/svg_opacity.manifest' 670 tpcycles = 1 671 tppagecycles = 25 672 tpmozafterpaint = True 673 sps_profile_interval = 1 674 sps_profile_entries = 10000000 675 filters = filter.ignore_first.prepare(5) + filter.median.prepare() 676 unit = 'ms' 677 678 679@register_test() 680class tscrollx(PageloaderTest): 681 """ 682 This test does some scrolly thing. 683 """ 684 tpmanifest = '${talos}/tests/scroll/scroll.manifest' 685 tpcycles = 1 686 tppagecycles = 25 687 tpmozafterpaint = False 688 sps_profile_interval = 1 689 sps_profile_entries = 1000000 690 """ ASAP mode """ 691 preferences = {'layout.frame_rate': 0, 692 'docshell.event_starvation_delay_hint': 1, 693 'dom.send_after_paint_to_content': False, 694 'layout.css.scroll-behavior.spring-constant': "'10'", 695 'toolkit.framesRecording.bufferSize': 10000} 696 filters = filter.ignore_first.prepare(5) + filter.median.prepare() 697 unit = 'ms' 698 699 700@register_test() 701class a11yr(PageloaderTest): 702 """ 703 This test ensures basic a11y tables and permutations do not cause 704 performance regressions. 705 """ 706 tpmanifest = '${talos}/tests/a11y/a11y.manifest' 707 tpcycles = 1 708 tppagecycles = 25 709 tpmozafterpaint = True 710 preferences = {'dom.send_after_paint_to_content': False} 711 unit = 'ms' 712 alert_threshold = 5.0 713