webextension.rst (24717B)
1 ################### 2 Raptor WebExtension 3 ################### 4 5 **Note: WebExtension is being deprecated, new tests should be written using Browsertime** 6 7 .. contents:: 8 :depth: 2 9 :local: 10 11 WebExtension Page-Load Tests 12 ---------------------------- 13 14 Page-load tests involve loading a specific web page and measuring the load performance (i.e. `time-to-first-non-blank-paint <https://wiki.mozilla.org/TestEngineering/Performance/Glossary#First_Non-Blank_Paint_.28fnbpaint.29>`_, first-contentful-paint, `dom-content-flushed <https://wiki.mozilla.org/TestEngineering/Performance/Glossary#DOM_Content_Flushed_.28dcf.29>`_). 15 16 For page-load tests by default, instead of using live web pages for performance testing, Raptor uses a tool called `Mitmproxy <https://wiki.mozilla.org/TestEngineering/Performance/Raptor/Mitmproxy>`_. Mitmproxy allows us to record and playback test pages via a local Firefox proxy. The Mitmproxy recordings are stored on `tooltool <https://github.com/mozilla/build-tooltool>`_ and are automatically downloaded by Raptor when they are required for a test. Raptor uses mitmproxy via the `mozproxy <https://searchfox.org/mozilla-central/source/testing/mozbase/mozproxy>`_ package. 17 18 There are two different types of Raptor page-load tests: warm page-load and cold page-load. 19 20 Warm Page-Load 21 ============== 22 For warm page-load tests, the browser is just started up once; so the browser is warm on each page-load. 23 24 **Raptor warm page-load test process when running on Firefox/Chrome desktop:** 25 26 * A new browser profile is created 27 * The desktop browser is started up 28 * Post-startup browser settle pause of 30 seconds 29 * A new tab is opened 30 * The test URL is loaded; measurements taken 31 * The tab is reloaded 24 more times; measurements taken each time 32 * The measurements from the first page-load are not included in overall results metrics b/c of first load noise; however they are listed in the JSON artifacts 33 34 **Raptor warm page-load test process when running on Firefox android browser apps:** 35 36 * The android app data is cleared (via ``adb shell pm clear firefox.app.binary.name``) 37 * The new browser profile is copied onto the android device SD card 38 * The Firefox android app is started up 39 * Post-startup browser settle pause of 30 seconds 40 * The test URL is loaded; measurements taken 41 * The tab is reloaded 14 more times; measurements taken each time 42 * The measurements from the first page-load are not included in overall results metrics b/c of first load noise; however they are listed in the JSON artifacts 43 44 Cold Page-Load 45 ============== 46 For cold page-load tests, the browser is shut down and restarted between page load cycles, so the browser is cold on each page-load. This is what happens for Raptor cold page-load tests: 47 48 **Raptor cold page-load test process when running on Firefox/Chrome desktop:** 49 50 * A new browser profile is created 51 * The desktop browser is started up 52 * Post-startup browser settle pause of 30 seconds 53 * A new tab is opened 54 * The test URL is loaded; measurements taken 55 * The tab is closed 56 * The desktop browser is shut down 57 * Entire process is repeated for the remaining browser cycles (25 cycles total) 58 * The measurements from all browser cycles are used to calculate overall results 59 60 **Raptor cold page-load test process when running on Firefox Android browser apps:** 61 62 * The Android app data is cleared (via ``adb shell pm clear firefox.app.binary.name``) 63 * A new browser profile is created 64 * The new browser profile is copied onto the Android device SD card 65 * The Firefox Android app is started up 66 * Post-startup browser settle pause of 30 seconds 67 * The test URL is loaded; measurements taken 68 * The Android app is shut down 69 * Entire process is repeated for the remaining browser cycles (15 cycles total) 70 * Note that the SSL cert DB is only created once (browser cycle 1) and copied into the profile for each additional browser cycle, thus not having to use the 'certutil' tool and re-created the db on each cycle 71 * The measurements from all browser cycles are used to calculate overall results 72 73 Using Live Sites 74 ================ 75 It is possible to use live web pages for the page-load tests instead of using the mitmproxy recordings. To do this, add ``--live`` to your command line or select one of the 'live' variants when running ``./mach try fuzzy --full``. 76 77 Disabling Alerts 78 ================ 79 It is possible to disable alerting for all our performance tests. Open the target test manifest such as the raptor-tp6*.ini file (`Raptor tests folder <https://searchfox.org/mozilla-central/source/testing/raptor/raptor/tests>`_), and make sure there are no ``alert_on`` specifications. 80 81 When it's removed there will no longer be a ``shouldAlert`` field in the output Perfherder data (you can find the `schema here <https://searchfox.org/mozilla-central/source/testing/mozharness/external_tools/performance-artifact-schema.json#68,165>`_). As long as ``shouldAlert`` is not in the data, no alerts will be generated. If you need to also disable code sheriffing for the test, then you need to change the tier of the task to 3. 82 83 High value tests 84 ================ 85 86 We have a notion of **high-value** tests in performance testing. These are chosen based on how many alerts they can catch using `this script <https://github.com/gmierz/moz-current-tests/blob/master/high-value-tests/generate_high_value_tests.py>`_ along with `a redash query <https://github.com/gmierz/moz-current-tests/blob/master/high-value-tests/sql_query.txt>`_. The lists below are the minimum set of test pages we should run to catch as many alerts as we can. 87 88 **Desktop** 89 90 Last updated: June 2021 91 92 - amazon 93 - bing 94 - cnn 95 - fandom 96 - gslides 97 - instagram 98 - twitter 99 - wikipedia 100 - yahoo-mail 101 102 **Mobile** 103 104 Last updated: November 2020 105 106 - allrecipes 107 - amazon-search 108 - espn 109 - facebook 110 - google-search 111 - microsoft-support 112 - youtube-watch 113 114 WebExtension Benchmark Tests 115 ---------------------------- 116 117 Standard benchmarks are third-party tests (i.e. Speedometer) that we have integrated into Raptor to run per-commit in our production CI. 118 119 Scenario Tests 120 -------------- 121 122 Currently, there are three subtypes of Raptor-run "scenario" tests, all on (and only on) Android: 123 124 #. **power-usage tests** 125 #. **memory-usage tests** 126 #. **CPU-usage tests** 127 128 For a combined-measurement run with distinct Perfherder output for each measurement type, you can do: 129 130 :: 131 132 ./mach raptor --test raptor-scn-power-idle-bg-fenix --app fenix --binary org.mozilla.fenix.performancetest --host 10.0.0.16 --power-test --memory-test --cpu-test 133 134 Each measurement subtype (power-, memory-, and cpu-usage) will have a corresponding PERFHERDER_DATA blob: 135 136 :: 137 138 22:31:05 INFO - raptor-output Info: PERFHERDER_DATA: {"framework": {"name": "raptor"}, "suites": [{"name": "raptor-scn-power-idle-bg-fenix-cpu", "lowerIsBetter": true, "alertThreshold": 2.0, "value": 0, "subtests": [{"lowerIsBetter": true, "unit": "%", "name": "cpu-browser_cpu_usage", "value": 0, "alertThreshold": 2.0}], "type": "cpu", "unit": "%"}]} 139 22:31:05 INFO - raptor-output Info: cpu results can also be found locally at: /Users/sdonner/moz_src/mozilla-unified/testing/mozharness/build/raptor-cpu.json 140 141 (repeat for power, memory snippets) 142 143 Power-Use Tests (Android) 144 ========================= 145 Prerequisites 146 ^^^^^^^^^^^^^ 147 148 149 #. rooted (i.e. superuser-capable), bootloader-unlocked Google Pixel 6 or Samsung A51: internal (for now) `test-device setup doc. <https://docs.google.com/document/d/1XQLtvVM2U3h1jzzzpcGEDVOp4jMECsgLYJkhCfAwAnc/edit>`_ 150 #. set up to run Raptor from a Firefox source tree (see `Running Locally <https://wiki.mozilla.org/Performance_sheriffing/Raptor#Running_Locally>`_) 151 #. `GeckoView-bootstrapped <https://wiki.mozilla.org/Performance_sheriffing/Raptor#Running_on_the_Android_GeckoView_Example_App>`_ environment 152 153 **Raptor power-use measurement test process when running on Firefox Android browser apps:** 154 155 * The Android app data is cleared, via: 156 157 :: 158 159 adb shell pm clear firefox.app.binary.name 160 161 162 * The new browser profile is copied onto the Android device's SD card 163 * We set ``scenario_time`` to **20 minutes** (1200000 milliseconds), and ``page_timeout`` to '22 minutes' (1320000 milliseconds) 164 165 **It's crucial that ``page_timeout`` exceed ``scenario_time``; if not, measurement tests will fail/bail early** 166 167 * We launch the {Fenix, GeckoView, Reference Browser} on-Android app 168 * Post-startup browser settle pause of 30 seconds 169 * On Fennec only, a new browser tab is created (other Firefox apps use the single/existing tab) 170 * Power-use/battery-level measurements (app-specific measurements) are taken, via: 171 172 :: 173 174 adb shell dumpsys batterystats 175 176 177 * Raw power-use measurement data is listed in the perfherder-data.json/raptor.json artifacts 178 179 In the Perfherder dashboards for these power usage tests, all data points have milli-Ampere-hour units, with a lower value being better. 180 Proportional power usage is the total power usage of hidden battery sippers that is proportionally "smeared"/distributed across all open applications. 181 182 Running Scenario Tests Locally 183 ============================== 184 185 To run on a tethered phone via USB from a macOS host, on: 186 187 Fenix 188 ^^^^^ 189 190 191 :: 192 193 ./mach raptor --test raptor-scn-power-idle-fenix --app fenix --binary org.mozilla.fenix.performancetest --power-test --host 10.252.27.96 194 195 GeckoView 196 ^^^^^^^^^ 197 198 199 :: 200 201 ./mach raptor --test raptor-scn-power-idle-geckoview --app geckoview --binary org.mozilla.geckoview_example --power-test --host 10.252.27.96 202 203 Reference Browser 204 ^^^^^^^^^^^^^^^^^ 205 206 207 :: 208 209 ./mach raptor --test raptor-scn-power-idle-refbrow --app refbrow --binary org.mozilla.reference.browser.raptor --power-test --host 10.252.27.96 210 211 **NOTE:** 212 *it is important that you include* ``--power-test``, *when running power-usage measurement tests, as that will help ensure that local test-measurement data doesn't accidentally get submitted to Perfherder* 213 214 Writing New Tests 215 ================= 216 217 Pushing to Try server 218 ===================== 219 As an example, a relatively good cross-sampling of builds can be seen in https://hg.mozilla.org/try/rev/6c07631a0c2bf56b51bb82fd5543d1b34d7f6c69. 220 221 * Include both G5 Android 7 (hw-g5-7-0-arm7-api-16/) *and* Pixel 2 Android 8 (p2-8-0-android-aarch64/) target platforms 222 * pgo builds tend to be -- from my limited empirical evidence -- about 10 - 15 minutes longer to complete than their opt counterparts 223 224 Dashboards 225 ========== 226 227 See `performance results <https://wiki.mozilla.org/TestEngineering/Performance/Results>`_ for our various dashboards. 228 229 Running WebExtension Locally 230 ---------------------------- 231 232 WebExtension Prerequisites 233 ========================== 234 235 In order to run Raptor on a local machine, you need: 236 237 * A local mozilla repository clone with a `successful Firefox build <https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions>`_ completed 238 * Git needs to be in the path in the terminal/window in which you build Firefox / run Raptor, as Raptor uses Git to check-out a local copy for some of the performance benchmarks' sources. 239 * If you plan on running Raptor tests on Google Chrome, you need a local install of Google Chrome and know the path to the chrome binary 240 * If you plan on running Raptor on Android, your Android device must already be set up (see more below in the Android section) 241 242 Getting a List of Raptor Tests 243 ============================== 244 245 To see which Raptor performance tests are currently available on all platforms, use the 'print-tests' option, e.g.: 246 247 :: 248 249 $ ./mach raptor --print-tests 250 251 That will output all available tests on each supported app, as well as each subtest available in each suite (i.e. all the pages in a specific page-load tp6* suite). 252 253 Running on Firefox 254 ================== 255 256 To run Raptor locally, just build Firefox and then run: 257 258 :: 259 260 $ ./mach raptor --test <raptor-test-name> 261 262 For example, to run the raptor-tp6 pageload test locally, just use: 263 264 :: 265 266 $ ./mach raptor --test raptor-tp6-1 267 268 You can run individual subtests too (i.e. a single page in one of the tp6* suites). For example, to run the amazon page-load test on Firefox: 269 270 :: 271 272 $ ./mach raptor --test raptor-tp6-amazon-firefox 273 274 Raptor test results will be found locally in <your-repo>/testing/mozharness/build/raptor.json. 275 276 Running on the Android GeckoView Example App 277 ============================================ 278 279 When running Raptor tests on a local Android device, Raptor is expecting the device to already be set up and ready to go. 280 281 First, ensure your local host machine has the Android SDK/Tools (i.e. ADB) installed. Check if it is already installed by attaching your Android device to USB and running: 282 283 :: 284 285 $ adb devices 286 287 If your device serial number is listed, then you're all set. If ADB is not found, you can install it by running (in your local mozilla-development repo): 288 289 :: 290 291 $ ./mach bootstrap 292 293 Then, in bootstrap, select the option for "Firefox for Android Artifact Mode," which will install the required tools (no need to do an actual build). 294 295 Next, make sure your Android device is ready to go. Local Android-device prerequisites are: 296 297 * Device is `rooted <https://docs.google.com/document/d/1XQLtvVM2U3h1jzzzpcGEDVOp4jMECsgLYJkhCfAwAnc/edit>`_ 298 299 Note: If you are using Magisk to root your device, use `version 17.3 <https://github.com/topjohnwu/Magisk/releases/tag/v17.3>`_ 300 301 * Device is in 'superuser' mode 302 303 * The geckoview example app is already installed on the device (from ``./mach bootstrap``, above). Download the geckoview_example.apk from the appropriate `android build on treeherder <https://treeherder.mozilla.org/#/jobs?repo=mozilla-central&searchStr=android%2Cbuild>`_, then install it on your device, i.e.: 304 305 :: 306 307 $ adb install -g ../Downloads/geckoview_example.apk 308 309 The '-g' flag will automatically set all application permissions ON, which is required. 310 311 Note, when the Gecko profiler should be run, or a build with build symbols is needed, then use a `Nightly build of geckoview_example.apk <https://treeherder.mozilla.org/#/jobs?repo=mozilla-central&searchStr=nightly%2Candroid>`_. 312 313 When updating the geckoview example app, you MUST uninstall the existing one first, i.e.: 314 315 :: 316 317 $ adb uninstall org.mozilla.geckoview_example 318 319 Once your Android device is ready, and attached to local USB, from within your local mozilla repo use the following command line to run speedometer: 320 321 :: 322 323 $ ./mach raptor --test raptor-speedometer --app=geckoview --binary="org.mozilla.geckoview_example" 324 325 Note: Speedometer on Android GeckoView is currently running on two devices in production - the Google Pixel 6 and the Samsung A51 - therefore it is not guaranteed that it will run successfully on all/other untested android devices. 326 327 To run a Raptor page-load test (i.e. tp6m-1) on the GeckoView Example app, use this command line: 328 329 :: 330 331 $ ./mach raptor --test raptor-tp6m-1 --app=geckoview --binary="org.mozilla.geckoview_example" 332 333 A couple notes about debugging: 334 335 * Raptor browser-extension console messages *do* appear in adb logcat via the GeckoConsole - so this is handy: 336 337 :: 338 339 $ adb logcat | grep GeckoConsole 340 341 * You can also debug Raptor on Android using the Firefox WebIDE; click on the Android device listed under "USB Devices" and then "Main Process" or the 'localhost: Speedometer.." tab process 342 343 Raptor test results will be found locally in <your-repo>/testing/mozharness/build/raptor.json. 344 345 Running on Google Chrome 346 ======================== 347 348 To run Raptor locally on Google Chrome, make sure you already have a local version of Google Chrome installed, and then from within your mozilla-repo run: 349 350 :: 351 352 $ ./mach raptor --test <raptor-test-name> --app=chrome --binary="<path to google chrome binary>" 353 354 For example, to run the raptor-speedometer benchmark on Google Chrome use: 355 356 :: 357 358 $ ./mach raptor --test raptor-speedometer --app=chrome --binary="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome 359 360 Raptor test results will be found locally in <your-repo>/testing/mozharness/build/raptor.json. 361 362 Page-Timeouts 363 ============= 364 365 On different machines the Raptor tests will run at different speeds. The default page-timeout is defined in each Raptor test INI file. On some machines you may see a test failure with a 'raptor page-timeout' which means the page-load timed out, or the benchmark test iteration didn't complete, within the page-timeout limit. 366 367 You can override the default page-timeout by using the --page-timeout command-line arg. In this example, each test page in tp6-1 will be given two minutes to load during each page-cycle: 368 369 :: 370 371 ./mach raptor --test raptor-tp6-1 --page-timeout 120000 372 373 If an iteration of a benchmark test is not finishing within the allocated time, increase it by: 374 375 :: 376 377 ./mach raptor --test raptor-speedometer --page-timeout 600000 378 379 Page-Cycles 380 =========== 381 382 Page-cycles is the number of times a test page is loaded (for page-load tests); for benchmark tests, this is the total number of iterations that the entire benchmark test will be run. The default page-cycles is defined in each Raptor test INI file. 383 384 You can override the default page-cycles by using the --page-cycles command-line arg. In this example, the test page will only be loaded twice: 385 386 :: 387 388 ./mach raptor --test raptor-tp6-google-firefox --page-cycles 2 389 390 Running Page-Load Tests on Live Sites 391 ===================================== 392 To use live pages instead of page recordings, just edit the `Raptor tp6* test INI <https://searchfox.org/mozilla-central/source/testing/raptor/raptor/tests>`_ file and add the following attribute either at the top (for all pages in the suite) or under an individual page/subtest heading: 393 394 use_live_pages = true 395 396 With that setting, Raptor will not start the playback tool (i.e. Mitmproxy) and will not turn on the corresponding browser proxy, therefore forcing the test page to load live. 397 398 Running Raptor on Try 399 --------------------- 400 401 Raptor tests can be run on `try <https://treeherder.mozilla.org/#/jobs?repo=try>`_ on both Firefox and Google Chrome. (Raptor pageload-type tests are not supported on Google Chrome yet, as mentioned above). 402 403 **Note:** Raptor is currently 'tier 2' on `Treeherder <https://treeherder.mozilla.org/#/jobs?repo=try>`_, which means to see the Raptor test jobs you need to ensure 'tier 2' is selected / turned on in the Treeherder 'Tiers' menu. 404 405 The easiest way to run Raptor tests on try is to use mach try fuzzy: 406 407 :: 408 409 $ ./mach try fuzzy --full 410 411 Then type 'raptor' and select which Raptor tests (and on what platforms) you wish to run. 412 413 To see the Raptor test results on your try run: 414 415 #. In treeherder select one of the Raptor test jobs (i.e. 'sp' in 'Rap-e10s', or 'Rap-C-e10s') 416 #. Below the jobs, click on the "Performance" tab; you'll see the aggregated results listed 417 #. If you wish to see the raw replicates, click on the "Job Details" tab, and select the "perfherder-data.json" artifact 418 419 Raptor Hardware in Production 420 ============================= 421 422 The Raptor performance tests run on dedicated hardware (the same hardware that the Talos performance tests use). See the `performance platforms <https://wiki.mozilla.org/TestEngineering/Performance/Platforms>`_ for more details. 423 424 Profiling Raptor Jobs 425 --------------------- 426 427 Raptor tests are able to create Gecko profiles which can be viewed in `profiler.firefox.com. <https://profiler.firefox.com/>`__ This is currently only supported when running Raptor on Firefox desktop. 428 429 Nightly Profiling Jobs in Production 430 ==================================== 431 We have Firefox desktop Raptor jobs with Gecko-profiling enabled running Nightly in production on Mozilla Central (on Linux64, Win10, and OSX). This provides a steady cache of Gecko profiles for the Raptor tests. Search for the `"Rap-Prof" treeherder group on Mozilla Central <https://treeherder.mozilla.org/#/jobs?repo=mozilla-central&searchStr=Rap-Prof>`_. 432 433 Profiling Locally 434 ================= 435 436 To tell Raptor to create Gecko profiles during a performance test, just add the '--gecko-profile' flag to the command line, i.e.: 437 438 :: 439 440 $ ./mach raptor --test raptor-sunspider --gecko-profile 441 442 When the Raptor test is finished, you will be able to find the resulting gecko profiles (ZIP) located locally in: 443 444 mozilla-central/testing/mozharness/build/blobber_upload_dir/ 445 446 Note: While profiling is turned on, Raptor will automatically reduce the number of pagecycles to 3. If you wish to override this, add the --page-cycles argument to the raptor command line. 447 448 Raptor will automatically launch Firefox and load the latest Gecko profile in `profiler.firefox.com <https://profiler.firefox.com>`__. To turn this feature off, just set the DISABLE_PROFILE_LAUNCH=1 env var. 449 450 If auto-launch doesn't work for some reason, just start Firefox manually and browse to `profiler.firefox.com <https://profiler.firefox.com>`__, click on "Browse" and select the Raptor profile ZIP file noted above. 451 452 If you're on Windows and want to profile a Firefox build that you compiled yourself, make sure it contains profiling information and you have a symbols zip for it, by following the `directions on MDN <https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler_and_Local_Symbols_on_Windows#Profiling_local_talos_runs>`_. 453 454 Profiling on Try Server 455 ======================= 456 457 To turn on Gecko profiling for Raptor test jobs on try pushes, just add the '--gecko-profile' flag to your try push i.e.: 458 459 :: 460 461 $ ./mach try fuzzy --gecko-profile 462 463 Then select the Raptor test jobs that you wish to run. The Raptor jobs will be run on try with profiling included. While profiling is turned on, Raptor will automatically reduce the number of pagecycles to 2. 464 465 See below for how to view the gecko profiles from within treeherder. 466 467 Customizing the profiler 468 ======================== 469 If the default profiling options are not enough, and further information is needed the gecko profiler can be customized. 470 471 Enable profiling of additional threads 472 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 473 In some cases it will be helpful to also measure threads which are not part of the default set. Like the **MediaPlayback** thread. This can be accomplished by using: 474 475 #. the **gecko_profile_threads** manifest entry, and specifying the thread names as comma separated list 476 #. the **--gecko-profile-thread** argument for **mach** for each extra thread to profile 477 478 Add Profiling to Previously Completed Jobs 479 ========================================== 480 481 Note: You might need treeherder 'admin' access for the following. 482 483 Gecko profiles can now be created for Raptor performance test jobs that have already completed in production (i.e. mozilla-central) and on try. To repeat a completed Raptor performance test job on production or try, but add gecko profiling, do the following: 484 485 #. In treeherder, select the symbol for the completed Raptor test job (i.e. 'ss' in 'Rap-e10s') 486 #. Below, and to the left of the 'Job Details' tab, select the '...' to show the menu 487 #. On the pop-up menu, select 'Create Gecko Profile' 488 489 The same Raptor test job will be repeated but this time with gecko profiling turned on. A new Raptor test job symbol will be added beside the completed one, with a '-p' added to the symbol name. Wait for that new Raptor profiling job to finish. See below for how to view the gecko profiles from within treeherder. 490 491 Viewing Profiles on Treeherder 492 ============================== 493 When the Raptor jobs are finished, to view the gecko profiles: 494 495 #. In treeherder, select the symbol for the completed Raptor test job (i.e. 'ss' in 'Rap-e10s') 496 #. Click on the 'Job Details' tab below 497 #. The Raptor profile ZIP files will be listed as job artifacts; 498 #. Select a Raptor profile ZIP artifact, and click the 'view in Firefox Profiler' link to the right 499 500 Recording Pages for Raptor Pageload Tests 501 ----------------------------------------- 502 503 Raptor pageload tests ('tp6' and 'tp6m' suites) use the `Mitmproxy <https://mitmproxy.org/>`__ tool to record and play back page archives. For more information on creating new page playback archives, please see `Raptor and Mitmproxy <https://wiki.mozilla.org/TestEngineering/Performance/Raptor/Mitmproxy>`__. 504 505 Performance Tuning for Android devices 506 -------------------------------------- 507 508 When the test is run against Android, Raptor executes a series of performance tuning commands over the ADB connection. 509 510 Device agnostic: 511 512 * memory bus 513 * device remain on when on USB power 514 * virtual memory (swappiness) 515 * services (thermal throttling, cpu throttling) 516 * i/o scheduler 517 518 Device specific: 519 520 * cpu governor 521 * cpu minimum frequency 522 * gpu governor 523 * gpu minimum frequency 524 525 For a detailed list of current tweaks, please refer to `this <https://searchfox.org/mozilla-central/source/testing/raptor/raptor/raptor.py#676>`_ Searchfox page.