Repository navigation
Across Rubies: charts and cards that say what happened - #254
Merged
Merged
Conversation
The relative view divided each report by its own value on the reference Ruby, so a slower report could draw far above the claimed one (splat at about 130x under YJIT while the single Array argument still won). Dividing every report by the claimed report's median on the reference keeps one baseline per card, so the higher line is the faster report.
A linear axis from 0 let one fast engine or report flatten the rest: with TruffleRuby near 400M i/s every MRI line of "normal vs &method" sat on 0, and a 35x to 173x gap left the splat line flat. On a log axis a 100x gap and a 10% change between Rubies are both readable. The axis is fitted to the drawn values with at least a 4x span, so close lines do not fill the chart with noise.
The card title was the report labels ("normal vs &method"), which says
what was compared but not what happened, and the sentence under it
counted interpreter builds even with YJIT or ZJIT picked. Each card now
opens with a verdict for the selected build: the claim wins everywhere,
wins or ties, wins on some Rubies (and who wins on the others), or
loses. Under it: the win and loss ratios, the claim's own speed across
released Rubies (about the same when within the reference's variation),
the JIT against no JIT, and which Rubies are not counted.
Wins, ties and losses compare the claim with the fastest other report,
not the second one listed. The tooltip and the table use the same rule.
The section headings were small gray capitals in a page of 78 charts, with no way to get to one. They are now real headings with how many benchmarks they hold, and the picker has a "Jump to" menu that lands each heading under the pinned picker. A find box narrows the cards to those whose title, report names, file or section contain every word typed; it is kept in the URL as ?find=.
The TruffleRuby labels ran into each other ("truffle" twice) and every
tick under a JIT build repeated "+yjit". Columns now show the version,
with the engine once under each group, shortened or thinned when the
chart is narrow. A card with suspect results says what the triangles
are in its legend. The CPU, shard and reference variation, the same on
most cards, moved into "Numbers per build"; a noisy benchmark keeps a
visible warning. The intro links to how to read the charts, which now
explains the verdict icons, the log scale and the relative baseline.
One line under the verdict held every number ("Wins by 1.05x (Ruby 3.0)
to 1.2x (Ruby head) · Own speed from Ruby 2.1 to 4.0: +40.4% · Not
counted: ..."), and it read as if Ruby 3.0 were being compared with Ruby
head. Each number now has its own tile: a label, the value, and a
caption saying who it is about and where ("attr_accessor over
getter_and_setter, least on Ruby 3.0, most on Ruby head"). The report
labels are the card title again, above the verdict, and the Rubies left
out of the count move under the chart they refer to.
A title with many report names, like "value.between? vs plain compare vs range#cover? vs range#include? vs range#member?", broke over two lines at 20px. A long title now shrinks to fit one line, down to 14px, and only wraps (at 14px) when it is too long even then: on desktop that is the two titles over 100 characters.
A free-text box leaves the reader guessing what to type. Sections are the way in.
- Keep 4 significant digits in the relative value, so a report millions of times slower than the claimed one no longer rounds to 0 and breaks the log axis (26 values on run 37571671870); the axis also skips anything at or below 0, and labels tiny values as 1/50M×. - A claim that ties on some Rubies and loses on the rest says it never wins (✗), not "wins on 0 of N" (~). - "the one Ruby" instead of "all 1 Rubies". - A Ruby where the claim ran but could not be compared says "Not compared", not "Did not run". - "How to read a card" lists every icon. - Jump to keeps the chosen section, so arrow keys can move through the list. - Card titles are measured in one pass and again once the web font loads. - Drop an unused helper and a leftover from the find box.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Makes the Across Rubies cards say what happened, and fixes charts that could lead to the wrong conclusion.
attr_accessorwins or ties on all 16 Rubies (2 ties)", then labelled tiles: how much faster or slower, the claimed idiom's own speed from the oldest to the newest released Ruby, and with a JIT, the JIT against the interpreter. It compares the claimed idiom with the fastest of the others, not just the second report. The tooltip and the table do the same.How it was checked
All checks ran on run 37571671870's artifacts. Built with
main's builder, they give the sameacross-rubies.jsonas the live site.Not checked: a run of the Results site workflow from this branch. The builder change only touches the relative value, and the page is static.