Performance/Pageloader

From MozillaWiki
Jump to: navigation, search

The pageloader component is the core of many of the performance tests that we run via Talos and otherwise, including Tp3, Tsvg, Tgfx, and others.

The core of the test captures the amount of time between when a page load is requested (that is, when loadURI is called on the content element) and when the 'load' event is fired on the content. Additionally, the harness can also time page render times separately.

Installation

If you have a build with --enable-tests, the pageloader component is built and installed by default; no further building is needed. Otherwise, read on.

The net result of the build are three files in the dist directory:

  • dist/bin/components/tp-cmdline.js
  • dist/bin/chrome/pageloader.jar
  • dist/bin/chrome/pageloader.manifest

For an easy install in an existing firefox build (even a binary build such as a nightly), grab the pageloader and reftest files from here, and unzip in the dist/bin directory. The files will get placed into the components or chrome dirs as appropriate.

If you wish to examine or modify the pageloader, the code lives in mozilla/layout/tools/pageloader. You can either manually run make inside that directory in your objdir.

Running

The pageloader is driven by a manifest file and a set of command line flags. Running ./firefox -help shows the pageloader options, all of which start with "-tp". If these aren't present, then the pageloader components are not available or correctly installed.

-tp file

Required. file contains the manifest of pages to test; see below for more information.

-tpcycles n

Default: 5. Loop through the selected pages from the manifest n times.

-tpfilter regexp

Optional. Only include pages from the manifest that match regexp.

-tpstart n

Optional. Start on the nth entry in the manifest.

-tpend n

Optional. End on the n<i>th entry in the manifest.

-tpformat <i>f1,f2,...</i>

Default: js. Display results in the given formats. Supported formats are <i>text,tinderbox,js. See below for samples of each format.

-tpchrome

Run tests within the full browser chrome. Without this flag, pages are loaded in a plain toplevel window, without any additional browser functionality enabled.

-tprender

Run the render benchmark for each page in the manifest, along with timing page load. This will time how long it takes to redraw each page once it's already been loaded, and is most useful for measuring rendering speed.

-tpwidth width, -tpheight height

Run the tests in a window of width x height. Default: 1024x768.

-tpoffline

Force the browser into offline mode while running tests, to ensure that no network connections are created.

-tpnoisy

Dump the last loaded page to the console as the test progresses.

-tptimeout n

Default: none. Maximum amount of time to wait for a page to load, in milliseconds; if the page takes longer than this to load, abort.

-tpnoforcecc

Don't force cycle collection between each pageload. If this isn't done, pageload times can be skewed due to cycle collection kicking in while a page is loading. In normal browsing usage, CC is done during times when the user is idle.

The Manifest File

The manifest file is a simple text file with instructions on which URLs to load. Whitespace and other special characters in URLs must be %-escaped. Comments begin with #, and blank lines are ignored.

URLs are listed one per line, in the order that they should be loaded.

Tests may do their own timing, instead of relying on the automatic timing by the test harness. If a URL line starts with a "%", the test does its own timing. Such a test should call "tpRecordTime" in their JS and pass the number of milliseconds the test took.

Additionally, an include directive may be called to include another manifest.

Example manifest:

# This is a comment

# Load news.google.com
http://news.google.com/

# Load sometest.html in the same location as the manifest
sometest.html

# Load gfxtest.html in the same location as the manifest,
# and indicate that it will do its own timing
% gfxtest.html

# Then include morepages.manifest
include morepages.manifest

Note that to obtain stable numbers, it is generally best to set up a local http server with cached versions of all content that is to be loaded. However, measuring live http sites over the internet can be useful, as is using local files using file:///.

Output Formats

Four different output formats are supported by the pageloader harness, and one or more can be given as arguments to the -tpformat flag. Output is printed using the javascript dump() command; as such, the profile in use must have the "browser.dom.window.dump.enabled" pref set to true to see any output.

text

Human-readable format. Example:

============================================================
    Page                                     mean  stdd   min   max raw
  0 yahoo.com/www.yahoo.com/index.html         89     2    85   315 315,90,85,88,91
  1 msn.com/www.msn.com/index.html            342     5   336   938 938,336,347,338,346
  2 google.com/www.google.com/index.html       55     5    49   113 113,56,52,49,61
  3 baidu.com/www.baidu.com/index.html         46     3    43   951 951,43,44,44,51
Cycle collection: 1070
============================================================

js

Mostly-JSON-like format; useful for automated tools. Example:

([
({page:"yahoo.com/www.yahoo.com/index.html", value:88.5, stddev:2.29128784747792}),
({page:"msn.com/www.msn.com/index.html", value:341.75, stddev:4.815340071064556}),
({page:"google.com/www.google.com/index.html", value:54.5, stddev:4.5}),
({page:"baidu.com/www.baidu.com/index.html", value:45.5, stddev:3.2015621187164243}),
])

tinderbox

Legacy tinderbox reporting format. Example:

__start_tp_report
_x_x_mozilla_page_load,63.5,NaN,NaN
_x_x_mozilla_page_load_details,avgmedian|63.5|average|62.83|minimum|NaN|maximum|NaN|stddev|NaN
|0;yahoo.com/www.yahoo.com/index.html;89;88.5;85;315;315;90;85;88;91
|1;msn.com/www.msn.com/index.html;346.5;341.75;336;938;938;336;347;338;346
|2;google.com/www.google.com/index.html;54;54.5;49;113;113;56;52;49;61
|3;baidu.com/www.baidu.com/index.html;47.5;45.5;43;951;951;43;44;44;51
__end_tp_report
__start_cc_report
_x_x_mozilla_cycle_collect,1070
__end_cc_report

Example Commandlines

./firefox -P test -no-remote -tp pages.manifest -tpcycles 5 -tpoffline

Run using the "test" profile, without trying to contact an already running firefox (-no-remote). Read URLs from pages.manifest, run 5 cycles, and work offline.

./firefox -P test -no-remote -tp pages.manifest -tpstart 5 -tpend 10 -tprender -tpformat text -tpnoisy

Run pages 5..10 from pages.manifest, run the render benchmark after each pageload, and print the results as text. Also print each URL as it's loaded.

Bugs and Patches

Any bugs or patches should be submitted to the Testing:General component.