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,38 @@ - + + 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,30 +1,27 @@ // 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; +const OPENER_DELAY = 500; // three phases: single open/close; overlapped open/close; open-all/close-all var PHASE_ONE = 10; var PHASE_TWO = 0; var PHASE_THREE = 0; // keep this many windows concurrently open during overlapped phase var OVERLAP_COUNT = 3; // repeat three phases CYCLES times -var CYCLES = 1; +var CYCLES = 1; // autoclose flag -var AUTOCLOSE = 1; +var AUTOCLOSE = 0; // 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 ], @@ -69,39 +66,45 @@ 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) { + //alert(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,63 +167,106 @@ 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() { - //XXX need to create a client-side method to do this? + reportLoadResults(); + reportPaintResults(); +} + +function reportLoadResults() { 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 highest + var highVal = 0; + var lowVal = 99999; + for (i = 1; i < MAX_INDEX; i++) { + if (openingTimes[i] >= highVal) { + highVal = openingTimes[i]; + } + if (openingTimes[i] <= lowVal) { + lowVal = openingTimes[i]; + } + } + // ignore first open + var count = 0; for (i = 1; i < MAX_INDEX; i++) { + if (openingTimes[i] == lowVal || openingTimes[i] == highVal) + continue; + count++; 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"); + avgOpenTime = Math.round(avgOpenTime / count); + // 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; - document.getElementById("formAgain").setAttribute( "disabled", "false" ); + 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 closing = closingTimes.join(':'); // these are for >1 url, as a group + var avgOpenTime = 0; + var minOpenTime = 99999; + var maxOpenTime = 0; + var medOpenTime = calcMedian( paintingTimes.slice(1) ); + // ignore highest + var highVal = 0; + var lowVal = 99999; + for (i = 1; i < MAX_INDEX; i++) { + if (paintingTimes[i] >= highVal) { + highVal = paintingTimes[i]; + } + if (paintingTimes[i] <= lowVal) { + lowVal = paintingTimes[i]; + } } + + // ignore first open + var count = 0; + for (i = 1; i < MAX_INDEX; i++) { + if (paintingTimes[i] == lowVal || paintingTimes[i] == highVal) + continue; + count++; + avgOpenTime += paintingTimes[i]; + if ( minOpenTime > paintingTimes[i] ) { + minOpenTime = paintingTimes[i]; + } + if ( maxOpenTime < paintingTimes[i] ) { + maxOpenTime = paintingTimes[i]; + } + } + avgOpenTime = Math.round(avgOpenTime / count); + + // Close the root window, if required. + 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 = []; closingTimes = []; @@ -240,9 +286,15 @@ function openWindow() { startingTimes[currentIndex] = (new Date()).getTime(); var path = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf('/') ); var url = window.location.protocol + "//" + window.location.hostname + path + "/" + KID_URL; windowList[currentIndex] = window.open(url, currentIndex); } +function paintWindow() { + window.removeEventListener("MozAfterPaint", paintWindow, false); + +} +if (1 == 1) + window.addEventListener("MozAfterPaint", paintWindow, false); 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 @@ -2,75 +2,97 @@ - - + -This will open a series of browser windows, either "one at a - time" or in a sequence of some form. When this test is complete - a final window will be opened which will report the overall results. - +This will open a series of browser windows, either "one at a
+time" or in a sequence of some form. When this test is complete
+a final window will be opened which will report the overall results. + - + + + + + +
- - + + - - - -