diff options
author | Bartosz Taudul <wolf@nereid.pl> | 2022-06-16 14:48:15 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf@nereid.pl> | 2022-06-16 14:48:15 +0300 |
commit | aee83368473d57082eff3d27af72a81caf18f146 (patch) | |
tree | a42596ca01b97f62c74d7143524772d60b77b7e6 | |
parent | 145e3e213a2c6eb63ccb9ec60190a029e0026845 (diff) |
Move ring identifier check out of the loop.
-rw-r--r-- | client/TracySysTrace.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/client/TracySysTrace.cpp b/client/TracySysTrace.cpp index 88fa950b..91a6ad36 100644 --- a/client/TracySysTrace.cpp +++ b/client/TracySysTrace.cpp @@ -1150,18 +1150,18 @@ void SysTraceWorker( void* ptr ) const auto id = ring.GetId(); assert( id != EventContextSwitch ); - const auto end = head - tail; uint64_t pos = 0; - while( pos < end ) + if( id == EventCallstack ) { - perf_event_header hdr; - ring.Read( &hdr, pos, sizeof( perf_event_header ) ); - if( hdr.type == PERF_RECORD_SAMPLE ) + while( pos < end ) { - auto offset = pos + sizeof( perf_event_header ); - if( id == EventCallstack ) + perf_event_header hdr; + ring.Read( &hdr, pos, sizeof( perf_event_header ) ); + if( hdr.type == PERF_RECORD_SAMPLE ) { + auto offset = pos + sizeof( perf_event_header ); + // Layout: // u32 pid, tid // u64 time @@ -1194,8 +1194,19 @@ void SysTraceWorker( void* ptr ) TracyLfqCommit; } } - else + pos += hdr.size; + } + } + else + { + while( pos < end ) + { + perf_event_header hdr; + ring.Read( &hdr, pos, sizeof( perf_event_header ) ); + if( hdr.type == PERF_RECORD_SAMPLE ) { + auto offset = pos + sizeof( perf_event_header ); + // Layout: // u64 ip // u64 time @@ -1239,8 +1250,8 @@ void SysTraceWorker( void* ptr ) MemWrite( &item->hwSample.time, t0 ); TracyLfqCommit; } + pos += hdr.size; } - pos += hdr.size; } assert( pos == end ); ring.Advance( end ); |