mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-22 22:44:34 +00:00
Calculate cpu thread data statistics.
This commit is contained in:
parent
1498417a8d
commit
103645c2fa
@ -442,6 +442,13 @@ struct CpuData
|
||||
Vector<ContextSwitchCpu> cs;
|
||||
};
|
||||
|
||||
struct CpuThreadData
|
||||
{
|
||||
int64_t runningTime = 0;
|
||||
uint32_t runningRegions = 0;
|
||||
uint32_t migrations = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -4138,7 +4138,16 @@ void Worker::ProcessContextSwitch( const QueueContextSwitch& ev )
|
||||
item.SetReason( ev.reason );
|
||||
item.SetState( ev.state );
|
||||
|
||||
it->second->runningTime += time - item.Start();
|
||||
const auto dt = time - item.Start();
|
||||
it->second->runningTime += dt;
|
||||
|
||||
auto tdit = m_data.cpuThreadData.find( ev.oldThread );
|
||||
if( tdit == m_data.cpuThreadData.end() )
|
||||
{
|
||||
tdit = m_data.cpuThreadData.emplace( ev.oldThread, CpuThreadData {} ).first;
|
||||
}
|
||||
tdit->second.runningRegions++;
|
||||
tdit->second.runningTime += dt;
|
||||
}
|
||||
if( !cs.empty() )
|
||||
{
|
||||
@ -4157,13 +4166,22 @@ void Worker::ProcessContextSwitch( const QueueContextSwitch& ev )
|
||||
}
|
||||
auto& data = it->second->v;
|
||||
ContextSwitchData* item = nullptr;
|
||||
bool migration = false;
|
||||
if( !data.empty() && data.back().Reason() == ContextSwitchData::Wakeup )
|
||||
{
|
||||
item = &data.back();
|
||||
if( data.size() > 1 )
|
||||
{
|
||||
migration = data[data.size()-2].Cpu() != ev.cpu;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
assert( data.empty() || (uint64_t)data.back().End() <= time );
|
||||
if( !data.empty() )
|
||||
{
|
||||
migration = data.back().Cpu() != ev.cpu;
|
||||
}
|
||||
item = &data.push_next();
|
||||
item->wakeup = time;
|
||||
}
|
||||
@ -4183,6 +4201,16 @@ void Worker::ProcessContextSwitch( const QueueContextSwitch& ev )
|
||||
{
|
||||
CheckExternalName( ev.newThread );
|
||||
}
|
||||
|
||||
if( migration )
|
||||
{
|
||||
auto tdit = m_data.cpuThreadData.find( ev.newThread );
|
||||
if( tdit == m_data.cpuThreadData.end() )
|
||||
{
|
||||
tdit = m_data.cpuThreadData.emplace( ev.newThread, CpuThreadData {} ).first;
|
||||
}
|
||||
tdit->second.migrations++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -213,6 +213,7 @@ private:
|
||||
|
||||
CpuData cpuData[256];
|
||||
flat_hash_map<uint64_t, uint64_t, nohash<uint64_t>> tidToPid;
|
||||
flat_hash_map<uint64_t, CpuThreadData, nohash<uint64_t>> cpuThreadData;
|
||||
};
|
||||
|
||||
struct MbpsBlock
|
||||
|
Loading…
Reference in New Issue
Block a user