FlameGraph icon indicating copy to clipboard operation
FlameGraph copied to clipboard

stackcollapse-perf: does not process last event in file

Open jonhoo opened this issue 4 years ago • 0 comments

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 :)

jonhoo avatar Mar 29 '20 21:03 jonhoo