tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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.