Always dim out external frames.

This commit is contained in:
Bartosz Taudul
2026-05-02 00:38:34 +02:00
parent 4e6f7c2152
commit 335403d860
3 changed files with 17 additions and 3 deletions

2
NEWS
View File

@@ -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.

View File

@@ -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.

View File

@@ -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 );