1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Sample time for hardware samples.

This commit is contained in:
Bartosz Taudul 2021-06-04 12:50:55 +02:00
parent 1616411257
commit 2765be92fb
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3
2 changed files with 40 additions and 29 deletions

View File

@ -807,7 +807,7 @@ static void SetupSampling( int64_t& samplingPeriod )
pe.type = PERF_TYPE_HARDWARE; pe.type = PERF_TYPE_HARDWARE;
pe.size = sizeof( perf_event_attr ); pe.size = sizeof( perf_event_attr );
pe.sample_freq = 5000; pe.sample_freq = 5000;
pe.sample_type = PERF_SAMPLE_IP; pe.sample_type = PERF_SAMPLE_IP | PERF_SAMPLE_TIME;
pe.disabled = 1; pe.disabled = 1;
pe.exclude_kernel = 1; pe.exclude_kernel = 1;
pe.exclude_guest = 1; pe.exclude_guest = 1;
@ -1022,39 +1022,49 @@ static void SetupSampling( int64_t& samplingPeriod )
{ {
// Layout: // Layout:
// u64 ip // u64 ip
// u64 time
uint64_t ip; uint64_t ip, t0;
s_ring[i].Read( &ip, offset, sizeof( uint64_t ) ); s_ring[i].Read( &ip, offset, sizeof( uint64_t ) );
offset += sizeof( uint64_t );
s_ring[i].Read( &t0, offset, sizeof( uint64_t ) );
QueueType type; #if defined TRACY_HW_TIMER && ( defined __i386 || defined _M_IX86 || defined __x86_64__ || defined _M_X64 )
switch( id ) t0 = s_ring[i].ConvertTimeToTsc( t0 );
if( t0 != 0 )
#endif
{ {
case EventCpuCycles: QueueType type;
type = QueueType::HwSampleCpuCycle; switch( id )
break; {
case EventInstructionsRetired: case EventCpuCycles:
type = QueueType::HwSampleInstructionRetired; type = QueueType::HwSampleCpuCycle;
break; break;
case EventCacheReference: case EventInstructionsRetired:
type = QueueType::HwSampleCacheReference; type = QueueType::HwSampleInstructionRetired;
break; break;
case EventCacheMiss: case EventCacheReference:
type = QueueType::HwSampleCacheMiss; type = QueueType::HwSampleCacheReference;
break; break;
case EventBranchRetired: case EventCacheMiss:
type = QueueType::HwSampleBranchRetired; type = QueueType::HwSampleCacheMiss;
break; break;
case EventBranchMiss: case EventBranchRetired:
type = QueueType::HwSampleBranchMiss; type = QueueType::HwSampleBranchRetired;
break; break;
default: case EventBranchMiss:
assert( false ); type = QueueType::HwSampleBranchMiss;
break; break;
} default:
assert( false );
break;
}
TracyLfqPrepare( type ); TracyLfqPrepare( type );
MemWrite( &item->hwSample.ip, ip ); MemWrite( &item->hwSample.ip, ip );
TracyLfqCommit; MemWrite( &item->hwSample.time, t0 );
TracyLfqCommit;
}
} }
} }
s_ring[i].Advance( hdr.size ); s_ring[i].Advance( hdr.size );

View File

@ -482,6 +482,7 @@ struct QueueTidToPid
struct QueueHwSample struct QueueHwSample
{ {
uint64_t ip; uint64_t ip;
int64_t time;
}; };
enum class PlotFormatType : uint8_t enum class PlotFormatType : uint8_t