diff --git a/NEWS b/NEWS index 0a6e6808..a9805069 100644 --- a/NEWS +++ b/NEWS @@ -15,7 +15,7 @@ vx.xx.x (2026-xx-xx) - Flame graph window. - Call stack window. - Statistics window (sampling mode). -- External frames are now dimmed out in call stack tooltips. +- External frames are now dimmed out in call stacks. - Single-line call stacks now have ellipsis at the end, if there are frames remaining. - System tracing on Windows has been refactored to be more robust. diff --git a/manual/tracy.tex b/manual/tracy.tex index 28f9370b..12cd281b 100644 --- a/manual/tracy.tex +++ b/manual/tracy.tex @@ -4586,7 +4586,7 @@ Stack frame location may be displayed in the following number of ways, depending In some cases, it may not be possible to decode stack frame addresses correctly. Such frames will be presented with a dimmed '\texttt{[ntdll.dll]}' name of the image containing the frame address, or simply '\texttt{[unknown]}' if the profiler cannot retrieve even this information. Additionally, '\texttt{[kernel]}' is used to indicate unknown stack frames within the operating system's internal routines. -External frames from system libraries are hidden by default. Enabling the \emph{\faShieldHalved{}~External} option will show these frames, which can be useful for debugging issues in external code. +External frames from system libraries are hidden by default. Enabling the \emph{\faShieldHalved{}~External} option will show these frames, which can be useful for debugging issues in external code. When external frames are displayed, they are dimmed out. The \emph{\faScissors{}~Short images} option shortens the displayed executable image name to only the file name. The full path is available in the tooltip. diff --git a/profiler/src/profiler/TracyView_Callstack.cpp b/profiler/src/profiler/TracyView_Callstack.cpp index 1c1bbdd0..ae5b96b3 100644 --- a/profiler/src/profiler/TracyView_Callstack.cpp +++ b/profiler/src/profiler/TracyView_Callstack.cpp @@ -414,7 +414,8 @@ void View::DrawCallstackTable( const CallstackFrameId* data, size_t size, uint64 auto filename = m_worker.GetString( frame.file ); auto image = frameData->imageName.Active() ? m_worker.GetString( frameData->imageName ) : nullptr; - if( IsFrameExternal( filename, image ) ) + const bool isExternal = IsFrameExternal( filename, image ); + if( isExternal ) { if( !m_showExternalFrames ) { @@ -466,6 +467,19 @@ void View::DrawCallstackTable( const CallstackFrameId* data, size_t size, uint64 { TextColoredUnformatted( 0xFF8888FF, txt ); } + else if( isExternal ) + { + if( m_vd.shortenName == ShortenName::Never ) + { + TextDisabledUnformatted( txt ); + } + else + { + const auto normalized = ShortenZoneName( ShortenName::OnlyNormalize, txt ); + TextDisabledUnformatted( normalized ); + TooltipNormalizedName( txt, normalized ); + } + } else if( m_vd.shortenName == ShortenName::Never ) { ImGui::TextUnformatted( txt );