class RubyProf::FlameGraphPrinter

def build_flame_data(call_tree, visited = Set.new)

def build_flame_data(call_tree, visited = Set.new)
  node = {
    name: call_tree.target.full_name,
    value: call_tree.total_time,
    self_value: call_tree.self_time,
    called: call_tree.called,
    children: []
  }
  unless visited.include?(call_tree.target)
    visited.add(call_tree.target)
    call_tree.children.sort_by { |c| -c.total_time }.each do |child|
      node[:children] << build_flame_data(child, visited)
    end
    visited.delete(call_tree.target)
  end
  node
end