Search code examples
rubyprofilingruby-prof

Is it possible to ignore irrelevant methods when profiling ruby applications?


While using ruby-prof, printed out in graph-html mode, the report for one method says (with some snipping)

%Total       %Self       Total       Self    Wait    Child       Calls      Name    Line
52.85%       0.00%       51.22       0.00    0.00    51.22       1  ClassName#method_name  42
                         51.22       0.00    0.00    51.22       1/3        Hash#each  4200

Obviously, it's not Hash#each that's taking a long time, but the yield block within Hash#each.

Looking at the report for Hash#each is confusing because it reports on all of the code called by anything that uses Hash#each.

Is it possible to ask ruby-prof to put the information on yielded code in ClassName#method_name's report?

Using min_percent or switching to a flat profile doesn't seem to help.


Solution

  • Version 0.9.0 of ruby-prof allows method elimination. For example, to eliminate Integer#times, use

    result = RubyProf.stop
    result.eliminate_methods!([/Integer#times/])
    

    so that

    def method_a
      5.times {method_b}
    end
    

    will indicate the relationship between method_a and method_b directly.