eqLog = None
class Result:
- def __init__(self, snapshot, failure):
+ def __init__(self, snapshot, failure, page):
self.snapshot = snapshot
self.failure = failure
+ self.page = page
class TestServer(SocketServer.TCPServer):
allow_reuse_address = True
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']
taskResults = State.taskResults[browser][id]
- taskResults[round].append(Result(snapshot, failure))
- assert len(taskResults[round]) == page
-
- if result['taskDone']:
+ taskResults[round].append(Result(snapshot, failure, page))
+
+ def isTaskDone():
+ 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)
# Please oh please GC this ...
del State.taskResults[browser][id]
}
}
- currentTask.taskDone = (currentTask.pageNum == pdfDoc.numPages
- && (1 + currentTask.round) == currentTask.rounds);
sendTaskResult(canvas.toDataURL("image/png"));
log("done"+ (failure ? " (failed!)" : "") +"\n");
- ++currentTask.pageNum, nextPage();
-}
-
-function done() {
- log("Done!\n");
+ // Set up the next request
+ backoff = (inFlightRequests > 0) ? inFlightRequests * 10 : 0;
setTimeout(function() {
- document.body.innerHTML = "Tests are finished. <h1>CLOSE ME!</h1>";
- if (window.SpecialPowers)
- SpecialPowers.quitApplication();
- else
- window.close();
+ ++currentTask.pageNum, nextPage();
},
- 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) {
var result = { browser: browser,
id: currentTask.id,
- taskDone: currentTask.taskDone,
+ numPages: pdfDoc.numPages,
failure: failure,
file: currentTask.file,
round: currentTask.round,
var r = new XMLHttpRequest();
// (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");
- // XXX async
+ r.onreadystatechange = function(e) {
+ if (r.readyState == 4) {
+ inFlightRequests--;
+ }
+ }
+ document.getElementById("inFlightCount").innerHTML = inFlightRequests++;
r.send(JSON.stringify(result));
}
</head>
<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>
</html>