Concurrent browsers sending snapshots asynchronously.
This commit is contained in:
parent
2b6b6d5ab2
commit
9748d2ad49
19
test/test.py
19
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
|
|
||||||
|
|
||||||
if result['taskDone']:
|
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)
|
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]
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user