Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Taudul <wolf@nereid.pl>2022-06-16 14:48:15 +0300
committerBartosz Taudul <wolf@nereid.pl>2022-06-16 14:48:15 +0300
commitaee83368473d57082eff3d27af72a81caf18f146 (patch)
treea42596ca01b97f62c74d7143524772d60b77b7e6
parent145e3e213a2c6eb63ccb9ec60190a029e0026845 (diff)
Move ring identifier check out of the loop.
-rw-r--r--client/TracySysTrace.cpp29
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 );