1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-29 04:23:51 +00:00

Workaround failing assert.

The aggregate inlines code branch can fail when the top inlines option
is enabled, on an assert. This was present in the code before, it's just
that enabling top inlines is equivalent to expanding all the collapsed
symbols, which is not something practical to do.

Workaround by adding a condition instead of the assert. Finding a repro
case would be better to figure out what's exactly happening there, but
we are where we are.
This commit is contained in:
Bartosz Taudul 2024-09-24 19:39:53 +02:00
parent 2d6bcff3a6
commit aca0f3cad7
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3

View File

@ -304,40 +304,42 @@ void View::DrawSamplesStatistics( Vector<SymList>& data, int64_t timeRange, Accu
auto symAddr = *inSym;
auto sit = inlineMap.find( symAddr );
auto sym = symMap.find( symAddr );
assert( sym != symMap.end() );
auto mit = mergeMap.find( sym->second.name.Idx() );
if( mit == mergeMap.end() )
if( sym != symMap.end() )
{
mergeMap.emplace( sym->second.name.Idx(), symAddr );
}
else
{
symAddr = mit->second;
}
if( sit != inlineMap.end() )
{
auto oit = outMap.find( symAddr );
if( oit == outMap.end() )
auto mit = mergeMap.find( sym->second.name.Idx() );
if( mit == mergeMap.end() )
{
outMap.emplace( symAddr, SymList { symAddr, sit->second.incl, sit->second.excl, 1 } );
mergeMap.emplace( sym->second.name.Idx(), symAddr );
}
else
{
oit->second.incl += sit->second.incl;
oit->second.excl += sit->second.excl;
oit->second.count++;
symAddr = mit->second;
}
}
else
{
auto oit = outMap.find( symAddr );
if( oit == outMap.end() )
if( sit != inlineMap.end() )
{
outMap.emplace( symAddr, SymList { symAddr, 0, 0, 1 } );
auto oit = outMap.find( symAddr );
if( oit == outMap.end() )
{
outMap.emplace( symAddr, SymList { symAddr, sit->second.incl, sit->second.excl, 1 } );
}
else
{
oit->second.incl += sit->second.incl;
oit->second.excl += sit->second.excl;
oit->second.count++;
}
}
else
{
oit->second.count++;
auto oit = outMap.find( symAddr );
if( oit == outMap.end() )
{
outMap.emplace( symAddr, SymList { symAddr, 0, 0, 1 } );
}
else
{
oit->second.count++;
}
}
}
inSym++;