1
0
mirror of https://github.com/wolfpld/tracy synced 2025-05-03 14:03:52 +00:00

Callstack frame queries.

This commit is contained in:
Bartosz Taudul 2018-06-20 00:25:26 +02:00
parent 4ba95145da
commit 203744cdd9
4 changed files with 21 additions and 0 deletions

View File

@ -23,6 +23,7 @@ enum ServerQuery : uint8_t
ServerQueryThreadString, ServerQueryThreadString,
ServerQuerySourceLocation, ServerQuerySourceLocation,
ServerQueryPlotName, ServerQueryPlotName,
ServerQueryCallstackFrame,
}; };
enum { WelcomeMessageProgramNameSize = 64 }; enum { WelcomeMessageProgramNameSize = 64 };

View File

@ -158,6 +158,16 @@ struct MemEvent
enum { MemEventSize = sizeof( MemEvent ) }; enum { MemEventSize = sizeof( MemEvent ) };
static_assert( std::is_standard_layout<MemEvent>::value, "MemEvent is not standard layout" ); static_assert( std::is_standard_layout<MemEvent>::value, "MemEvent is not standard layout" );
struct CallstackFrame
{
uint64_t file;
StringIdx name;
uint32_t line;
};
enum { CallstackFrameSize = sizeof( CallstackFrame ) };
#pragma pack() #pragma pack()

View File

@ -1333,6 +1333,15 @@ void Worker::AddCallstackPayload( uint64_t ptr, char* _data, size_t sz )
idx = m_data.callstackPayload.size(); idx = m_data.callstackPayload.size();
m_data.callstackMap.emplace( arr, idx ); m_data.callstackMap.emplace( arr, idx );
m_data.callstackPayload.push_back( arr ); m_data.callstackPayload.push_back( arr );
for( auto& frame : *arr )
{
auto fit = m_data.callstackFrameMap.find( frame );
if( fit == m_data.callstackFrameMap.end() )
{
ServerQuery( ServerQueryCallstackFrame, frame );
}
}
} }
else else
{ {

View File

@ -101,6 +101,7 @@ class Worker
flat_hash_map<VarArray<uint64_t>*, uint32_t, VarArrayHasherPOT<uint64_t>, VarArrayComparator<uint64_t>> callstackMap; flat_hash_map<VarArray<uint64_t>*, uint32_t, VarArrayHasherPOT<uint64_t>, VarArrayComparator<uint64_t>> callstackMap;
Vector<VarArray<uint64_t>*> callstackPayload; Vector<VarArray<uint64_t>*> callstackPayload;
flat_hash_map<uint64_t, CallstackFrame*> callstackFrameMap;
std::map<uint32_t, LockMap> lockMap; std::map<uint32_t, LockMap> lockMap;