JMH Visualizer
Visually explore your JMH Benchmarks! Online version at http://jmh.morethan.io!
Comes with 2 companion projects:
Features
- Serverless architecture - All happens locally in your browser
- Visualize the benchmarks of a single run (one JSON file) grouped by benchmark class
- Vertical bar-chart with score and score error
- Link to the original JSON
- Show individual runs as tooltip
- Compare the benchmarks of 2 runs (two JSON files) grouped by benchmark class
- Summary of noteable changes
- Vertical bar-chart from -100% to 100%
- Link to the original JSON
- Show score and error of both runs in tooltip
- Compare the benchmarks of multiple runs (n JSON files) grouped by benchmark class
- Summary of noteable changes
- Line chart
- Show score and error on hover
- Visualize secondary metrics like 'ยทgc.alloc.rate'
- Focus on subselection of charts with synced axis scales
- Load benchmarks from external url or gists
Major Changes
- Mar 2021 - 0.9.3 Support Gists containing multiple files
- Aug 2018 - 0.9 Couple of user requested features
- Jul 2018 - 0.8 Revamp Summary Page + Chart transitions
- Jan 2018 - 0.7.3 External URL/Gist support
- Okt 2017 - 0.7 Multi-Run support
- Aug 2017 - 0.6 Layout change & Summary support
- Jul 2017 - 0.5 Focussing of benchmarks
- May 2017 - 0.4 Secondary Metrics support
- Apr 2017 - 0.3 Error Bars & Params support
- Nov 2016 - 0.2: Add 2 run compare view
- Okt 2016 - 0.1: Initial Release
Tips & Tricks
While this app will visualize any valid JMH JSON you throw at it, you can write your benchmarks in a way that make the visualization much more enjoyable...
- Put those benchmarks in a single class which you most likely wanne compare to each other
- On the other hand, don't put to much stuff in a single class/chart (since readability will suffer)
- Don't mix incompatible benchmark styles into one class (like mixing average and single shot is ok, but mixing avarage and throughput doesn't make much sense)
- Sensibly design your package structure, your class name and you methods names, those are reflected in the auto-generated charts
- Keep method names short but meaningful
- The method names reflect initial sort, so if you have benchmarks called 'with1Threads, with10Threads' naming them 'with01Thread, with10Thread' will display nicer
Parameter reference
Contribute
Use the issue tracker and/or open pull requests!
Useful Commands
npm install
Download all necessary npm packagesnpm run lint
Lint the javascript filesnpm run test
Run testsnpm run check
Run Lint & Testnpm run watch
Continuously build the projectopen build/index.html
Open the build project in your default browsernpm run release
Build production versionnpm run deploy
Build production version & move it to the github pages fodler
Realease
- Increase version in package.json
- Update README.md in case of major releases
npm run deploy
- commit & push
- tag with
- git tag -a $releaseVersion -m "$releaseVersion release"
- git push --tags
Credits
http://recharts.org/ - The chart ground work
http://www.favicon.cc/ - Created the favicon with
Babel, webpack, react,... and many more for an enjoyable webstack!