- 🛠 Fix compiling on older versions of gcc that do not default to c99 (Charlie Savage)
- 🔀 API change - remove merge_fibers support since it resulted in incorrect results or crashes (Charlie Savage)
- 🛠 Fix crash when profiling memory usage (Charlie Savage)
- 🖨 When tracing execution correctly print out newobj tracepoint events (Charlie Savage)
- ✂ Remove no longer needed code for building extensions (Charlie Savage)
- 🛠 Fix rack profiler so it is thread safe (Charlie Savage)
- 🛠 Fix loading of prebuilt binaries on mingw64 to use Ruby's major and minor version (Charlie Savage)
- Add max_percent and filter_by options to flat printer (Sean McGivern)
- 🏗 Include binary in mingw64 build (Charlie Savage)
- ⚡️ Update C code to use newer RTypedData API versus older RData API.
- 🗄 Update C code to use rb_cObject versus the older, deprecated, rb_cData.
- ⚡️ Update memory management - CallInfo's now keep alive their owning Profile instances. Fixes crashes that could happen in rare instances.
- 🛠 Fix call stack printer broken in version 1.0.0 (Charlie Savage)
- 💎 Ruby 2.7.0 support (Charlie Savage)
- 🏁 Switch to Windows high precision timer for measuring wall time (Charlie Savage)
- 💎 Much better support for reverse call trees - if you start RubyProf at the bottom of a call tree it will correctly calculate times as it ascends the tree (Charlie Savage)
- 🐎 Port AggregateCallInfo from Ruby to C to increase performance
- API change - CallInfo has been renamed CallTree
- 🛠 Fix crashes on Ruby 2.4.*
- 🔀 Reimplement merge_fibers (Charlie Savage)
- 🛠 Fix crash caused by threads being freed when profiles are freed (Charlie Savage)
👀 ruby-prof's development stretches all the way back to 2005. Fourteen years later, it seems time for version 1.0! 🔖 Version 1.0 is a significant update that greatly improves the internals of ruby-prof and adds a number of improvements.
🔄 Changes (Charlie Savage):
- Profiling is significantly faster - 5x in some cases
- Recursive profiles are finally handled correctly. Yeah!!!
- Redesigned reports (Chirs Whitefield)
- 🆕 New documentation website (https://ruby-prof.github.io)
- 💎 The ability to measure allocations and memory usage using a standard (unpatched) version of ruby
- The ability to save and reload profiling results for later analysis
- The ability track object allocations
🚚 At the same time, it was also time to remove old code and deprecated methods. These changes include (Charlie Savage):
- ⬇️ Drop support for old versions of ruby. Currently 2.4 and up are required.
- ✂ Remove support for method elimination (instead use method exclusion).
- Remove the CPU_TIME measurement mode since it duplicates the PROCESS_TIME mode and required inline assembly code
- Remove the GC_TIME and GC_RUNS measurement modes since they required patched ruby versions. In modern ruby it is possible to reimplement this functionality, but it does not seem of that much value (shout out if you want it back).
- 🔀 Merge the RubyProf::FlatPrinterWithLineNumbers printer into RubyProf::FlatPrinter.
- Removed support for RUBY_PROF_EDITOR_URI environment variable that specified the link scheme. This features was more confusing then helpful.
- 🛠 Fix grouping by thread/fiber (Charlie Savage)
- 🛠 Fix include/exclude thread checking (Charlie Savage)
- 🛠 Fix failing tests (Charlie Savage)
- Fix grouping by thread_id and fiber_id (Charlie Savage)
- ⚡️ Update Visual Studio solution to 2019 (Charlie Savage)
- 🖨 Adjust AbstractPrinter#editor_uri so it's possible to disable uri (Maciek Dubiński)-
- 🛠 Fix -X/--exclude-file option not working (John Lindgren)
- Different directory for middleware output in readme (Aldric Giacomoni)
- 🛠 Fixing spelling mistakes and typos (David Kennedy and Roger Pack)
- ➕ Add "allow_exceptions" option to Profile (Ryan Duryea)
- ⚡️ Update readme (Jan Piotrowski, Nathan Seither, victor-am)
- ⚡️ Travis updates (Niocals Leger and Charlie Savage)
- Fix NewRelic module detection in exclude_common_methods! (Ben Hughes)
- 🔄 Changed method/class names produced by the callgrind printer to be more kcachegrind friendly (thx to Nelson Gauthier and Ben Hughes, see https://github.com/ruby-prof/ruby-prof/pull/200).
- Recursive instances of a method call are now dtected during profiling (thx to Nelson Gauthier and Ben Hughes, see https://github.com/ruby-prof/ruby-prof/pull/201).
- Methods can now be ignored during a profiling run instead of eliminating them after a profile run, which has been deprecated (thx to Nelson Gauthier and Ben Hughes, see https://github.com/ruby-prof/ruby-prof/pull/202).
- Use RUBY_PROF_EDITOR_URI=emacs to open source code links in the one true editor. (thx Alexander Egorov, see https://github.com/ruby-prof/ruby-prof/pull/183 and https://github.com/typester/emacs-handler).
- 🛠 Fixed that calling profile.stop would stop profiling all active profiling runs.
- 🛠 Fixed that remembering parent call frame pointer before stack reallocation could cause a segfault.