Skip to content

Commit

Permalink
Merge branch 'pageload'
Browse files Browse the repository at this point in the history
  • Loading branch information
nwgh committed Mar 19, 2013
2 parents 81fc96e + 971a442 commit e26fc65
Show file tree
Hide file tree
Showing 77 changed files with 5,118 additions and 1,381 deletions.
9 changes: 9 additions & 0 deletions config.ini.example
Expand Up @@ -86,6 +86,11 @@ keep = 50
# corresponds to 15 minutes # corresponds to 15 minutes
timeout = 900 timeout = 900


[firefox]
# How long to wait for firefox before killing it, in seconds. The value below
# corresponds to 15 minutes
timeout = 900

[mqproxy] [mqproxy]
# Where to keep the proxy database for windows queue entries # Where to keep the proxy database for windows queue entries
db = /Users/hurley/src/stoneridge/testroot/mqproxy.db db = /Users/hurley/src/stoneridge/testroot/mqproxy.db
Expand All @@ -112,6 +117,10 @@ download_suffix = dmg
# firefox for win and linux, and FirefoxNightly.app/Contents/MacOS for mac # firefox for win and linux, and FirefoxNightly.app/Contents/MacOS for mac
firefox_path = FirefoxNightly.app/Contents/MacOS firefox_path = FirefoxNightly.app/Contents/MacOS


# The name of the firefox binary, firefox for mac and linux, firefox.exe
# for windows
firefox = firefox

# The name of the xpcshell binary, xpcshell for mac and linux, xpcshell.exe # The name of the xpcshell binary, xpcshell for mac and linux, xpcshell.exe
# for windows # for windows
xpcshell = xpcshell xpcshell = xpcshell
Expand Down
68 changes: 19 additions & 49 deletions head.js
Expand Up @@ -7,36 +7,24 @@
* test suite. This must be run under xpcshell running in JS v1.8 mode. * test suite. This must be run under xpcshell running in JS v1.8 mode.
*/ */


/*jshint curly:true, indent:4, latedef:true, undef:true,
trailing:true, es5:true, esnext:true*/
/*global Components:true, run_test:true, _SR_OUT_FILE:true,
do_save_results:true*/

var STONERIDGE_FINISHED = null; var STONERIDGE_FINISHED = null;
var STONERIDGE_RESULTS = null;


var Cc = Components.classes; var Cc = Components.classes;
var Ci = Components.interfaces; var Ci = Components.interfaces;
var Cr = Components.results; var Cr = Components.results;


/*
* Store some results for writing once we're all done
*/
function do_write_result(key, start, stop) {
var startms = start.valueOf();
var stopms = stop.valueOf();

var val = {'start':startms, 'stop':stopms, 'total':stopms - startms};

if (STONERIDGE_RESULTS.hasOwnProperty(key)) {
STONERIDGE_RESULTS[key].push(val);
} else {
STONERIDGE_RESULTS[key] = [val];
}
}

/* /*
* This is used to indicate that the tests are done. Now that we know we're * This is used to indicate that the tests are done. Now that we know we're
* done, we can write the results to disk for the python harness to do its thing * done, we can write the results to disk for the python harness to do its thing
* with. * with.
*/ */
function do_test_finish() { function do_test_finish() {
STONERIDGE_FINISHED = true; STONERIDGE_FINISHED = true;
} }


/* /*
Expand All @@ -45,45 +33,27 @@ function do_test_finish() {
*/ */
function do_test_pending() {} function do_test_pending() {}


function _do_save_results() {
// Create a file pointing to our output directory
var ofile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
ofile.initWithPath(_SR_OUT_SUBDIR);

// And use the file determined by our caller
ofile.append(_SR_OUT_FILE);

// Now get an output stream for our file
var ostream = Cc["@mozilla.org/network/file-output-stream;1"].
createInstance(Ci.nsIFileOutputStream);
ostream.init(ofile, -1, -1, 0);

var jstring = JSON.stringify(STONERIDGE_RESULTS);
ostream.write(jstring, jstring.length);
ostream.close();
}

function make_channel(url) { function make_channel(url) {
var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
return ios.newChannel(url, "", null); return ios.newChannel(url, "", null);
} }


/* /*
* The main entry point for all stone ridge tests * The main entry point for all stone ridge tests
*/ */
function do_stoneridge() { function do_stoneridge() {
STONERIDGE_FINISHED = false; STONERIDGE_FINISHED = false;
STONERIDGE_RESULTS = {};


run_test(); run_test();


// Pump the event loop until we're told to stop // Pump the event loop until we're told to stop
var thread = Cc["@mozilla.org/thread-manager;1"]. var thread = Cc["@mozilla.org/thread-manager;1"].getService().currentThread;
getService().currentThread; while (!STONERIDGE_FINISHED) {
while (!STONERIDGE_FINISHED) thread.processNextEvent(true);
thread.processNextEvent(true); }
while (thread.hasPendingEvents()) while (thread.hasPendingEvents()) {
thread.processNextEvent(true); thread.processNextEvent(true);
}


_do_save_results(); do_save_results(_SR_OUT_FILE);
} }
45 changes: 0 additions & 45 deletions linux/init/client/srworker

This file was deleted.

16 changes: 16 additions & 0 deletions linux/user/etc_gdm_custom.conf
@@ -0,0 +1,16 @@
# GDM configuration storage

[daemon]
AutomaticLoginEnable=true
AutomaticLogin=hurley

[security]

[xdmcp]

[greeter]

