mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-07-29 12:00:32 +00:00
Add a Gitlab::Profiler.print_by_total_time convenience method
This method uses Gitlab::Profiler::TotalTimeFlatPrinter internally, which is the same as RubyProf::FlatPrinter, but the min_percent option (and new max_percent option) applies to the _total_ time, not the _self_ time. This helps us figure out if we're calling a library inefficiently, for instance.
This commit is contained in:
@ -42,6 +42,36 @@ Passing a `logger:` keyword argument to `Gitlab::Profiler.profile` will send
|
||||
ActiveRecord and ActionController log output to that logger. Further options are
|
||||
documented with the method source.
|
||||
|
||||
There is also a RubyProf printer available:
|
||||
`Gitlab::Profiler::TotalTimeFlatPrinter`. This acts like
|
||||
`RubyProf::FlatPrinter`, but its `min_percent` option works on the method's
|
||||
total time, not its self time. (This is because we often spend most of our time
|
||||
in library code, but this comes from calls in our application.) It also offers a
|
||||
`max_percent` option to help filter out outer calls that aren't useful (like
|
||||
`ActionDispatch::Integration::Session#process`).
|
||||
|
||||
There is a convenience method for using this,
|
||||
`Gitlab::Profiler.print_by_total_time`:
|
||||
|
||||
```ruby
|
||||
result = Gitlab::Profiler.profile('/my-user')
|
||||
Gitlab::Profiler.print_by_total_time(result, max_percent: 60, min_percent: 2)
|
||||
# Measure Mode: wall_time
|
||||
# Thread ID: 70005223698240
|
||||
# Fiber ID: 70004894952580
|
||||
# Total: 1.768912
|
||||
# Sort by: total_time
|
||||
#
|
||||
# %self total self wait child calls name
|
||||
# 0.00 1.017 0.000 0.000 1.017 14 *ActionView::Helpers::RenderingHelper#render
|
||||
# 0.00 1.017 0.000 0.000 1.017 14 *ActionView::Renderer#render_partial
|
||||
# 0.00 1.017 0.000 0.000 1.017 14 *ActionView::PartialRenderer#render
|
||||
# 0.00 1.007 0.000 0.000 1.007 14 *ActionView::PartialRenderer#render_partial
|
||||
# 0.00 0.930 0.000 0.000 0.930 14 Hamlit::TemplateHandler#call
|
||||
# 0.00 0.928 0.000 0.000 0.928 14 Temple::Engine#call
|
||||
# 0.02 0.865 0.000 0.000 0.864 638 *Enumerable#inject
|
||||
```
|
||||
|
||||
[GitLab-Profiler](https://gitlab.com/gitlab-com/gitlab-profiler) is a project
|
||||
that builds on this to add some additional niceties, such as allowing
|
||||
configuration with a single Yaml file for multiple URLs, and uploading of the
|
||||
|
Reference in New Issue
Block a user