From 9d839c52d17dc5efc07b280989a65561add1bf3e Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Mon, 16 Dec 2024 14:45:19 +0100 Subject: [PATCH] Allow filtering out external frames in flame graph. --- .../src/profiler/TracyView_FlameGraph.cpp | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/profiler/src/profiler/TracyView_FlameGraph.cpp b/profiler/src/profiler/TracyView_FlameGraph.cpp index 4e73b7d2..dc6c4eed 100644 --- a/profiler/src/profiler/TracyView_FlameGraph.cpp +++ b/profiler/src/profiler/TracyView_FlameGraph.cpp @@ -228,16 +228,29 @@ void View::BuildFlameGraph( const Worker& worker, std::vector& d const auto symaddr = frame.symAddr; if( symaddr != 0 ) { - auto it = std::find_if( vec->begin(), vec->end(), [symaddr]( const auto& v ) { return v.srcloc == symaddr; } ); - if( it == vec->end() ) + bool active = true; + if( !m_flameExternal ) { - vec->emplace_back( FlameGraphItem { (int64_t)symaddr, 1, frame.name } ); - vec = &vec->back().children; + auto filename = m_worker.GetString( frame.file ); + auto image = frameData->imageName.Active() ? m_worker.GetString( frameData->imageName ) : nullptr; + if( IsFrameExternal( filename, image ) ) + { + active = false; + } } - else + if( active ) { - it->time++; - vec = &it->children; + auto it = std::find_if( vec->begin(), vec->end(), [symaddr]( const auto& v ) { return v.srcloc == symaddr; } ); + if( it == vec->end() ) + { + vec->emplace_back( FlameGraphItem { (int64_t)symaddr, 1, frame.name } ); + vec = &vec->back().children; + } + else + { + it->time++; + vec = &it->children; + } } } }