diff --git a/startup_test/twinopen/child-window.html b/startup_test/twinopen/child-window.html --- a/startup_test/twinopen/child-window.html +++ b/startup_test/twinopen/child-window.html @@ -1,5 +1,30 @@ - + + + + + diff --git a/startup_test/twinopen/winopen.js b/startup_test/twinopen/winopen.js --- a/startup_test/twinopen/winopen.js +++ b/startup_test/twinopen/winopen.js @@ -1,14 +1,11 @@ // target for window.open() const KID_URL = "child-window.html"; -// formats final results -const SERVER_URL = "http://jrgm.mcom.com/cgi-bin/window-open-2.0/openreport.pl"; - // let system settle between each window.open const OPENER_DELAY = 1000; // three phases: single open/close; overlapped open/close; open-all/close-all var PHASE_ONE = 10; var PHASE_TWO = 0; var PHASE_THREE = 0; @@ -16,16 +13,19 @@ var PHASE_THREE = 0; var OVERLAP_COUNT = 3; // repeat three phases CYCLES times var CYCLES = 1; // autoclose flag var AUTOCLOSE = 1; +// Dump results to talos +var TALOSLOG = 1; + // Chrome url for child windows. var KID_CHROME = null; var SAVED_CHROME = null; // URL options and correspnding vars. const options = [ [ "phase1", "PHASE_ONE", false ], [ "phase2", "PHASE_TWO", false ], [ "phase3", "PHASE_THREE", false ], @@ -69,39 +69,44 @@ if ( KID_CHROME ) { } const CYCLE_SIZE = PHASE_ONE + PHASE_TWO + PHASE_THREE; const MAX_INDEX = CYCLE_SIZE * CYCLES; // total number of windows to open var windowList = []; // handles to opened windows var startingTimes = []; // time that window.open is called var openingTimes = []; // time that child window took to fire onload +var paintingTimes = []; // time that child window took to fire MozAfterPaint var closingTimes = []; // collect stats for case of closing >1 windows var currentIndex = 0; -function childIsOpen(aTime) { - openingTimes[currentIndex] = aTime - startingTimes[currentIndex]; - updateDisplay(currentIndex, openingTimes[currentIndex]); +function childIsOpen(aLoadTime, aPaintTime) { + openingTimes[currentIndex] = aLoadTime - startingTimes[currentIndex]; + paintingTimes[currentIndex] = aPaintTime - startingTimes[currentIndex]; + updateDisplay(currentIndex, openingTimes[currentIndex], paintingTimes[currentIndex]); reapWindows(currentIndex); currentIndex++; if (currentIndex < MAX_INDEX) scheduleNextWindow(); else window.setTimeout(reportResults, OPENER_DELAY); } -function updateDisplay(index, time) { +function updateDisplay(index, aLoadTime, aPaintTime) { var formIndex = document.getElementById("formIndex"); if (formIndex) formIndex.setAttribute("value", index+1); var formTime = document.getElementById("formTime"); if (formTime) - formTime.setAttribute("value", time); + formTime.setAttribute("value", aLoadTime); + var paintTime = document.getElementById("paintTime"); + if (paintTime) + paintTime.setAttribute("value", aPaintTime); } function scheduleNextWindow() { window.setTimeout(openWindow, OPENER_DELAY); } @@ -164,70 +169,114 @@ function calcMedian( numbers ) { } else { numbers.sort( function (a,b){ return a-b; } ); var n = Math.floor( numbers.length / 2 ); return numbers.length % 2 ? numbers[n] : ( numbers[n-1] + numbers[n] ) / 2; } } function reportResults() { + reportLoadResults(); + reportPaintResults(); + // Close the root window, if required. + if ( AUTOCLOSE ) { + goQuitApplication(); + window.close(); + } +} + +function reportLoadResults() { //XXX need to create a client-side method to do this? var opening = openingTimes.join(':'); // times for each window open var closing = closingTimes.join(':'); // these are for >1 url, as a group - //var ua = escape(navigator.userAgent).replace(/\+/g, "%2B"); // + == ' ', on servers - //var reportURL = SERVER_URL + - // "?opening=" + opening + - // "&closing=" + closing + - // "&maxIndex=" + MAX_INDEX + - // "&cycleSize=" + CYCLE_SIZE + - //"&ua=" + ua; - //window.open(reportURL, "test-results"); var avgOpenTime = 0; var minOpenTime = 99999; var maxOpenTime = 0; var medOpenTime = calcMedian( openingTimes.slice(1) ); + // ignore first open for (i = 1; i < MAX_INDEX; i++) { avgOpenTime += openingTimes[i]; if ( minOpenTime > openingTimes[i] ) { minOpenTime = openingTimes[i]; } if ( maxOpenTime < openingTimes[i] ) { maxOpenTime = openingTimes[i]; } } + avgOpenTime = Math.round(avgOpenTime / (MAX_INDEX - 1)); - dumpLog("__start_report" + openingTimes.join('|') + "__end_report"); - var now = (new Date()).getTime(); - dumpLog("__startTimestamp" + now + "__endTimestamp\n"); - dumpLog("openingTimes="+openingTimes.slice(1)+"\n"); - dumpLog("avgOpenTime:" + avgOpenTime + "\n" ); - dumpLog("minOpenTime:" + minOpenTime + "\n" ); - dumpLog("maxOpenTime:" + maxOpenTime + "\n" ); - dumpLog("medOpenTime:" + medOpenTime + "\n" ); - dumpLog("__xulWinOpenTime:" + medOpenTime + "\n"); - // Close the root window, if required. - if ( AUTOCLOSE ) { - goQuitApplication(); - window.close(); - } else { - document.getElementById("formTimes").value = openingTimes.slice(1); - document.getElementById("formAvg").value = avgOpenTime; - document.getElementById("formMin").value = minOpenTime; - document.getElementById("formMax").value = maxOpenTime; - document.getElementById("formMed").value = medOpenTime; + if ( TALOSLOG ) { + dumpLog("__start_report" + openingTimes.join('|') + "__end_report"); + var now = (new Date()).getTime(); + dumpLog("__startTimestamp" + now + "__endTimestamp\n"); + dumpLog("openingTimes="+openingTimes.slice(1)+"\n"); + dumpLog("avgOpenTime:" + avgOpenTime + "\n" ); + dumpLog("minOpenTime:" + minOpenTime + "\n" ); + dumpLog("maxOpenTime:" + maxOpenTime + "\n" ); + dumpLog("medOpenTime:" + medOpenTime + "\n" ); + dumpLog("__xulWinOpenTime:" + medOpenTime + "\n"); + } + if ( !AUTOCLOSE ) { + document.getElementById("loadTimes").value = openingTimes.slice(1); + document.getElementById("loadAvg").value = avgOpenTime; + document.getElementById("loadMin").value = minOpenTime; + document.getElementById("loadMax").value = maxOpenTime; + document.getElementById("loadMed").value = medOpenTime; + document.getElementById("formAgain").setAttribute( "disabled", "false" ); + } +} + +function reportPaintResults() { + var opening = paintingTimes.join(':'); // times for each window open + var avgOpenTime = 0; + var minOpenTime = 99999; + var maxOpenTime = 0; + var medOpenTime = calcMedian( paintingTimes.slice(1) ); + + // ignore first open + var count = 0; + for (i = 1; i < MAX_INDEX; i++) { + count++; + avgOpenTime += paintingTimes[i]; + if ( minOpenTime > paintingTimes[i] ) { + minOpenTime = paintingTimes[i]; + } + if ( maxOpenTime < paintingTimes[i] ) { + maxOpenTime = paintingTimes[i]; + } + } + + avgOpenTime = Math.round(avgOpenTime / count); + + if ( TALOSLOG ) { + dumpLog("__start_report" + openingTimes.join('|') + "__end_report"); + var now = (new Date()).getTime(); + dumpLog("paintTimes="+openingTimes.slice(1)+"\n"); + dumpLog("avgPaintTime:" + avgOpenTime + "\n" ); + dumpLog("minPaintTime:" + minOpenTime + "\n" ); + dumpLog("maxPaintTime:" + maxOpenTime + "\n" ); + dumpLog("medPaintTime:" + medOpenTime + "\n" ); + } + if ( !AUTOCLOSE ) { + document.getElementById("paintTimes").value = paintingTimes.slice(1); + document.getElementById("paintAvg").value = avgOpenTime; + document.getElementById("paintMin").value = minOpenTime; + document.getElementById("paintMax").value = maxOpenTime; + document.getElementById("paintMed").value = medOpenTime; document.getElementById("formAgain").setAttribute( "disabled", "false" ); } } function tryAgain() { document.getElementById("formAgain").setAttribute( "disabled", "true" ); windowList = []; startingTimes = []; openingTimes = []; + paintingTimes = []; closingTimes = []; currentIndex = 0; openWindow(); } function restoreChromeURL() { // Restore browser.chromeURL pref. if ( KID_CHROME && SAVED_CHROME.length ) { diff --git a/startup_test/twinopen/winopen.xul b/startup_test/twinopen/winopen.xul --- a/startup_test/twinopen/winopen.xul +++ b/startup_test/twinopen/winopen.xul @@ -22,55 +22,81 @@ This will open a series of browser windo - + + + + + + - + - - -