Скажем, у меня внутри моей программы J Ruby следующее l oop:
loop do
x=foo()
break if x
bar()
end
, и я хочу собрать информацию о профилировании только для вызовов bar
. Как это сделать? Я так далеко:
pd = []
loop do
x=foo()
break if x
pd << JRuby::Profiler.profile { bar() }
end
Это оставляет мне массив pd
объектов данных профиля, по одному на каждый вызов bar
. Есть ли способ создать «сводный» объект данных, комбинируя все элементы pd
? Или, что еще лучше, иметь один объект, куда profile
просто добавит существующую информацию о профилировании?
Я погуглил документацию по API J Ruby :: Profiler, но не смог найти ничего, кроме нескольких простых примеров, ни один из которых не охватывал мой случай.
ОБНОВЛЕНИЕ : Вот еще одна попытка, которую я попробовал, но она тоже не работает.
Поскольку метод profile
первоначально очищает данные профиля внутри Profiler, я попытался отделить этапы профилирования от инициализации данных. шаги, подобные этому:
JRuby::Profiler.clear
loop do
x=foo()
break if x
JRuby::Profiler.send(:current_thread_context).start_profiling
bar()
JRuby::Profiler.send(:current_thread_context).stop_profiling
end
profile_data = JRuby::Profiler.send(:profile_data)
Сначала это работает, но после исследования я обнаружил, что profile_data
содержит информацию о профилировании из последнего (самого последнего) выполнения bar
, а не всех казней, собранных вместе.