1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-30 20:53:52 +00:00

No need for module name intermediate buffer.

This commit is contained in:
Bartosz Taudul 2020-02-27 13:24:36 +01:00
parent 474383b656
commit 5f6b3d2cd5

View File

@ -78,7 +78,6 @@ struct ModuleCache
uint64_t start; uint64_t start;
uint64_t end; uint64_t end;
char* name; char* name;
uint32_t nameLen;
}; };
static FastVector<ModuleCache>* s_modCache; static FastVector<ModuleCache>* s_modCache;
@ -125,7 +124,6 @@ void InitCallstack()
memcpy( cache->name+1, ptr, namelen ); memcpy( cache->name+1, ptr, namelen );
cache->name[namelen+1] = ']'; cache->name[namelen+1] = ']';
cache->name[namelen+2] = '\0'; cache->name[namelen+2] = '\0';
cache->nameLen = namelen+2;
} }
} }
} }
@ -163,23 +161,16 @@ const char* DecodeCallstackPtrFast( uint64_t ptr )
return ret; return ret;
} }
static void GetModuleName( uint64_t addr, char* buf, ULONG& len ) static const char* GetModuleName( uint64_t addr )
{ {
if( ( addr & 0x8000000000000000 ) != 0 ) if( ( addr & 0x8000000000000000 ) != 0 ) return "[kernel]";
{
memcpy( buf, "[kernel]", 9 );
len = 8;
return;
}
#ifndef __CYGWIN__ #ifndef __CYGWIN__
for( auto& v : *s_modCache ) for( auto& v : *s_modCache )
{ {
if( addr >= v.start && addr < v.end ) if( addr >= v.start && addr < v.end )
{ {
memcpy( buf, v.name, v.nameLen+1 ); return v.name;
len = v.nameLen;
return;
} }
} }
@ -206,20 +197,15 @@ static void GetModuleName( uint64_t addr, char* buf, ULONG& len )
while( ptr > name && *ptr != '\\' && *ptr != '/' ) ptr--; while( ptr > name && *ptr != '\\' && *ptr != '/' ) ptr--;
if( ptr > name ) ptr++; if( ptr > name ) ptr++;
const auto namelen = name + res - ptr; const auto namelen = name + res - ptr;
buf[0] = '[';
memcpy( buf+1, ptr, namelen );
buf[namelen+1] = ']';
buf[namelen+2] = '\0';
len = namelen+2;
auto cache = s_modCache->push_next(); auto cache = s_modCache->push_next();
cache->start = base; cache->start = base;
cache->end = base + info.SizeOfImage; cache->end = base + info.SizeOfImage;
cache->name = (char*)tracy_malloc( namelen+3 ); cache->name = (char*)tracy_malloc( namelen+3 );
memcpy( cache->name, buf, namelen+3 ); cache->name[0] = '[';
cache->nameLen = namelen+2; memcpy( cache->name+1, ptr, namelen );
cache->name[namelen+1] = ']';
return; cache->name[namelen+2] = '\0';
return cache->name;
} }
} }
} }
@ -227,8 +213,7 @@ static void GetModuleName( uint64_t addr, char* buf, ULONG& len )
} }
#endif #endif
memcpy( buf, "[unknown]", 10 ); return "[unknown]";
len = 9;
} }
SymbolData DecodeSymbolAddress( uint64_t ptr ) SymbolData DecodeSymbolAddress( uint64_t ptr )
@ -279,9 +264,7 @@ CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
si->SizeOfStruct = sizeof( SYMBOL_INFO ); si->SizeOfStruct = sizeof( SYMBOL_INFO );
si->MaxNameLen = MaxNameSize; si->MaxNameLen = MaxNameSize;
char moduleName[1024]; const auto moduleName = GetModuleName( ptr );
ULONG moduleNameLen;
GetModuleName( ptr, moduleName, moduleNameLen );
const auto symValid = SymFromAddr( proc, ptr, nullptr, si ) != 0; const auto symValid = SymFromAddr( proc, ptr, nullptr, si ) != 0;
IMAGEHLP_LINE64 line; IMAGEHLP_LINE64 line;
@ -301,7 +284,7 @@ CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
cb_data[write].line = line.LineNumber; cb_data[write].line = line.LineNumber;
} }
cb_data[write].name = symValid ? CopyString( si->Name, si->NameLen ) : CopyString( moduleName, moduleNameLen ); cb_data[write].name = symValid ? CopyString( si->Name, si->NameLen ) : CopyString( moduleName );
cb_data[write].file = CopyString( filename ); cb_data[write].file = CopyString( filename );
cb_data[write].symAddr = symValid ? si->Address : 0; cb_data[write].symAddr = symValid ? si->Address : 0;
} }
@ -325,7 +308,7 @@ CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
cb.line = line.LineNumber; cb.line = line.LineNumber;
} }
cb.name = symInlineValid ? CopyString( si->Name, si->NameLen ) : CopyString( moduleName, moduleNameLen ); cb.name = symInlineValid ? CopyString( si->Name, si->NameLen ) : CopyString( moduleName );
cb.file = CopyString( filename ); cb.file = CopyString( filename );
cb.symAddr = symInlineValid ? si->Address : 0; cb.symAddr = symInlineValid ? si->Address : 0;
@ -334,7 +317,7 @@ CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
} }
#endif #endif
return { cb_data, uint8_t( cb_num ), CopyString( moduleName, moduleNameLen ) }; return { cb_data, uint8_t( cb_num ), CopyString( moduleName ) };
} }
#elif TRACY_HAS_CALLSTACK == 2 || TRACY_HAS_CALLSTACK == 3 || TRACY_HAS_CALLSTACK == 4 || TRACY_HAS_CALLSTACK == 6 #elif TRACY_HAS_CALLSTACK == 2 || TRACY_HAS_CALLSTACK == 3 || TRACY_HAS_CALLSTACK == 4 || TRACY_HAS_CALLSTACK == 6