From 4ae16721fad131dc08994e149c6640ae65117e9f Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Wed, 22 Jun 2011 18:37:58 -0700 Subject: [PATCH] actually wait for fonts to be loaded, and write out a log of failed eq comparisons --- test.py | 25 +++++++++++++++++- test_slave.html | 68 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 74 insertions(+), 19 deletions(-) diff --git a/test.py b/test.py index 0c326ec09..26a86b6dd 100644 --- a/test.py +++ b/test.py @@ -9,6 +9,7 @@ def prompt(question): ANAL = True DEFAULT_MANIFEST_FILE = 'test_manifest.json' +EQLOG_FILE = 'eq.log' REFDIR = 'ref' TMPDIR = 'tmp' VERBOSE = False @@ -35,6 +36,7 @@ class State: numEqNoSnapshot = 0 numFBFFailures = 0 numLoadFailures = 0 + eqLog = None class Result: def __init__(self, snapshot, failure): @@ -190,6 +192,7 @@ def check(task, results, browser): def checkEq(task, results, browser): pfx = os.path.join(REFDIR, sys.platform, browser, task['id']) results = results[0] + taskId = task['id'] passed = True for page in xrange(len(results)): @@ -208,7 +211,21 @@ def checkEq(task, results, browser): eq = (ref == snapshot) if not eq: - print 'TEST-UNEXPECTED-FAIL | eq', task['id'], '| in', browser, '| rendering of page', page + 1, '!= reference rendering' + print 'TEST-UNEXPECTED-FAIL | eq', taskId, '| in', browser, '| rendering of page', page + 1, '!= reference rendering' + # XXX need to dump this always, somehow, when we have + # the reference repository + if State.masterMode: + if not State.eqLog: + State.eqLog = open(EQLOG_FILE, 'w') + eqLog = State.eqLog + + # NB: this follows the format of Mozilla reftest + # output so that we can reuse its reftest-analyzer + # script + print >>eqLog, 'REFTEST TEST-UNEXPECTED-FAIL |', browser +'-'+ taskId +'-page'+ str(page + 1), '| image comparison (==)' + print >>eqLog, 'REFTEST IMAGE 1 (TEST):', snapshot + print >>eqLog, 'REFTEST IMAGE 2 (REFERENCE):', ref + passed = False State.numEqFailures += 1 @@ -292,6 +309,12 @@ def main(args): masterMode = (args[0] == '-m') manifestFile = args[0] if not masterMode else manifestFile + + + masterMode = True + + + setUp(manifestFile, masterMode) server = HTTPServer(('127.0.0.1', 8080), PDFTestHandler) diff --git a/test_slave.html b/test_slave.html index 06b911810..718e887e0 100644 --- a/test_slave.html +++ b/test_slave.html @@ -1,6 +1,7 @@ pdf.js test slave + @@ -31,7 +32,7 @@ function load() { stdout = document.getElementById("stdout"); log("Harness thinks this browser is '"+ browser +"'\n"); - log("Fetching manifest ..."); + log("Fetching manifest "+ manifestFile +"..."); var r = new XMLHttpRequest(); r.open("GET", manifestFile, false); @@ -81,38 +82,69 @@ function nextPage() { } failure = ''; - log(" drawing page "+ currentTask.pageNum +"..."); + log(" loading page "+ currentTask.pageNum +"... "); var ctx = canvas.getContext("2d"); clear(ctx); var fonts = []; + var fontsReady = true; var gfx = new CanvasGraphics(ctx); try { currentPage = pdfDoc.getPage(currentTask.pageNum); currentPage.compile(gfx, fonts); + + // Inspect fonts and translate the missing ones + var count = fonts.length; + for (var i = 0; i < count; ++i) { + var font = fonts[i]; + if (Fonts[font.name]) { + fontsReady = fontsReady && !Fonts[font.name].loading; + continue; + } + new Font(font.name, font.file, font.properties); + fontsReady = false; + } } catch(e) { failure = 'compile: '+ e.toString(); } - // TODO load fonts - setTimeout(function() { - if (!failure) { - try { - currentPage.display(gfx); - } catch(e) { - failure = 'render: '+ e.toString(); - } + var checkFontsLoadedIntervalTimer = null; + function checkFontsLoaded() { + for (var i = 0; i < count; i++) { + if (Fonts[font.name].loading) { + return; } - currentTask.taskDone = (currentTask.pageNum == pdfDoc.numPages - && (1 + currentTask.round) == currentTask.rounds); - sendTaskResult(canvas.toDataURL("image/png")); - log("done"+ (failure ? " (failed!)" : "") +"\n"); + } + window.clearInterval(checkFontsLoadedIntervalTimer); - ++currentTask.pageNum, nextPage(); - }, - 0 - ); + snapshotCurrentPage(gfx); + } + + if (failure || fontsReady) { + snapshotCurrentPage(gfx); + } else { + checkFontsLoadedIntervalTimer = setInterval(checkFontsLoaded, 10); + } +} + +function snapshotCurrentPage(gfx) { + log("done, snapshotting... "); + + if (!failure) { + try { + currentPage.display(gfx); + } catch(e) { + failure = 'render: '+ e.toString(); + } + } + + 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() {