def dump_profile_slowest_example_groups
number_of_examples = RSpec.configuration.profile_examples
example_groups = {}
examples.each do |example|
location = example.example_group.parent_groups.last.metadata[:example_group][:location]
example_groups[location] ||= Hash.new(0)
example_groups[location][:total_time] += example.execution_result[:run_time]
example_groups[location][:count] += 1
example_groups[location][:description] = example.example_group.top_level_description unless example_groups[location].has_key?(:description)
end
return if example_groups.keys.length <= 1
example_groups.each do |loc, hash|
hash[:average] = hash[:total_time].to_f / hash[:count]
end
sorted_groups = example_groups.sort_by {|_, hash| -hash[:average]}.first(number_of_examples)
output.puts "\nTop #{sorted_groups.size} slowest example groups:"
sorted_groups.each do |loc, hash|
average = "#{failure_color(format_seconds(hash[:average]))} #{failure_color("seconds")} average"
total = "#{format_seconds(hash[:total_time])} seconds"
count = pluralize(hash[:count], "example")
output.puts " #{hash[:description]}"
output.puts detail_color(" #{average} (#{total} / #{count}) #{loc}")
end
end