FlameGraph
FlameGraph copied to clipboard
stackcollapse-perf: does not process last event in file
When given a trace with a single event, like the one below, stackcollapse-perf.pl
gives no output
boa_cli;[unknown];boa_cli::main;boa::realm::Realm::create;boa::realm::Realm::create_instrinsics;boa::builtins::console::create_constructor;boa::builtins::value::ValueData::set_field_slice;boa::builtins::value::ValueData::set_field;boa::builtins::object::internal_methods_trait::ObjectInternalMethods::set;<boa::builtins::object::Object as boa::builtins::object::internal_methods_trait::ObjectInternalMethods>::define_own_property;boa::builtins::value::to_value;<alloc::string::String as boa::builtins::value::ToValue>::to_value;gc::Gc<T>::new;gc::gc::GcBox<T>::new;std::thread::local::LocalKey<T>::with;std::thread::local::LocalKey<T>::try_with;gc::gc::GcBox<T>::new::_{{closure}};gc::gc::collect_garbage;gc::gc::collect_garbage::mark;gc::gc::GcBox<T>::trace_inner;<gc::GcCell<T> as gc::trace::Trace>::trace;<alloc::boxed::Box<T> as gc::trace::Trace>::trace;<alloc::boxed::Box<T> as gc::trace::Trace>::trace::mark;<boa::environment::global_environment_record::GlobalEnvironmentRecord as gc::trace::Trace>::trace;<boa::environment::global_environment_record::GlobalEnvironmentRecord as gc::trace::Trace>::trace::mark;<alloc::boxed::Box<T> as gc::trace::Trace>::trace;<alloc::boxed::Box<T> as gc::trace::Trace>::trace::mark;<boa::environment::object_environment_record::ObjectEnvironmentRecord as gc::trace::Trace>::trace;<boa::environment::object_environment_record::ObjectEnvironmentRecord as gc::trace::Trace>::trace::mark;<gc::Gc<T> as gc::trace::Trace>::trace;gc::gc::GcBox<T>::trace_inner;<boa::builtins::value::ValueData as gc::trace::Trace>::trace;<boa::builtins::value::ValueData as gc::trace::Trace>::trace::mark;<gc::GcCell<T> as gc::trace::Trace>::trace;<boa::builtins::object::Object as gc::trace::Trace>::trace;<boa::builtins::object::Object as gc::trace::Trace>::trace::mark;<alloc::boxed::Box<T> as gc::trace::Trace>::trace;<alloc::boxed::Box<T> as gc::trace::Trace>::trace::mark;<std::collections::hash::map::HashMap<K,V> as gc::trace::Trace>::trace;<std::collections::hash::map::HashMap<K,V> as gc::trace::Trace>::trace::mark;<boa::builtins::property::Property as gc::trace::Trace>::trace;<boa::builtins::property::Property as gc::trace::Trace>::trace::mark;<core::option::Option<T> as gc::trace::Trace>::trace;<core::option::Option<T> as gc::trace::Trace>::trace::mark;<gc::Gc<T> as gc::trace::Trace>::trace;gc::gc::GcBox<T>::trace_inner;<boa::builtins::value::ValueData as gc::trace::Trace>::trace;<boa::builtins::value::ValueData as gc::trace::Trace>::trace::mark;<gc::GcCell<T> as gc::trace::Trace>::trace;<boa::builtins::object::Object as gc::trace::Trace>::trace;<boa::builtins::object::Object as gc::trace::Trace>::trace::mark;<alloc::boxed::Box<T> as gc::trace::Trace>::trace;<alloc::boxed::Box<T> as gc::trace::Trace>::trace::mark;<std::collections::hash::map::HashMap<K,V> as gc::trace::Trace>::trace;<std::collections::hash::map::HashMap<K,V> as gc::trace::Trace>::trace::mark;<boa::builtins::property::Property as gc::trace::Trace>::trace;<boa::builtins::property::Property as gc::trace::Trace>::trace::mark;<core::option::Option<T> as gc::trace::Trace>::trace;<core::option::Option<T> as gc::trace::Trace>::trace::mark;<gc::Gc<T> as gc::trace::Trace>::trace;gc::gc::GcBox<T>::trace_inner;<boa::builtins::value::ValueData as gc::trace::Trace>::trace;<boa::builtins::value::ValueData as gc::trace::Trace>::trace::mark;<gc::GcCell<T> as gc::trace::Trace>::trace;<boa::builtins::object::Object as gc::trace::Trace>::trace;<boa::builtins::object::Object as gc::trace::Trace>::trace::mark;<alloc::boxed::Box<T> as gc::trace::Trace>::trace;<alloc::boxed::Box<T> as gc::trace::Trace>::trace::mark;<std::collections::hash::map::HashMap<K,V> as gc::trace::Trace>::trace;<std::collections::hash::map::HashMap<K,V> as gc::trace::Trace>::trace::mark;<boa::builtins::property::Property as gc::trace::Trace>::trace;<boa::builtins::property::Property as gc::trace::Trace>::trace::mark;<core::option::Option<T> as gc::trace::Trace>::trace;<core::option::Option<T> as gc::trace::Trace>::trace::mark;<gc::Gc<T> as gc::trace::Trace>::trace;gc::gc::GcBox<T>::trace_inner;<boa::builtins::value::ValueData as gc::trace::Trace>::trace;<boa::builtins::value::ValueData as gc::trace::Trace>::trace::mark;<alloc::boxed::Box<T> as gc::trace::Trace>::trace;<alloc::boxed::Box<T> as gc::trace::Trace>::trace::mark;<gc::GcCell<T> as gc::trace::Trace>::trace;<boa::builtins::function::Function as gc::trace::Trace>::trace;<boa::builtins::function::Function as gc::trace::Trace>::trace::mark;<boa::builtins::function::NativeFunction as gc::trace::Trace>::trace;<boa::builtins::function::NativeFunction as gc::trace::Trace>::trace::mark;<boa::builtins::object::Object as gc::trace::Trace>::trace;<boa::builtins::object::Object as gc::trace::Trace>::trace::mark;<alloc::boxed::Box<T> as gc::trace::Trace>::trace;<alloc::boxed::Box<T> as gc::trace::Trace>::trace::mark;<std::collections::hash::map::HashMap<K,V> as gc::trace::Trace>::trace 1
We had the same bug in inferno, and the fix (https://github.com/jonhoo/inferno/pull/168) was to also consider a stack as ended on EOF, just like on an empty line. I'm waiting to merge the PR to inferno, as we also run all of the tests in this repository, which would all change as a result of this being fixed :)