# Loading benchmarks [TOC] ## Overview The Telemetry loading benchmarks measure Chrome's loading performance under different network and caching conditions. There are currently three loading benchmarks: - **`loading.desktop`**: A desktop-only benchmark in which each test case measures performance of loading a real world website (e.g: facebook, cnn, alibaba..). - **`loading.mobile`**: A mobile-only benchmark that parallels `loading.desktop` - **`loading.cluster_telemetry`**: A cluster Telemetry benchmark that uses the corpus of top 10 thousands URLs from Alexa. Unlike the other two loading benchmarks which are run continuously on the perf waterfall, this benchmark is triggered on-demand only. # Running the tests remotely If you're just trying to gauge whether your change has caused a loading regression, you can either run `loading.desktop` and `loading.mobile` through [perf try job](https://chromium.googlesource.com/chromium/src/+/master/docs/speed/perf_trybots.md) or you can run `loading.cluster_telemetry` through [Cluster Telemetry service](https://ct.skia.org/) (Cluster Telemetry is for Googler only). ## Running the tests locally For more in-depth analysis and shorter cycle times, it can be helpful to run the tests locally. First, [prepare your test device for Telemetry](https://chromium.googlesource.com/chromium/src/+/master/docs/speed/benchmark/telemetry_device_setup.md). Once you've done this, you can start the Telemetry benchmark with: ``` ./tools/perf/run_benchmark --browser= ``` where `benchmark_name` can be `loading.desktop` or `loading.mobile`. ## Understanding the loading test cases The loading test cases are divided into groups based on their network traffic settings and cache conditions. All available traffic settings can be found in [traffic_setting.py](https://chromium.googlesource.com/catapult/+/master/telemetry/telemetry/page/traffic_setting.py) All available caching conditions can be found in [cache_temperature.py](https://chromium.googlesource.com/catapult/+/master/telemetry/telemetry/page/cache_temperature.py) Test cases of `loading.desktop` and `loading.mobile` are named with their corresponding settings. For example, `DevOpera_cold_3g` test case loads `https://dev.opera.com/` with cold cache and 3G network setting. In additions, the pages are also tagged with labels describing their content. e.g: 'global', 'pwa',... To run only pages of one tags, add `--story-tag-filter=` flag to the run benchmark command. ## Understanding the loading metrics The benchmark output several different loading metrics. The keys one are: * [Time To First Contentful Paint](https://docs.google.com/document/d/1kKGZO3qlBBVOSZTf-T8BOMETzk3bY15SC-jsMJWv4IE/edit#heading=h.27igk2kctj7o) * [Time To First Meaningful Paint](https://docs.google.com/document/d/1BR94tJdZLsin5poeet0XoTW60M0SjvOJQttKT-JK8HI/edit) * [Time to First CPU Idle](https://docs.google.com/document/d/12UHgAW2r7nWo3R6FBerpYuz9EVOdG1OpPm8YmY4yD0c/edit#) Besides those key metrics, there are also breakdown metrics that are meant to to make debugging regressions simpler. These metrics are updated often, for most up to date information, you can email speed-metrics-dev@chromium.org or chrome-speed-metrics@google.com (Googlers only). ## Adding new loading test cases New test cases can be added by modifying [loading_desktop.py](https://chromium.googlesource.com/chromium/src/+/master/tools/perf/page_sets/loading_desktop.py) or [loading_mobile.py](https://chromium.googlesource.com/chromium/src/+/master/tools/perf/page_sets/loading_mobile.py) page sets. For example, to add a new case of loading `https://en.wikipedia.org/wiki/Cats_and_the_Internet` on 2G and 3G networks with warm cache to `news` group to `loading.desktop` benchmark, you would write: ``` self.AddStories( tags=['news'], urls=[('https://en.wikipedia.org/wiki/Cats_and_the_Internet', 'wiki_cats')], cache_temperatures=[cache_temperature_module.WARM], traffic_settings=[traffic_setting_module.2G, traffic_setting_module.3G]) ``` After adding the new page, record it and upload the page archive to cloud storage with: ``` $ ./tools/perf/record_wpr loading_desktop --browser=system \ --story-filter=wiki_cats --upload ``` If the extra story was added to `loading.mobile`, replace `loading_desktop` in the command above with `loading_mobile`.