[chooser]

[debug]

9 changes: 9 additions & 0 deletions linux/user/srterm.py
@@ -0,0 +1,9 @@
#!/usr/bin/env python

import subprocess

SRWRAPPER = '/home/hurley/srhome/stoneridge/linux/user/srwrapper.py'

p = subprocess.Popen(['/usr/bin/gnome-terminal', '-t', 'Stone Ridge',
'-e', SRWRAPPER])
p.wait()
23 changes: 23 additions & 0 deletions linux/user/srwrapper.py
@@ -0,0 +1,23 @@
#!/usr/bin/env python

import subprocess
import sys
import time

SRHOME = '/home/hurley/srhome'
SRPYTHON = '%s/stoneridge' % (SRHOME,)
SRRUN = '%s/srrun.py' % (SRPYTHON,)
SRWORKER = '%s/srworker.py' % (SRPYTHON,)
SRINI = '%s/stoneridge.ini' % (SRHOME,)
LOG = '%s/srworker.log' % (SRHOME,)

cli = [sys.executable, SRRUN, SRWORKER, '--config', SRINI, '--log', LOG]

p = subprocess.Popen(cli)
p.wait()

while True:
# Sleep indefinitely in case of failure, so we choose when to kill the
# terminal. This isn't particularly useful on the actual infrastructure,
# but it works great for debugging errors during testing.
time.sleep(60)
10 changes: 10 additions & 0 deletions linux/user/stoneridge.desktop
@@ -0,0 +1,10 @@

[Desktop Entry]
Type=Application
Exec=/home/hurley/srhome/stoneridge/linux/user/srterm.py
Hidden=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Stone Ridge
Name=Stone Ridge
Comment[en_US]=Start a terminal running the stone ridge worker
Comment=Start a terminal running the stone ridge worker
27 changes: 0 additions & 27 deletions osx/org.mozilla.srworker.plist

This file was deleted.

10 changes: 10 additions & 0 deletions osx/terminal_setup.sh
@@ -0,0 +1,10 @@
#!/bin/sh

defaults write com.apple.Terminal 'Window Settings' -dict-add 'Stone Ridge' '{ CommandString = "/usr/local/bin/python /Users/hurley/srhome/stoneridge/srworker.py --config /Users/hurley/srhome/stoneridge.ini --log /Users/hurley/srhome/srworker.log"; ProfileCurrentVersion = "2.02"; RunCommandAsShell = 0; name = "Stone Ridge"; type = "Window Settings"; }'
defaults write com.apple.Terminal 'Default Window Settings' 'Stone Ridge'
defaults write com.apple.Terminal 'Startup Window Settings' 'Stone Ridge'
osascript -e 'tell app "System Events"
make login item at end with properties {path:"/Applications/Utilities/Terminal.app", hidden:false}
end tell'
echo "Setting auto login user (needs root privs)"
sudo defaults write /Library/Preferences/com.apple.loginwindow.plist autoLoginUser hurley
65 changes: 65 additions & 0 deletions pageloader/README
@@ -0,0 +1,65 @@
Pageload Test Component
=======================

Usage:

./firefox -tp file:///path/to/manifest.txt [-tpargs...]

See ./firefox -help for other arguments.


Manifest file format
====================

Comments in the manifest file start with a #. Each line may be:

* a URL (absolute or relative to the manifest)

This URL is added to the list of tests.

* one or more flags, followed by whitespace, followed by a URL

The only flag supported currently is '%', which indicates that
a test will do its own timing. (See Self-timing Tests below.)

* "include" followed by whitespace, followed by a URL

Parse the given manifest file.

Self-timing Tests
=================

Most timing tests are interested in timing how long it takes the page
to load; that is, from the start of page loading until the 'load'
event is dispatched. By default, this is what the pageloader will
time. However, if a test URL has the % flag, the test is expected to
report its own timing. For this purpose, the pageloader will provide
a function named "tpRecordTime" in the test's global object that it
should call once it has performed whatever timing it wants to do.
The given value will be used as the timing result for this test.

Output format
=============

The result is a dump to stdout via dump() --
browser.dom.window.dump.enabled must be set to true in the profile.

Sample output:

__start_tp_report
_x_x_mozilla_page_load,778.5,NaN,NaN
_x_x_mozilla_page_load_details,avgmedian|778.5|average|766.75|minimum|NaN|maximum|NaN|stddev|NaN|0;file:///c:/proj/mozilla-cvs/perf/tp2/base/www.cnn.com/index.html;778.5;766.75;722;1027;1027;788;777;722;780|...
__end_tp_report

Note that the minimum, maximum, stddev are not calculated; they're
always reported as NaN. (They were the minimum and maximum values of
any sampled value, and the standard deviation across all sampled
values -- not very useful.)

TODO
====

* Command line option to choose whether to run with or without browser chrome. Currently runs without.

* Tinderbox-dropping style output
* better yet would be to teach tinderbox about JSON
4 changes: 4 additions & 0 deletions pageloader/chrome.manifest
@@ -0,0 +1,4 @@
content srpl chrome/
component {E17FB86D-1CEB-4B67-8A6C-5B97AD068A7F} components/sr-cmdline.js
contract @mozilla.org/commandlinehandler/general-startup;1?type=sr {E17FB86D-1CEB-4B67-8A6C-5B97AD068A7F}
category command-line-handler m-sr @mozilla.org/commandlinehandler/general-startup;1?type=sr

0 comments on commit e26fc65

Please sign in to comment.