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.pld@gmail.com>2019-08-16 17:51:02 +0300
committerBartosz Taudul <wolf.pld@gmail.com>2019-08-16 17:51:18 +0300
commitcef7e4b8d01b519b4ba439fdfbdaf1f9f8474353 (patch)
tree05ce73e67532cfb7089c737972b0bb222f6cec01 /server/TracyWorker.cpp
parent8bc4258e295db520d3795d1b1b2427cdb977d6a0 (diff)
Save/load per-cpu context switches.
Diffstat (limited to 'server/TracyWorker.cpp')
-rw-r--r--server/TracyWorker.cpp62
1 files changed, 61 insertions, 1 deletions
diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp
index b8870817..c8472c53 100644
--- a/server/TracyWorker.cpp
+++ b/server/TracyWorker.cpp
@@ -307,10 +307,14 @@ Worker::Worker( FileRead& f, EventType::Type eventMask )
{
s_loadProgress.total.store( 9, std::memory_order_relaxed );
}
- else
+ else if( fileVer <= FileVersion( 0, 5, 2 ) )
{
s_loadProgress.total.store( 10, std::memory_order_relaxed );
}
+ else
+ {
+ s_loadProgress.total.store( 11, std::memory_order_relaxed );
+ }
s_loadProgress.subTotal.store( 0, std::memory_order_relaxed );
s_loadProgress.progress.store( LoadProgress::Initialization, std::memory_order_relaxed );
@@ -1429,6 +1433,44 @@ Worker::Worker( FileRead& f, EventType::Type eventMask )
}
}
+ if( fileVer >= FileVersion( 0, 5, 3 ) )
+ {
+ s_loadProgress.subTotal.store( 0, std::memory_order_relaxed );
+ s_loadProgress.progress.store( LoadProgress::ContextSwitchesPerCpu, std::memory_order_relaxed );
+ f.Read( sz );
+ s_loadProgress.subTotal.store( sz, std::memory_order_relaxed );
+ if( eventMask & EventType::ContextSwitches )
+ {
+ uint64_t cnt = 0;
+ for( int i=0; i<256; i++ )
+ {
+ int64_t refTime = 0;
+ f.Read( sz );
+ m_data.cpuData[i].cs.reserve_exact( sz, m_slab );
+ auto ptr = m_data.cpuData[i].cs.data();
+ for( uint64_t j=0; j<sz; j++ )
+ {
+ ptr->SetStart( ReadTimeOffset( f, refTime ) );
+ ptr->SetEnd( ReadTimeOffset( f, refTime ) );
+ uint64_t thread;
+ f.Read( thread );
+ ptr->SetThread( thread );
+ ptr++;
+ }
+ cnt += sz;
+ s_loadProgress.subProgress.store( cnt, std::memory_order_relaxed );
+ }
+ }
+ else
+ {
+ for( int i=0; i<256; i++ )
+ {
+ f.Read( sz );
+ f.Skip( sizeof( uint64_t ) * 3 * sz );
+ }
+ }
+ }
+
s_loadProgress.total.store( 0, std::memory_order_relaxed );
m_loadTime = std::chrono::duration_cast<std::chrono::nanoseconds>( std::chrono::high_resolution_clock::now() - loadStart ).count();
@@ -4826,6 +4868,24 @@ void Worker::Write( FileWrite& f )
f.Write( &state, sizeof( state ) );
}
}
+
+ sz = GetContextSwitchPerCpuCount();
+ f.Write( &sz, sizeof( sz ) );
+ for( int i=0; i<256; i++ )
+ {
+ sz = m_data.cpuData[i].cs.size();
+ f.Write( &sz, sizeof( sz ) );
+ int64_t refTime = 0;
+ for( auto& cx : m_data.cpuData[i].cs )
+ {
+ WriteTimeOffset( f, refTime, cx.Start() );
+ WriteTimeOffset( f, refTime, cx.End() );
+ uint64_t thread = cx.Thread();
+ // Don't care about external thread identifiers
+ if( m_data.threadMap.find( thread ) == m_data.threadMap.end() ) thread = 0;
+ f.Write( &thread, sizeof( thread ) );
+ }
+ }
}
void Worker::WriteTimeline( FileWrite& f, const Vector<ZoneEvent*>& vec, int64_t& refTime )