Browse Source

Concurrent browsers sending snapshots asynchronously.

Rob Sayre 14 years ago
parent
commit
9748d2ad49
  1. 21
      test/test.py
  2. 50
      test/test_slave.html

21
test/test.py

@ -69,9 +69,10 @@ class State:
eqLog = None eqLog = None
class Result: class Result:
def __init__(self, snapshot, failure): def __init__(self, snapshot, failure, page):
self.snapshot = snapshot self.snapshot = snapshot
self.failure = failure self.failure = failure
self.page = page
class TestServer(SocketServer.TCPServer): class TestServer(SocketServer.TCPServer):
allow_reuse_address = True allow_reuse_address = True
@ -122,10 +123,20 @@ class PDFTestHandler(BaseHTTPRequestHandler):
result = json.loads(self.rfile.read(numBytes)) result = json.loads(self.rfile.read(numBytes))
browser, id, failure, round, page, snapshot = result['browser'], result['id'], result['failure'], result['round'], result['page'], result['snapshot'] browser, id, failure, round, page, snapshot = result['browser'], result['id'], result['failure'], result['round'], result['page'], result['snapshot']
taskResults = State.taskResults[browser][id] taskResults = State.taskResults[browser][id]
taskResults[round].append(Result(snapshot, failure)) taskResults[round].append(Result(snapshot, failure, page))
assert len(taskResults[round]) == page
def isTaskDone():
if result['taskDone']: numPages = result["numPages"]
rounds = State.manifest[id]["rounds"]
for round in range(0,rounds):
if len(taskResults[round]) < numPages:
return False
return True
if isTaskDone():
# sort the results since they sometimes come in out of order
for results in taskResults:
results.sort(key=lambda result: result.page)
check(State.manifest[id], taskResults, browser) check(State.manifest[id], taskResults, browser)
# Please oh please GC this ... # Please oh please GC this ...
del State.taskResults[browser][id] del State.taskResults[browser][id]

50
test/test_slave.html

@ -139,31 +139,41 @@ function snapshotCurrentPage(gfx) {
} }
} }
currentTask.taskDone = (currentTask.pageNum == pdfDoc.numPages
&& (1 + currentTask.round) == currentTask.rounds);
sendTaskResult(canvas.toDataURL("image/png")); sendTaskResult(canvas.toDataURL("image/png"));
log("done"+ (failure ? " (failed!)" : "") +"\n"); log("done"+ (failure ? " (failed!)" : "") +"\n");
++currentTask.pageNum, nextPage(); // Set up the next request
} backoff = (inFlightRequests > 0) ? inFlightRequests * 10 : 0;
function done() {
log("Done!\n");
setTimeout(function() { setTimeout(function() {
document.body.innerHTML = "Tests are finished. <h1>CLOSE ME!</h1>"; ++currentTask.pageNum, nextPage();
if (window.SpecialPowers)
SpecialPowers.quitApplication();
else
window.close();
}, },
100 backoff
); );
} }
function quitApp() {
log("Done!");
document.body.innerHTML = "Tests are finished. <h1>CLOSE ME!</h1>";
if (window.SpecialPowers)
SpecialPowers.quitApplication();
else
window.close();
}
function done() {
if (inFlightRequests > 0) {
document.getElementById("inFlightCount").innerHTML = inFlightRequests;
setTimeout(done, 100);
} else {
setTimeout(quitApp, 100);
}
}
var inFlightRequests = 0;
function sendTaskResult(snapshot) { function sendTaskResult(snapshot) {
var result = { browser: browser, var result = { browser: browser,
id: currentTask.id, id: currentTask.id,
taskDone: currentTask.taskDone, numPages: pdfDoc.numPages,
failure: failure, failure: failure,
file: currentTask.file, file: currentTask.file,
round: currentTask.round, round: currentTask.round,
@ -172,9 +182,14 @@ function sendTaskResult(snapshot) {
var r = new XMLHttpRequest(); var r = new XMLHttpRequest();
// (The POST URI is ignored atm.) // (The POST URI is ignored atm.)
r.open("POST", "/submit_task_results", false); r.open("POST", "/submit_task_results", true);
r.setRequestHeader("Content-Type", "application/json"); r.setRequestHeader("Content-Type", "application/json");
// XXX async r.onreadystatechange = function(e) {
if (r.readyState == 4) {
inFlightRequests--;
}
}
document.getElementById("inFlightCount").innerHTML = inFlightRequests++;
r.send(JSON.stringify(result)); r.send(JSON.stringify(result));
} }
@ -194,7 +209,8 @@ function log(str) {
</head> </head>
<body onload="load();"> <body onload="load();">
<pre id="stdout"></pre> <pre style="width:800; height:800; overflow: scroll;"id="stdout"></pre>
<p>Inflight requests: <span id="inFlightCount"></span></p>
</body> </body>
</html> </html>

Loading…
Cancel
Save