mirror of
https://github.com/wolfpld/tracy.git
synced 2026-06-08 08:33:48 +00:00
Ignore intrinsic wrappers in callstack frames.
With gcc/clang the wrapper functions for intrinsics are annoyingly inserted at top level of stack traces, making it hard to see the call site. Filter out all known instrinsic headers.
This commit is contained in:
@@ -23,4 +23,99 @@ const char* s_tracyStackFrames_[] = {
|
||||
|
||||
const char** s_tracyStackFrames = s_tracyStackFrames_;
|
||||
|
||||
const StringMatch s_tracySkipSubframes_[] = {
|
||||
{ "/include/arm_neon.h", 19 },
|
||||
{ "/include/adxintrin.h", 20 },
|
||||
{ "/include/ammintrin.h", 20 },
|
||||
{ "/include/amxbf16intrin.h", 24 },
|
||||
{ "/include/amxint8intrin.h", 24 },
|
||||
{ "/include/amxtileintrin.h", 24 },
|
||||
{ "/include/avx2intrin.h", 21 },
|
||||
{ "/include/avx5124fmapsintrin.h", 29 },
|
||||
{ "/include/avx5124vnniwintrin.h", 29 },
|
||||
{ "/include/avx512bf16intrin.h", 27 },
|
||||
{ "/include/avx512bf16vlintrin.h", 29 },
|
||||
{ "/include/avx512bitalgintrin.h", 29 },
|
||||
{ "/include/avx512bwintrin.h", 25 },
|
||||
{ "/include/avx512cdintrin.h", 25 },
|
||||
{ "/include/avx512dqintrin.h", 25 },
|
||||
{ "/include/avx512erintrin.h", 25 },
|
||||
{ "/include/avx512fintrin.h", 24 },
|
||||
{ "/include/avx512ifmaintrin.h", 27 },
|
||||
{ "/include/avx512ifmavlintrin.h", 29 },
|
||||
{ "/include/avx512pfintrin.h", 25 },
|
||||
{ "/include/avx512vbmi2intrin.h", 28 },
|
||||
{ "/include/avx512vbmi2vlintrin.h", 30 },
|
||||
{ "/include/avx512vbmiintrin.h", 27 },
|
||||
{ "/include/avx512vbmivlintrin.h", 29 },
|
||||
{ "/include/avx512vlbwintrin.h", 27 },
|
||||
{ "/include/avx512vldqintrin.h", 27 },
|
||||
{ "/include/avx512vlintrin.h", 25 },
|
||||
{ "/include/avx512vnniintrin.h", 27 },
|
||||
{ "/include/avx512vnnivlintrin.h", 29 },
|
||||
{ "/include/avx512vp2intersectintrin.h", 35 },
|
||||
{ "/include/avx512vp2intersectvlintrin.h", 37 },
|
||||
{ "/include/avx512vpopcntdqintrin.h", 32 },
|
||||
{ "/include/avx512vpopcntdqvlintrin.h", 34 },
|
||||
{ "/include/avxintrin.h", 20 },
|
||||
{ "/include/avxvnniintrin.h", 24 },
|
||||
{ "/include/bmi2intrin.h", 21 },
|
||||
{ "/include/bmiintrin.h", 20 },
|
||||
{ "/include/bmmintrin.h", 20 },
|
||||
{ "/include/cetintrin.h", 20 },
|
||||
{ "/include/cldemoteintrin.h", 25 },
|
||||
{ "/include/clflushoptintrin.h", 27 },
|
||||
{ "/include/clwbintrin.h", 21 },
|
||||
{ "/include/clzerointrin.h", 23 },
|
||||
{ "/include/emmintrin.h", 20 },
|
||||
{ "/include/enqcmdintrin.h", 23 },
|
||||
{ "/include/f16cintrin.h", 21 },
|
||||
{ "/include/fma4intrin.h", 21 },
|
||||
{ "/include/fmaintrin.h", 20 },
|
||||
{ "/include/fxsrintrin.h", 21 },
|
||||
{ "/include/gfniintrin.h", 21 },
|
||||
{ "/include/hresetintrin.h", 23 },
|
||||
{ "/include/ia32intrin.h", 21 },
|
||||
{ "/include/immintrin.h", 20 },
|
||||
{ "/include/keylockerintrin.h", 26 },
|
||||
{ "/include/lwpintrin.h", 20 },
|
||||
{ "/include/lzcntintrin.h", 22 },
|
||||
{ "/include/mmintrin.h", 19 },
|
||||
{ "/include/movdirintrin.h", 23 },
|
||||
{ "/include/mwaitxintrin.h", 23 },
|
||||
{ "/include/nmmintrin.h", 20 },
|
||||
{ "/include/pconfigintrin.h", 24 },
|
||||
{ "/include/pkuintrin.h", 20 },
|
||||
{ "/include/pmmintrin.h", 20 },
|
||||
{ "/include/popcntintrin.h", 23 },
|
||||
{ "/include/prfchwintrin.h", 23 },
|
||||
{ "/include/rdseedintrin.h", 23 },
|
||||
{ "/include/rtmintrin.h", 20 },
|
||||
{ "/include/serializeintrin.h", 26 },
|
||||
{ "/include/sgxintrin.h", 20 },
|
||||
{ "/include/shaintrin.h", 20 },
|
||||
{ "/include/smmintrin.h", 20 },
|
||||
{ "/include/tbmintrin.h", 20 },
|
||||
{ "/include/tmmintrin.h", 20 },
|
||||
{ "/include/tsxldtrkintrin.h", 25 },
|
||||
{ "/include/uintrintrin.h", 22 },
|
||||
{ "/include/vaesintrin.h", 21 },
|
||||
{ "/include/vpclmulqdqintrin.h", 27 },
|
||||
{ "/include/waitpkgintrin.h", 24 },
|
||||
{ "/include/wbnoinvdintrin.h", 25 },
|
||||
{ "/include/wmmintrin.h", 20 },
|
||||
{ "/include/x86gprintrin.h", 23 },
|
||||
{ "/include/x86intrin.h", 20 },
|
||||
{ "/include/xmmintrin.h", 20 },
|
||||
{ "/include/xopintrin.h", 20 },
|
||||
{ "/include/xsavecintrin.h", 23 },
|
||||
{ "/include/xsaveintrin.h", 22 },
|
||||
{ "/include/xsaveoptintrin.h", 25 },
|
||||
{ "/include/xsavesintrin.h", 23 },
|
||||
{ "/include/xtestintrin.h", 22 },
|
||||
{}
|
||||
};
|
||||
|
||||
const StringMatch* s_tracySkipSubframes = s_tracySkipSubframes_;
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
namespace tracy
|
||||
{
|
||||
|
||||
struct StringMatch
|
||||
{
|
||||
const char* str;
|
||||
size_t len;
|
||||
};
|
||||
|
||||
extern const char** s_tracyStackFrames;
|
||||
extern const StringMatch* s_tracySkipSubframes;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "TracyFileRead.hpp"
|
||||
#include "TracyFileWrite.hpp"
|
||||
#include "TracySort.hpp"
|
||||
#include "TracyStackFrames.hpp"
|
||||
#include "TracyTaskDispatch.hpp"
|
||||
#include "TracyVersion.hpp"
|
||||
#include "TracyWorker.hpp"
|
||||
@@ -5973,9 +5974,30 @@ void Worker::ProcessCallstackFrame( const QueueCallstackFrame& ev, bool querySym
|
||||
if( m_callstackFrameStaging )
|
||||
{
|
||||
const auto idx = m_callstackFrameStaging->size - m_pendingCallstackSubframes;
|
||||
const auto file = StringIdx( fitidx );
|
||||
|
||||
if( m_pendingCallstackSubframes > 1 && idx == 0 )
|
||||
{
|
||||
auto fstr = GetString( file );
|
||||
auto flen = strlen( fstr );
|
||||
if( flen >= 19 ) // minimum length in s_tracySkipSubframes
|
||||
{
|
||||
auto ptr = s_tracySkipSubframes;
|
||||
do
|
||||
{
|
||||
if( flen >= ptr->len && memcmp( fstr + flen - ptr->len, ptr->str, ptr->len ) == 0 )
|
||||
{
|
||||
m_pendingCallstackSubframes--;
|
||||
m_callstackFrameStaging->size--;
|
||||
return;
|
||||
}
|
||||
ptr++;
|
||||
}
|
||||
while( ptr->str );
|
||||
}
|
||||
}
|
||||
|
||||
const auto name = StringIdx( nitidx );
|
||||
const auto file = StringIdx( fitidx );
|
||||
m_callstackFrameStaging->data[idx].name = name;
|
||||
m_callstackFrameStaging->data[idx].file = file;
|
||||
m_callstackFrameStaging->data[idx].line = ev.line;
|
||||
|
||||
Reference in New Issue
Block a user