@@ -15,36 +15,79 @@ main = Benchmark.Render.toProgram ${item.module}.${item.value}
15 fs.writeFileSync('./tmp/Main.elm', entrypoint);
15 fs.writeFileSync('./tmp/Main.elm', entrypoint);
19+function regoupResults(results) {
22+ for (var i = 0; i < results.length; i++) {
23+ if (results[i].group) {
26+ count: results[i].count
27+ , fps: results[i].frames.fps
28+ , timeToFirstPaintMS: results[i].perf.TimeToFirstPaintMS
29+ , nodes: results[i].perf.Nodes
30+ , layoutSeconds: results[i].perf.LayoutDuration
31+ , recalcStyleSeconds: results[i].perf.RecalcStyleDuration
32+ , scriptDurationSeconds: results[i].perf.ScriptDuration
34+ if (results[i].group in regrouped) {
35+ regrouped[results[i].group].results.push(reorged)
37+ regrouped[results[i].group] = { results: [reorged], name: results[i].group }
41+ return Object.values(regrouped)
45+async function write_results(allResults) {
46+ var resultsDir = "results"
47+ if (!fs.existsSync(resultsDir)) {
48+ fs.mkdirSync(resultsDir);
50+ var results = JSON.stringify(allResults)
51+ var template = fs.readFileSync("./runtime/template/viewResults.html")
52+ // we embed the compiled js to avoid having to start a server to read the app.
53+ await compileToString(["./src/View/Results.elm"], { optimize: true }).then(function (compiled_elm_code) {
54+ const compiled = eval(`\`${template}\``)
55+ fs.writeFileSync(`./${resultsDir}/1.1.1-cand.html`, compiled)
58+ // fs.writeFileSync(`./${resultsDir}/1.1.1-candidate-optimized.json`, results)
18(async () => {
61(async () => {
19 const browser = await puppeteer.launch();
62 const browser = await puppeteer.launch();
20− var instances = [{ module: "Baseline", value: "bench" }
63+ var instances = [{ module: "Baseline", group: null, value: "bench" }
21− , { module: "ManyElements", value: "elmUI1024" }
64+ , { module: "ManyElements", group: "elmUI", count: 1024, value: "elmUI1024" }
22− , { module: "ManyElements", value: "elmUI128" }
65+ , { module: "ManyElements", group: "elmUI", count: 128, value: "elmUI128" }
23− , { module: "ManyElements", value: "elmUI2048" }
66+ , { module: "ManyElements", group: "elmUI", count: 2048, value: "elmUI2048" }
24− , { module: "ManyElements", value: "elmUI24" }
67+ , { module: "ManyElements", group: "elmUI", count: 24, value: "elmUI24" }
25− , { module: "ManyElements", value: "elmUI256" }
68+ , { module: "ManyElements", group: "elmUI", count: 256, value: "elmUI256" }
26− , { module: "ManyElements", value: "elmUI4096" }
69+ , { module: "ManyElements", group: "elmUI", count: 4096, value: "elmUI4096" }
27− , { module: "ManyElements", value: "elmUI512" }
70+ , { module: "ManyElements", group: "elmUI", count: 512, value: "elmUI512" }
28− , { module: "ManyElements", value: "elmUI64" }
71+ , { module: "ManyElements", group: "elmUI", count: 64, value: "elmUI64" }
29− , { module: "ManyElements", value: "elmUI8192" }
72+ , { module: "ManyElements", group: "elmUI", count: 8192, value: "elmUI8192" }
30− , { module: "ManyElements", value: "viewHtml1024" }
73+ , { module: "ManyElements", group: "viewHtml", count: 1024, value: "viewHtml1024" }
31− , { module: "ManyElements", value: "viewHtml128" }
74+ , { module: "ManyElements", group: "viewHtml", count: 128, value: "viewHtml128" }
32− , { module: "ManyElements", value: "viewHtml2048" }
75+ , { module: "ManyElements", group: "viewHtml", count: 2048, value: "viewHtml2048" }
33− , { module: "ManyElements", value: "viewHtml24" }
76+ , { module: "ManyElements", group: "viewHtml", count: 24, value: "viewHtml24" }
34− , { module: "ManyElements", value: "viewHtml256" }
77+ , { module: "ManyElements", group: "viewHtml", count: 256, value: "viewHtml256" }
35− , { module: "ManyElements", value: "viewHtml4096" }
78+ , { module: "ManyElements", group: "viewHtml", count: 4096, value: "viewHtml4096" }
36− , { module: "ManyElements", value: "viewHtml512" }
79+ , { module: "ManyElements", group: "viewHtml", count: 512, value: "viewHtml512" }
37− , { module: "ManyElements", value: "viewHtml64" }
80+ , { module: "ManyElements", group: "viewHtml", count: 64, value: "viewHtml64" }
38− , { module: "ManyElements", value: "viewHtml8192" }
81+ , { module: "ManyElements", group: "viewHtml", count: 8192, value: "viewHtml8192" }
39− , { module: "ManyElements", value: "viewInline1024" }
82+ , { module: "ManyElements", group: "viewInline", count: 1024, value: "viewInline1024" }
40− , { module: "ManyElements", value: "viewInline128" }
83+ , { module: "ManyElements", group: "viewInline", count: 128, value: "viewInline128" }
41− , { module: "ManyElements", value: "viewInline2048" }
84+ , { module: "ManyElements", group: "viewInline", count: 2048, value: "viewInline2048" }
42− , { module: "ManyElements", value: "viewInline24" }
85+ , { module: "ManyElements", group: "viewInline", count: 24, value: "viewInline24" }
43− , { module: "ManyElements", value: "viewInline256" }
86+ , { module: "ManyElements", group: "viewInline", count: 256, value: "viewInline256" }
44− , { module: "ManyElements", value: "viewInline4096" }
87+ , { module: "ManyElements", group: "viewInline", count: 4096, value: "viewInline4096" }
45− , { module: "ManyElements", value: "viewInline512" }
88+ , { module: "ManyElements", group: "viewInline", count: 512, value: "viewInline512" }
46− , { module: "ManyElements", value: "viewInline64" }
89+ , { module: "ManyElements", group: "viewInline", count: 64, value: "viewInline64" }
47− , { module: "ManyElements", value: "viewInline8192" }
90+ , { module: "ManyElements", group: "viewInline", count: 8192, value: "viewInline8192" }
@@ -68,15 +111,17 @@ main = Benchmark.Render.toProgram ${item.module}.${item.value}
69 const page = await browser.newPage();
112 const page = await browser.newPage();
70 const results = await benchPage(page);
113 const results = await benchPage(page);
114+ results.group = item.group
115+ results.count = item.count
71 await page.close()
116 await page.close()
72 console.log(results)
117 console.log(results)
73 allResults.push(results)
118 allResults.push(results)
75 await browser.close();
120 await browser.close();
77− var resultsDir = "results"
122+
78− if (!fs.existsSync(resultsDir)) {
123+ allResults = regoupResults(allResults)
79− fs.mkdirSync(resultsDir);
124+
80− }
125+ write_results(allResults)
81− fs.writeFileSync(`./${resultsDir}/1.1.1-candidate-optimized.json`, JSON.stringify(allResults))
126+