diff --git a/doc/Jamfile b/doc/Jamfile index 17d52c500..c92416fea 100644 --- a/doc/Jamfile +++ b/doc/Jamfile @@ -58,7 +58,6 @@ docca.reference reference.qbk # WARN_AS_ERROR=NO ; - #------------------------------------------------------------------------------- # # Produce the Boost.Book XML from the QuickBook @@ -73,6 +72,15 @@ install images explicit images ; +install scripts + : + [ glob scripts/*.js ] + : + html/json + ; + +explicit scripts ; + xml json_doc : qbk/main.qbk @@ -89,6 +97,8 @@ explicit json_doc ; # #------------------------------------------------------------------------------- +path-constant HERE : . ; + boostbook json : json_doc @@ -101,9 +111,12 @@ boostbook json toc.max.depth=8 # How many levels should be created for each TOC? generate.section.toc.level=8 # Control depth of TOC generation in sections generate.toc="chapter toc,title section nop reference nop" + $(HERE) ../../../tools/boostbook/dtd : images + bench.html + scripts ; #------------------------------------------------------------------------------- diff --git a/doc/bench.html b/doc/bench.html new file mode 100644 index 000000000..3a3cb15a5 --- /dev/null +++ b/doc/bench.html @@ -0,0 +1,428 @@ +
+
+ + +
diff --git a/doc/images/parse_apache_builds.png b/doc/images/parse_apache_builds.png deleted file mode 100644 index 5172a4c73..000000000 Binary files a/doc/images/parse_apache_builds.png and /dev/null differ diff --git a/doc/images/parse_canada.png b/doc/images/parse_canada.png deleted file mode 100644 index 6e41522e2..000000000 Binary files a/doc/images/parse_canada.png and /dev/null differ diff --git a/doc/images/parse_citm_catalog.png b/doc/images/parse_citm_catalog.png deleted file mode 100644 index eb451b186..000000000 Binary files a/doc/images/parse_citm_catalog.png and /dev/null differ diff --git a/doc/images/parse_github_events.png b/doc/images/parse_github_events.png deleted file mode 100644 index e882d1666..000000000 Binary files a/doc/images/parse_github_events.png and /dev/null differ diff --git a/doc/images/parse_gsoc_2018.png b/doc/images/parse_gsoc_2018.png deleted file mode 100644 index 546773125..000000000 Binary files a/doc/images/parse_gsoc_2018.png and /dev/null differ diff --git a/doc/images/parse_instruments.png b/doc/images/parse_instruments.png deleted file mode 100644 index d36bb5aaa..000000000 Binary files a/doc/images/parse_instruments.png and /dev/null differ diff --git a/doc/images/parse_marine_ik.png b/doc/images/parse_marine_ik.png deleted file mode 100644 index 600a0fd62..000000000 Binary files a/doc/images/parse_marine_ik.png and /dev/null differ diff --git a/doc/images/parse_mesh.png b/doc/images/parse_mesh.png deleted file mode 100644 index a4658c87e..000000000 Binary files a/doc/images/parse_mesh.png and /dev/null differ diff --git a/doc/images/parse_mesh_pretty.png b/doc/images/parse_mesh_pretty.png deleted file mode 100644 index 847c1a0a4..000000000 Binary files a/doc/images/parse_mesh_pretty.png and /dev/null differ diff --git a/doc/images/parse_numbers.png b/doc/images/parse_numbers.png deleted file mode 100644 index c47da48a1..000000000 Binary files a/doc/images/parse_numbers.png and /dev/null differ diff --git a/doc/images/parse_random.png b/doc/images/parse_random.png deleted file mode 100644 index 30c08554f..000000000 Binary files a/doc/images/parse_random.png and /dev/null differ diff --git a/doc/images/parse_twitter.png b/doc/images/parse_twitter.png deleted file mode 100644 index f5d8461ca..000000000 Binary files a/doc/images/parse_twitter.png and /dev/null differ diff --git a/doc/images/parse_twitterescaped.png b/doc/images/parse_twitterescaped.png deleted file mode 100644 index 06c35f828..000000000 Binary files a/doc/images/parse_twitterescaped.png and /dev/null differ diff --git a/doc/images/parse_update_center.png b/doc/images/parse_update_center.png deleted file mode 100644 index 21f4bbe02..000000000 Binary files a/doc/images/parse_update_center.png and /dev/null differ diff --git a/doc/images/serialize_apache_builds.png b/doc/images/serialize_apache_builds.png deleted file mode 100644 index 9002f5f93..000000000 Binary files a/doc/images/serialize_apache_builds.png and /dev/null differ diff --git a/doc/images/serialize_canada.png b/doc/images/serialize_canada.png deleted file mode 100644 index 4a2818076..000000000 Binary files a/doc/images/serialize_canada.png and /dev/null differ diff --git a/doc/images/serialize_citm_catalog.png b/doc/images/serialize_citm_catalog.png deleted file mode 100644 index a8c6d3159..000000000 Binary files a/doc/images/serialize_citm_catalog.png and /dev/null differ diff --git a/doc/images/serialize_github_events.png b/doc/images/serialize_github_events.png deleted file mode 100644 index 4e84fadf5..000000000 Binary files a/doc/images/serialize_github_events.png and /dev/null differ diff --git a/doc/images/serialize_gsoc_2018.png b/doc/images/serialize_gsoc_2018.png deleted file mode 100644 index 810e1413f..000000000 Binary files a/doc/images/serialize_gsoc_2018.png and /dev/null differ diff --git a/doc/images/serialize_instruments.png b/doc/images/serialize_instruments.png deleted file mode 100644 index 642e191d8..000000000 Binary files a/doc/images/serialize_instruments.png and /dev/null differ diff --git a/doc/images/serialize_marine_ik.png b/doc/images/serialize_marine_ik.png deleted file mode 100644 index d74e04c04..000000000 Binary files a/doc/images/serialize_marine_ik.png and /dev/null differ diff --git a/doc/images/serialize_mesh.png b/doc/images/serialize_mesh.png deleted file mode 100644 index ec2dd67dc..000000000 Binary files a/doc/images/serialize_mesh.png and /dev/null differ diff --git a/doc/images/serialize_mesh_pretty.png b/doc/images/serialize_mesh_pretty.png deleted file mode 100644 index 6937271c9..000000000 Binary files a/doc/images/serialize_mesh_pretty.png and /dev/null differ diff --git a/doc/images/serialize_numbers.png b/doc/images/serialize_numbers.png deleted file mode 100644 index 6fe3c065d..000000000 Binary files a/doc/images/serialize_numbers.png and /dev/null differ diff --git a/doc/images/serialize_random.png b/doc/images/serialize_random.png deleted file mode 100644 index 8cb38dc3c..000000000 Binary files a/doc/images/serialize_random.png and /dev/null differ diff --git a/doc/images/serialize_twitter.png b/doc/images/serialize_twitter.png deleted file mode 100644 index 9ea2eee2a..000000000 Binary files a/doc/images/serialize_twitter.png and /dev/null differ diff --git a/doc/images/serialize_twitterescaped.png b/doc/images/serialize_twitterescaped.png deleted file mode 100644 index 33327ef24..000000000 Binary files a/doc/images/serialize_twitterescaped.png and /dev/null differ diff --git a/doc/images/serialize_update_center.png b/doc/images/serialize_update_center.png deleted file mode 100644 index 48eed4c2a..000000000 Binary files a/doc/images/serialize_update_center.png and /dev/null differ diff --git a/doc/qbk/benchmarks.qbk b/doc/qbk/benchmarks.qbk index ad64dda06..95983a346 100644 --- a/doc/qbk/benchmarks.qbk +++ b/doc/qbk/benchmarks.qbk @@ -103,87 +103,87 @@ The input files, available in the bench/data directory, are laid out thusly: [Size] [Description] ][ - [[link json.benchmarks.parse_apache_builds_json [*apache_builds.json]]] + [[link parse_apache_builds_json [*apache_builds.json]]] [125KB] [ Data from the Apache Jenkins installation. ] ][ - [[link json.benchmarks.parse_canada_json [*canada.json]]] + [[link parse_canada_json [*canada.json]]] [2.2MB] [ The largest file, containing a large number of 2-element arrays holding floating-point coordinate pairs. ] ][ - [[link json.benchmarks.parse_citm_catalog_json [*citm_catalog.json]]] + [[link parse_citm_catalog_json [*citm_catalog.json]]] [1.69MB] [ A large JSON with a variety of nesting, types, and lengths. ] ][ - [[link json.benchmarks.parse_github_events_json [*github_events.json]]] + [[link parse_github_events_json [*github_events.json]]] [64KB] [ An export of data from the Github Events API. ] ][ - [[link json.benchmarks.parse_gsoc_2018_json [*gsoc-2018.json]]] + [[link parse_gsoc-2018_json [*gsoc-2018.json]]] [3.25MB] [ Google Summer of Code 2018 data. ] ][ - [[link json.benchmarks.parse_instruments_json [*instruments.json]]] + [[link parse_instruments_json [*instruments.json]]] [216KB] [ An array of large objects. ] ][ - [[link json.benchmarks.parse_marine_ik_json [*marine_ik.json]]] + [[link parse_marine_ik_json [*marine_ik.json]]] [2.91MB] [ A three.js example model serialized to JSON. ] ][ - [[link json.benchmarks.parse_mesh_json [*mesh.json]]] + [[link parse_mesh_json [*mesh.json]]] [707KB] [ A JSON representing a 3D mesh. Contains many floating-point numbers. ] ][ - [[link json.benchmarks.parse_mesh_pretty_json [*mesh.pretty.json]]] + [[link parse_mesh_pretty_json [*mesh.pretty.json]]] [1.54MB] [ mesh.json with whitespace added. ] ][ - [[link json.benchmarks.parse_numbers_json [*numbers.json]]] + [[link parse_numbers_json [*numbers.json]]] [147KB] [ A array containing only floating-point numbers. ] ][ - [[link json.benchmarks.parse_random_json [*random.json]]] + [[link parse_random_json [*random.json]]] [499KB] [ A JSON with lots of Cyrillic characters. ] ][ - [[link json.benchmarks.parse_twitter_json [*twitter.json]]] + [[link parse_twitter_json [*twitter.json]]] [617KB] [ An export of data from Twitter's API. ] ][ - [[link json.benchmarks.parse_twitterescaped_json [*twitterescaped.json]]] + [[link parse_twitterescaped_json [*twitterescaped.json]]] [550KB] [ twitter.json with whitespace removed and non-ASCII characters replaced with Unicode escapes. ] ][ - [[link json.benchmarks.parse_update_center_json [*update-center.json]]] + [[link parse_update-center_json [*update-center.json]]] [521KB] [ An export of data from Twitter's API. @@ -198,91 +198,72 @@ Compilers and optimization flags: gcc 8.1 (-O3), clang 12.0 (-O3), and msvc 19.2 [/-----------------------------------------------------------------------------] -[heading Parse apache_builds.json] -[$json/images/parse_apache_builds.png [width 668px] [height 712px]] +[block''''''] -[heading Parse canada.json] -[$json/images/parse_canada.png [width 668px] [height 712px]] +To see benchmarks results you need a browser that supports HTML Canvas and +JavaScript. -[heading Parse citm_catalog.json] -[$json/images/parse_citm_catalog.png [width 668px] [height 712px]] +[#parse_apache_builds_json] -[heading Parse github_events.json] -[$json/images/parse_github_events.png [width 668px] [height 712px]] +[#parse_canada_json] -[heading Parse gsoc-2018.json] -[$json/images/parse_gsoc_2018.png [width 668px] [height 712px]] +[#parse_citm_catalog_json] -[heading Parse instruments.json] -[$json/images/parse_instruments.png [width 668px] [height 712px]] +[#parse_github_events_json] -[heading Parse marine_ik.json] -[$json/images/parse_marine_ik.png [width 668px] [height 712px]] +[#parse_gsoc-2018_json] -[heading Parse mesh.json] -[$json/images/parse_mesh.png [width 668px] [height 712px]] +[#parse_instruments_json] -[heading Parse mesh.pretty.json] -[$json/images/parse_mesh_pretty.png [width 668px] [height 712px]] +[#parse_marine_ik_json] -[heading Parse numbers.json] -[$json/images/parse_numbers.png [width 668px] [height 712px]] +[#parse_mesh_json] -[heading Parse random.json] -[$json/images/parse_random.png [width 668px] [height 712px]] +[#parse_mesh_pretty_json] -[heading Parse twitter.json] -[$json/images/parse_twitter.png [width 668px] [height 712px]] +[#parse_numbers_json] -[heading Parse twitterescaped.json] -[$json/images/parse_twitterescaped.png [width 668px] [height 712px]] +[#parse_random_json] -[heading Parse update-center.json] -[$json/images/parse_update_center.png [width 668px] [height 712px]] +[#parse_twitter_json] -[heading Parse apache_builds.json] -[$json/images/parse_apache_builds.png [width 668px] [height 712px]] +[#parse_twitterescaped_json] -[/-----------------------------------------------------------------------------] +[#parse_update-center_json] + +[#parse_apache_builds_json] + +[#serialize_canada_json] -[heading Serialize canada.json] -[$json/images/serialize_canada.png [width 668px] [height 712px]] +[#serialize_citm_catalog_json] -[heading Serialize citm_catalog.json] -[$json/images/serialize_citm_catalog.png [width 668px] [height 712px]] +[#serialize_github_events_json] -[heading Serialize github_events.json] -[$json/images/serialize_github_events.png [width 668px] [height 712px]] +[#serialize_gsoc-2018_json] -[heading Serialize gsoc-2018.json] -[$json/images/serialize_gsoc_2018.png [width 668px] [height 712px]] +[#serialize_instruments_json] -[heading Serialize instruments.json] -[$json/images/serialize_instruments.png [width 668px] [height 712px]] +[#serialize_marine_ik_json] -[heading Serialize marine_ik.json] -[$json/images/serialize_marine_ik.png [width 668px] [height 712px]] +[#serialize_mesh_json] -[heading Serialize mesh.json] -[$json/images/serialize_mesh.png [width 668px] [height 712px]] +[#serialize_mesh.pretty_json] -[heading Serialize mesh.pretty.json] -[$json/images/serialize_mesh_pretty.png [width 668px] [height 712px]] +[#serialize_numbers_json] -[heading Serialize numbers.json] -[$json/images/serialize_numbers.png [width 668px] [height 712px]] +[#serialize_random_json] -[heading Serialize random.json] -[$json/images/serialize_random.png [width 668px] [height 712px]] +[#serialize_twitter_json] -[heading Serialize twitter.json] -[$json/images/serialize_twitter.png [width 668px] [height 712px]] +[#serialize_twitterescaped_json] -[heading Serialize twitterescaped.json] -[$json/images/serialize_twitterescaped.png [width 668px] [height 712px]] +[#serialize_update-center_json] + +[block''''''] + +[/-----------------------------------------------------------------------------] -[heading Serialize update-center.json] -[$json/images/serialize_update_center.png [width 668px] [height 712px]] +[block''''''] [/-----------------------------------------------------------------------------] diff --git a/doc/scripts/draw-bench.js b/doc/scripts/draw-bench.js new file mode 100644 index 000000000..861bbd40d --- /dev/null +++ b/doc/scripts/draw-bench.js @@ -0,0 +1,154 @@ +var Width = 600; + +function autosize (f) { + if (f.scrollHeight > f.clientHeight) { + f.style.height = f.scrollHeight + "px"; + } +} + +// Draw a single bar chart representing +// results for one platform and architecture +function draw_chart(ctx, title, rows, mbsMax) { + var xMax = Math.max(...Object.values(rows)); + + // gray separator + ctx.beginPath(); + ctx.strokeStyle = "#A0A0A0"; + ctx.moveTo(0, 0.5); + ctx.lineTo(Width, 0.5); + ctx.stroke(); + ctx.translate(0, 28); + + // title + ctx.textAlign = "left"; + ctx.fillStyle = "#000000"; + ctx.font = 'bold 16px sans-serif'; + ctx.fillText(title, 0, 0); + ctx.translate(0, 26); + + // chart rows + Object.entries(rows).forEach(([name, mbs]) => + { + var dy = 4; + + ctx.textAlign = "left"; + ctx.fillStyle = "#000000"; + ctx.font = '14px sans-serif'; + ctx.fillText(name, 0, 0); + + var xMbs = 195; + if(name.startsWith("boost")) + ctx.fillStyle = "#eb342a"; + else + ctx.fillStyle = "#909090"; + var w = (Width - 170) * mbs / mbsMax + if(w < xMbs - 120) + w = xMbs - 120; + ctx.fillRect(130, -20+dy, w, 20); + + ctx.textAlign = "right"; + ctx.font = '13px sans-serif'; + ctx.fillStyle = "#000000"; + ctx.fillText(mbs + " MB/s", xMbs + 1, 1); + ctx.fillStyle = "#ffffff"; + ctx.fillText(mbs + " MB/s", xMbs, 0); + + ctx.translate(0, 24); + }); + + // gray separator + ctx.translate(0, -4); + ctx.beginPath(); + ctx.strokeStyle = "#A0A0A0"; + ctx.moveTo(0, 0.5); + ctx.lineTo(Width, 0.5); + ctx.stroke(); +} + +// Draw multiple bar charts, one +// for each platform and architecture +function draw_charts(ctx, tab, mbsMax) { + // top margin + ctx.translate(0, 16); + + // draw each chart + Object.entries(tab).forEach(([name, rows]) => + { + draw_chart(ctx, name, rows, mbsMax); + }); + + // bottom margin + ctx.translate(0, 16); +} + +function measure_and_draw(canvas, tab) { + mbsMax = 0; + Object.entries(tab).forEach(([name, rows]) => + { + mbsMax = Math.max(mbsMax, ...Object.values(rows)); + }); + + var LeftMargin = 48; + + // Measure the height needed + canvas.width = Width; + canvas.height = 30000; + var ctx = canvas.getContext("2d"); + ctx.save(); + draw_charts(ctx, tab); + var tx = ctx.getTransform(); + var height = tx["f"]; + + // Resize the canvas to fit + canvas.width = LeftMargin + Width + 20; + canvas.height = height; + + // Make everything opaque + ctx.fillStyle = "#FFFFFF"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.translate(LeftMargin, 0); + draw_charts(ctx, tab, mbsMax); + ctx.restore(); +} + +Array.prototype.forEach.call( + document.getElementsByClassName("simplesect"), + (elem) => { elem.remove(); } +); + +var data = document.getElementById("benchmarks-data"); +var lines = data.innerHTML.split('\n'); +var tab = new Object(); +for (var i = 0; i < lines.length; i++) +{ + if(lines[i].length == 0) + continue; + items = lines[i].split(','); + var title = items[0] + var target = items[1]; + var name = items[2]; + var mbs = items[3]; + if(! (title in tab)) + tab[title] = new Object(); + if(! (target in tab[title])) + tab[title][target] = new Object(); + var set = tab[title][target]; + if(! (name in set)) + set[name] = new Object(); + set[name] = mbs; +} + +var benchmarks = document.getElementById("benchmarks"); +benchmarks.innerHTML = ""; +Object.entries(tab).forEach(([title, charts]) => +{ + var tab_id = title.replace(/\s+|\./g, "_").toLowerCase(); + benchmarks.innerHTML += + "

" + title + "

" + + ""; +}); +Object.entries(tab).forEach(([title, charts]) => +{ + var tab_id = title.replace(/\s+|\./g, "_").toLowerCase(); + measure_and_draw(document.getElementById(tab_id), charts) +});