{"title":"ReflowPDF Engine and Prince 17: web-platform tests, time, memory and file size","machine":"Intel Xeon E5-2690, 2.9 GHz, 16 threads, 62 GB, Ubuntu 24.04 (a shared server; the clock speed varies)","ours":{"engine":"ReflowPDF Engine 7e30a4918 (app release p431)","measured":"2026-11-08","runs":3,"load":"3–9 (the HTML Standard: up to 9.7) (a shared machine)","build":"release, command-line renderer, tagged PDF/UA-1, cold start, median of three runs (the HTML Standard: one run)"},"prince":{"version":"Prince 17","measured":"2026-11-04","runs":3,"load":"1.6–3.2"},"method":["Time is wall-clock time from start to the PDF written; memory is the peak resident set size; instructions are the CPU instructions counted in user space over all threads, which depend far less on the machine’s load than time does.","Both engines make tagged PDF, as the product does: ReflowPDF PDF/UA-1 by default, Prince 17 with its PDF/UA-1 profile (veraPDF does not pass Prince 17’s files as PDF/UA-1). Each is the median of three cold runs (the HTML Standard and, for Prince, the GitHub page: one run). Prince 17 was run on 4 November on the same machine, ReflowPDF on 8 November: compare times as close, instructions as exact.","The documents are pages saved as single files, laid out without network and without scripts; both engines get the same file. They do not lay out every document identically, so the page counts differ.","PDF sizes compare tagged with tagged. The PDF/UA-1, PDF/A-3a and PDF/UA-2 files below, ReflowPDF Engine’s, are each checked with veraPDF 1.30.2.","Chrome’s print is the browser printing the page (Playwright’s page.pdf, tagged): its time is a cold start of the browser for each document, as both engines start cold; a warm browser’s time is given beside it. Its memory is the peak of the summed proportional set size (PSS) of all its processes — browser, renderer, GPU and utility — since one process’s peak would leave most of it out. veraPDF checks its PDFs as PDF/UA-1.","The four synthetic test forms are in English since 8 November (they had been set in Russian words): all three engines were measured on the new files that day, the same way; their HTML can be downloaded below."],"docs":[{"id":"html-standard","name":"HTML Standard","what":"The WHATWG HTML Living Standard, the whole specification as one document","source":"https://html.spec.whatwg.org/","snapshot":"2026-10-22","licence":"CC BY 4.0, WHATWG","synthetic":false,"ours":{"seconds":36.56,"mb":1457,"ginstr":140.6,"pages":1560,"pdfMB":15.83},"prince":{"seconds":50.67,"mb":1640,"ginstr":263.8,"pages":1565,"pdfMB":20.75,"measured":"2026-11-04"},"spread":[36.56,36.56],"files":[{"label":"PDF/UA-1","path":"html-standard.ua1.pdf","mb":15.83},{"label":"PDF/A-3a","path":"html-standard.a3a.pdf","mb":15.84},{"label":"PDF/UA-2","path":"html-standard.ua2.pdf","mb":15.88}],"tagged":"passed","chrome":{"seconds":156.86,"mb":3184,"ginstr":311.2,"pages":1176,"pdfMB":98.56,"warmSeconds":113.3654,"ua1":false,"ua1Failed":154123},"timeRatioPrinceToReflowPDF":1.386},{"id":"rfc-http","name":"RFC 9110, HTTP Semantics","what":"An IETF standard: long text, tables, cross-references","source":"https://www.rfc-editor.org/rfc/rfc9110.html","snapshot":"2026-07-29","licence":"IETF Trust (RFCs may be reproduced in full)","synthetic":false,"ours":{"seconds":1.55,"mb":131,"ginstr":6.7,"pages":131,"pdfMB":0.92},"prince":{"seconds":2.35,"mb":183,"ginstr":10.3,"pages":141,"pdfMB":1.18,"measured":"2026-11-04"},"spread":[1.55,1.57],"files":[{"label":"PDF/UA-1","path":"rfc-http.ua1.pdf","mb":0.92},{"label":"PDF/A-3a","path":"rfc-http.a3a.pdf","mb":0.92},{"label":"PDF/UA-2","path":"rfc-http.ua2.pdf","mb":0.93}],"tagged":"passed","chrome":{"seconds":5.46,"mb":561,"ginstr":19.1,"pages":146,"pdfMB":4.2,"warmSeconds":3.6658000000000004,"ua1":false,"ua1Failed":8494},"timeRatioPrinceToReflowPDF":1.516},{"id":"github-repo","name":"GitHub repository page","what":"The rust-lang/rust repository page: deep nesting, many small boxes","source":"https://github.com/rust-lang/rust","snapshot":"2026-08-02","licence":null,"synthetic":false,"ours":{"seconds":4.76,"mb":191,"ginstr":21.1,"pages":63,"pdfMB":1.49},"prince":{"seconds":246.03,"mb":223,"ginstr":1060,"pages":61,"pdfMB":0.76,"measured":"2026-11-04"},"spread":[4.63,5.13],"files":[],"outlier":"Prince takes unusually long on this one document; it is not a typical gap.","chrome":{"seconds":15.51,"mb":955,"ginstr":65.7,"pages":56,"pdfMB":5.78,"warmSeconds":13.997200000000001,"ua1":false,"ua1Failed":6137},"timeRatioPrinceToReflowPDF":51.687},{"id":"stripe-home","name":"Stripe home page","what":"A marketing page with grid and flex layout","source":"https://stripe.com/","snapshot":"2026-07-29","licence":null,"synthetic":false,"ours":{"seconds":1.59,"mb":124,"ginstr":9,"pages":16,"pdfMB":0.59},"prince":{"seconds":6.92,"mb":115,"ginstr":31,"pages":13,"pdfMB":0.21,"measured":"2026-11-04"},"spread":[1.56,1.6],"files":[],"chrome":{"seconds":3.23,"mb":455,"ginstr":13.1,"pages":11,"pdfMB":2.21,"warmSeconds":2.2571999999999997,"ua1":false,"ua1Failed":2557},"timeRatioPrinceToReflowPDF":4.352},{"id":"tailwind-home","name":"Tailwind CSS home page","what":"A utility-class marketing page","source":"https://tailwindcss.com/","snapshot":"2026-07-29","licence":null,"synthetic":false,"ours":{"seconds":2.58,"mb":153,"ginstr":17.7,"pages":15,"pdfMB":6.05},"prince":{"seconds":13.32,"mb":143,"ginstr":74.1,"pages":19,"pdfMB":4.46,"measured":"2026-11-04"},"spread":[2.56,2.65],"files":[],"chrome":{"seconds":5.66,"mb":478,"ginstr":25.2,"pages":10,"pdfMB":6.75,"warmSeconds":4.4945,"ua1":false,"ua1Failed":1577},"timeRatioPrinceToReflowPDF":5.163},{"id":"spec-flexbox","name":"CSS Flexbox Level 1","what":"A W3C specification","source":"https://www.w3.org/TR/css-flexbox-1/","snapshot":"2026-07-29","licence":"W3C Document License","synthetic":false,"ours":{"seconds":2.41,"mb":198,"ginstr":12.2,"pages":140,"pdfMB":1.62},"prince":{"seconds":3.97,"mb":205,"ginstr":18.2,"pages":154,"pdfMB":1.56,"measured":"2026-11-04"},"spread":[2.41,2.93],"files":[{"label":"PDF/UA-1","path":"spec-flexbox.ua1.pdf","mb":1.62},{"label":"PDF/A-3a","path":"spec-flexbox.a3a.pdf","mb":1.63},{"label":"PDF/UA-2","path":"spec-flexbox.ua2.pdf","mb":1.64}],"tagged":"passed","chrome":{"seconds":7.38,"mb":653,"ginstr":23.6,"pages":135,"pdfMB":11.66,"warmSeconds":7.3632,"ua1":false,"ua1Failed":22650},"timeRatioPrinceToReflowPDF":1.647},{"id":"wikipedia-pdf","name":"Wikipedia: “PDF”","what":"An encyclopedia article with infobox, references and images","source":"https://en.wikipedia.org/wiki/PDF","snapshot":"2026-07-29","licence":"CC BY-SA 4.0, Wikipedia contributors","synthetic":false,"ours":{"seconds":0.62,"mb":79,"ginstr":3.2,"pages":23,"pdfMB":0.4},"prince":{"seconds":1.12,"mb":104,"ginstr":5.4,"pages":27,"pdfMB":0.36,"measured":"2026-11-04"},"spread":[0.57,0.73],"files":[{"label":"PDF/UA-1","path":"wikipedia-pdf.ua1.pdf","mb":0.4},{"label":"PDF/A-3a","path":"wikipedia-pdf.a3a.pdf","mb":0.4},{"label":"PDF/UA-2","path":"wikipedia-pdf.ua2.pdf","mb":0.4}],"tagged":"passed","chrome":{"seconds":1.91,"mb":362,"ginstr":7.6,"pages":23,"pdfMB":1.07,"warmSeconds":1.2094,"ua1":false,"ua1Failed":2540},"timeRatioPrinceToReflowPDF":1.806},{"id":"bootstrap-docs","name":"Bootstrap 5.3 documentation","what":"A documentation page","source":"https://getbootstrap.com/docs/5.3/getting-started/introduction/","snapshot":"2026-07-29","licence":"MIT and CC BY 3.0, Bootstrap authors","synthetic":false,"ours":{"seconds":0.35,"mb":68,"ginstr":1.4,"pages":7,"pdfMB":0.1},"prince":{"seconds":0.37,"mb":78,"ginstr":1.4,"pages":6,"pdfMB":0.14,"measured":"2026-11-04"},"spread":[0.35,0.36],"files":[{"label":"PDF/UA-1","path":"bootstrap-docs.ua1.pdf","mb":0.1},{"label":"PDF/A-3a","path":"bootstrap-docs.a3a.pdf","mb":0.11},{"label":"PDF/UA-2","path":"bootstrap-docs.ua2.pdf","mb":0.1}],"tagged":"passed","chrome":{"seconds":1.5,"mb":328,"ginstr":6.2,"pages":7,"pdfMB":0.23,"warmSeconds":0.4095,"ua1":false,"ua1Failed":232},"timeRatioPrinceToReflowPDF":1.057},{"id":"floats-a","name":"Floats","what":"Synthetic: text around floats","source":null,"snapshot":"2026-10-11","licence":"ReflowPDF","synthetic":true,"ours":{"seconds":0.1,"mb":35,"ginstr":0.3,"pages":13,"pdfMB":0.04},"prince":{"seconds":0.26,"mb":50,"ginstr":0.6,"pages":15,"pdfMB":0.05,"measured":"2026-11-08"},"spread":[0.1,0.18],"files":[{"label":"PDF/UA-1","path":"floats-a.ua1.pdf","mb":0.04},{"label":"PDF/A-3a","path":"floats-a.a3a.pdf","mb":0.04},{"label":"PDF/UA-2","path":"floats-a.ua2.pdf","mb":0.04}],"tagged":"passed","chrome":{"seconds":1.14,"mb":234,"ginstr":5.1,"pages":13,"pdfMB":0.11,"warmSeconds":null,"ua1":false,"ua1Failed":2},"html":"floats-a.html","timeRatioPrinceToReflowPDF":2.6},{"id":"flexcards-b","name":"Flex cards","what":"Synthetic: cards in flex rows","source":null,"snapshot":"2026-10-11","licence":"ReflowPDF","synthetic":true,"ours":{"seconds":1,"mb":92,"ginstr":4.3,"pages":81,"pdfMB":0.33},"prince":{"seconds":1.36,"mb":113,"ginstr":5.9,"pages":92,"pdfMB":0.35,"measured":"2026-11-08"},"spread":[0.94,1.05],"files":[{"label":"PDF/UA-1","path":"flexcards-b.ua1.pdf","mb":0.33},{"label":"PDF/A-3a","path":"flexcards-b.a3a.pdf","mb":0.34},{"label":"PDF/UA-2","path":"flexcards-b.ua2.pdf","mb":0.33}],"tagged":"passed","chrome":{"seconds":3.33,"mb":451,"ginstr":13,"pages":80,"pdfMB":1.2,"warmSeconds":null,"ua1":false,"ua1Failed":2872},"html":"flexcards-b.html","timeRatioPrinceToReflowPDF":1.36},{"id":"grid-b","name":"Grid","what":"Synthetic: a CSS grid page","source":null,"snapshot":"2026-10-11","licence":"ReflowPDF","synthetic":true,"ours":{"seconds":0.57,"mb":73,"ginstr":3,"pages":53,"pdfMB":0.24},"prince":{"seconds":1.05,"mb":96,"ginstr":4.7,"pages":67,"pdfMB":0.24,"measured":"2026-11-08"},"spread":[0.57,0.59],"files":[{"label":"PDF/UA-1","path":"grid-b.ua1.pdf","mb":0.24},{"label":"PDF/A-3a","path":"grid-b.a3a.pdf","mb":0.24},{"label":"PDF/UA-2","path":"grid-b.ua2.pdf","mb":0.24}],"tagged":"passed","chrome":{"seconds":2.46,"mb":419,"ginstr":9.9,"pages":53,"pdfMB":1.17,"warmSeconds":null,"ua1":false,"ua1Failed":2},"html":"grid-b.html","timeRatioPrinceToReflowPDF":1.842},{"id":"article-b","name":"Article","what":"Synthetic: a long article","source":null,"snapshot":"2026-10-11","licence":"ReflowPDF","synthetic":true,"ours":{"seconds":0.56,"mb":92,"ginstr":3.6,"pages":167,"pdfMB":0.56},"prince":{"seconds":1.53,"mb":114,"ginstr":7.3,"pages":185,"pdfMB":0.8,"measured":"2026-11-08"},"spread":[0.55,0.58],"files":[{"label":"PDF/UA-1","path":"article-b.ua1.pdf","mb":0.56},{"label":"PDF/A-3a","path":"article-b.a3a.pdf","mb":0.56},{"label":"PDF/UA-2","path":"article-b.ua2.pdf","mb":0.56}],"tagged":"passed","chrome":{"seconds":2.87,"mb":393,"ginstr":11.4,"pages":166,"pdfMB":3.09,"warmSeconds":null,"ua1":false,"ua1Failed":4497},"html":"article-b.html","timeRatioPrinceToReflowPDF":2.732}],"history":[{"date":"2026-11-04","engine":"p391 (6fde01550)","doc":"html-standard","seconds":60,"mb":1369},{"date":"2026-11-04","engine":"p393","doc":"html-standard","seconds":53.11,"mb":1378},{"date":"2026-11-04","engine":"p394 (8f523a5ec)","doc":"html-standard","seconds":57.66,"mb":1378},{"date":"2026-11-04","engine":"p400 (a31921d04)","doc":"html-standard","seconds":77.39,"mb":1380},{"date":"2026-11-05","engine":"p401 (92c5fbd49)","doc":"html-standard","seconds":46.98,"mb":1379},{"date":"2026-11-05","engine":"p411 (378ed37ee)","doc":"html-standard","seconds":42.62,"mb":1368},{"date":"2026-11-07","engine":"p419 (dff69f8c1)","doc":"html-standard","seconds":40.79,"mb":1335},{"date":"2026-11-08","engine":"p431 (7e30a4918)","doc":"html-standard","seconds":34.28,"mb":1351}],"chrome":{"version":"Chromium 148.0.7778.96 (Playwright), headless","measured":"2026-11-08","runs":3,"load":"2.2–5.4 (a shared machine)","build":"page.pdf with tagged: true, printBackground and preferCSSPageSize; a cold process per document (node, the browser and one page), median of three runs (the HTML Standard: one run)"},"webPlatformTests":{"tests":20465,"ours":19929,"prince":8805,"oursEngine":"1d7a91105","oursDate":"2026-11-08","princeVersion":"Prince 17","princeDate":"2026-10-25","areas":[{"area":"css/CSS2","tests":5863,"ours":5786,"prince":3373},{"area":"css/css-grid","tests":1233,"ours":1158,"prince":505},{"area":"css/css-text","tests":1205,"ours":1160,"prince":435},{"area":"css/css-writing-modes","tests":1101,"ours":1083,"prince":135},{"area":"css/css-break","tests":1048,"ours":1039,"prince":298},{"area":"css/css-flexbox","tests":916,"ours":906,"prince":620},{"area":"css/css-transforms","tests":705,"ours":700,"prince":289},{"area":"css/css-backgrounds","tests":596,"ours":583,"prince":145},{"area":"css/css-sizing","tests":513,"ours":508,"prince":132},{"area":"css/css-overflow","tests":462,"ours":453,"prince":117},{"area":"css/css-multicol","tests":403,"ours":392,"prince":113},{"area":"css/css-images","tests":398,"ours":389,"prince":93},{"area":"html","tests":346,"ours":329,"prince":191},{"area":"css/css-fonts","tests":327,"ours":320,"prince":191},{"area":"css/css-contain","tests":305,"ours":303,"prince":103},{"area":"css/WOFF2","tests":298,"ours":293,"prince":271},{"area":"css/css-color","tests":294,"ours":289,"prince":154},{"area":"css/css-text-decor","tests":282,"ours":275,"prince":79},{"area":"css/css-masking","tests":280,"ours":261,"prince":43},{"area":"css/filter-effects","tests":271,"ours":267,"prince":67},{"area":"css/css-gaps","tests":227,"ours":219,"prince":22},{"area":"css/css-counter-styles","tests":224,"ours":222,"prince":132},{"area":"css/css-shapes","tests":224,"ours":216,"prince":12},{"area":"css/css-page","tests":219,"ours":206,"prince":112},{"area":"css/css-variables","tests":180,"ours":178,"prince":173},{"area":"css/css-values","tests":166,"ours":160,"prince":96},{"area":"svg","tests":165,"ours":153,"prince":71},{"area":"mathml","tests":150,"ours":141,"prince":89},{"area":"css/css-conditional","tests":144,"ours":142,"prince":104},{"area":"css/css-inline","tests":142,"ours":142,"prince":13},{"area":"css/css-tables","tests":138,"ours":137,"prince":70},{"area":"css/css-position","tests":130,"ours":102,"prince":35},{"area":"css/css-display","tests":115,"ours":112,"prince":79},{"area":"css/css-lists","tests":115,"ours":115,"prince":35},{"area":"css/selectors","tests":114,"ours":114,"prince":80},{"area":"css/css-ui","tests":111,"ours":110,"prince":60},{"area":"css/css-anchor-position","tests":105,"ours":77,"prince":9},{"area":"css/css-pseudo","tests":99,"ours":98,"prince":52},{"area":"css/css-ruby","tests":93,"ours":93,"prince":22},{"area":"css/css-viewport","tests":91,"ours":88,"prince":9},{"area":"css/motion","tests":90,"ours":87,"prince":0},{"area":"css/css-borders","tests":61,"ours":49,"prince":11},{"area":"css/css-align","tests":57,"ours":56,"prince":23},{"area":"css/compositing","tests":52,"ours":43,"prince":2},{"area":"css/mediaqueries","tests":47,"ours":45,"prince":22},{"area":"css/css-cascade","tests":41,"ours":40,"prince":19},{"area":"css/css-will-change","tests":41,"ours":41,"prince":5},{"area":"css/css-box","tests":36,"ours":36,"prince":1},{"area":"css/css-shadow","tests":36,"ours":36,"prince":8},{"area":"css/printing","tests":24,"ours":24,"prince":13},{"area":"compat","tests":21,"ours":21,"prince":2},{"area":"density-size-correction","tests":20,"ours":18,"prince":0},{"area":"quirks","tests":19,"ours":17,"prince":6},{"area":"css/css-style-attr","tests":16,"ours":16,"prince":13},{"area":"css/css-animations","tests":15,"ours":9,"prince":4},{"area":"css/css-color-adjust","tests":15,"ours":14,"prince":3},{"area":"css/css-content","tests":15,"ours":15,"prince":10},{"area":"css/css-scroll-snap","tests":13,"ours":7,"prince":2},{"area":"css/css-nesting","tests":12,"ours":12,"prince":11},{"area":"css/css-scrollbars","tests":11,"ours":3,"prince":3},{"area":"css/css-properties-values-api","tests":6,"ours":6,"prince":2},{"area":"css/css-logical","tests":5,"ours":5,"prince":5},{"area":"css/css-forms","tests":3,"ours":3,"prince":3},{"area":"css/css-rhythm","tests":3,"ours":3,"prince":3},{"area":"css/css-view-transitions","tests":3,"ours":0,"prince":2},{"area":"css/css-highlight-api","tests":1,"ours":0,"prince":1},{"area":"css/css-syntax","tests":1,"ours":1,"prince":1},{"area":"css/css-transitions","tests":1,"ours":1,"prince":1},{"area":"css/cssom-view","tests":1,"ours":1,"prince":0},{"area":"css/fill-stroke","tests":1,"ours":1,"prince":0}],"left":{"picture":27211,"assertions":2112,"script":3852,"absent":2875,"crash":1419,"errors":19},"judgedFiles":{"pass":27676,"total":29323,"date":"2026-11-08","note":"The files ReflowPDF is judged on in the same run, a file passing only when every subtest in it does (https://reflowpdf.com/conformance)."},"method":"Each engine renders a test and its reference with the same runner; only tests both engines were judged on count. `left` says why the other judged files are not compared: judged by assertions (Prince 17 was run on picture tests), left out of Prince 17’s run for a script, not in its run (crash tests among them), or an error of Prince 17’s. A rasteriser tie counts as a failure for ReflowPDF."},"units":{"seconds":"wall-clock seconds","mb":"peak resident memory, MB","ginstr":"CPU instructions, billions","pdfMB":"PDF size, MB"}}