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:
-rw-r--r--manual/tracy.tex2
-rw-r--r--server/TracyView.cpp119
-rw-r--r--server/TracyView.hpp8
3 files changed, 93 insertions, 36 deletions
diff --git a/manual/tracy.tex b/manual/tracy.tex
index 6735f3fc..b02fc919 100644
--- a/manual/tracy.tex
+++ b/manual/tracy.tex
@@ -1121,7 +1121,7 @@ enum SubSystems
...
// Preferably a define in the build system
-#define SUBSYSTEMS Sys_Physics | Sys_NasalDemons
+#define SUBSYSTEMS (Sys_Physics | Sys_NasalDemons)
...
diff --git a/server/TracyView.cpp b/server/TracyView.cpp
index 754b9265..3388963d 100644
--- a/server/TracyView.cpp
+++ b/server/TracyView.cpp
@@ -11189,6 +11189,87 @@ void View::DrawZoneList( int id, const Vector<short_ptr<ZoneEvent>>& zones )
ImGui::TreePop();
}
+bool View::FindMatchingZone( int prev0, int prev1, int flags )
+{
+ int idx = 0;
+ bool found = false;
+ auto& srcloc0 = m_worker.GetSourceLocation( m_compare.match[0][m_compare.selMatch[0]] );
+ auto& srcloc1 = m_compare.second->GetSourceLocation( m_compare.match[1][m_compare.selMatch[1]] );
+ auto string0 = m_worker.GetString( srcloc0.name.active ? srcloc0.name : srcloc0.function );
+ auto string1 = m_compare.second->GetString( srcloc1.name.active ? srcloc1.name : srcloc1.function );
+ auto file0 = m_worker.GetString( srcloc0.file );
+ auto file1 = m_compare.second->GetString( srcloc1.file );
+ bool wrongFile = false;
+ bool wrongLine = false;
+ if( flags & FindMatchingZoneFlagSourceFile )
+ {
+ wrongFile = strcmp( file0, file1 ) != 0;
+ }
+ if( flags & FindMatchingZoneFlagLineNum )
+ {
+ wrongLine = srcloc0.line != srcloc1.line;
+ }
+
+ if( strcmp( string0, string1 ) != 0 || wrongFile || wrongLine )
+ {
+ if( prev0 != m_compare.selMatch[0] )
+ {
+ for( auto& v : m_compare.match[1] )
+ {
+ auto& srcloc = m_compare.second->GetSourceLocation( v );
+ auto string = m_compare.second->GetString( srcloc.name.active ? srcloc.name : srcloc.function );
+ auto file = m_compare.second->GetString( srcloc.file );
+ bool sameFile = true;
+ bool sameLine = true;
+ if( flags & FindMatchingZoneFlagSourceFile )
+ {
+ sameFile = strcmp( file0, file ) == 0;
+ }
+ if( flags & FindMatchingZoneFlagLineNum )
+ {
+ sameLine = srcloc0.line == srcloc.line;
+ }
+ if( strcmp( string0, string ) == 0 && sameFile && sameLine )
+ {
+ m_compare.selMatch[1] = idx;
+ found = true;
+ break;
+ }
+ idx++;
+ }
+ }
+ else
+ {
+ assert( prev1 != m_compare.selMatch[1] );
+ for( auto& v : m_compare.match[0] )
+ {
+ auto& srcloc = m_worker.GetSourceLocation( v );
+ auto string = m_worker.GetString( srcloc.name.active ? srcloc.name : srcloc.function );
+ auto file = m_worker.GetString( srcloc.file );
+ bool sameFile = true;
+ bool sameLine = true;
+ if( flags & FindMatchingZoneFlagSourceFile )
+ {
+ sameFile = strcmp( file1, file ) == 0;
+ }
+ if( flags & FindMatchingZoneFlagLineNum )
+ {
+ sameLine = srcloc1.line == srcloc.line;
+ }
+ if( strcmp( string1, string ) == 0 && sameFile && sameLine )
+ {
+ m_compare.selMatch[0] = idx;
+ found = true;
+ break;
+ }
+ idx++;
+ }
+
+ }
+ }
+ return found;
+}
+
void View::DrawCompare()
{
ImGui::SetNextWindowSize( ImVec2( 590, 800 ), ImGuiCond_FirstUseEver );
@@ -11403,43 +11484,11 @@ void View::DrawCompare()
if( m_compare.link )
{
- auto& srcloc0 = m_worker.GetSourceLocation( m_compare.match[0][m_compare.selMatch[0]] );
- auto& srcloc1 = m_compare.second->GetSourceLocation( m_compare.match[1][m_compare.selMatch[1]] );
- auto string0 = m_worker.GetString( srcloc0.name.active ? srcloc0.name : srcloc0.function );
- auto string1 = m_compare.second->GetString( srcloc1.name.active ? srcloc1.name : srcloc1.function );
-
- if( strcmp( string0, string1 ) != 0 )
+ if( !FindMatchingZone( prev0, prev1, FindMatchingZoneFlagSourceFile | FindMatchingZoneFlagLineNum ) )
{
- idx = 0;
- if( prev0 != m_compare.selMatch[0] )
- {
- for( auto& v : m_compare.match[1] )
- {
- auto& srcloc = m_compare.second->GetSourceLocation( v );
- auto string = m_compare.second->GetString( srcloc.name.active ? srcloc.name : srcloc.function );
- if( strcmp( string0, string ) == 0 )
- {
- m_compare.selMatch[1] = idx;
- break;
- }
- idx++;
- }
- }
- else
+ if( !FindMatchingZone( prev0, prev1, FindMatchingZoneFlagSourceFile ) )
{
- assert( prev1 != m_compare.selMatch[1] );
- for( auto& v : m_compare.match[0] )
- {
- auto& srcloc = m_worker.GetSourceLocation( v );
- auto string = m_worker.GetString( srcloc.name.active ? srcloc.name : srcloc.function );
- if( strcmp( string1, string ) == 0 )
- {
- m_compare.selMatch[0] = idx;
- break;
- }
- idx++;
- }
-
+ FindMatchingZone( prev0, prev1, FindMatchingZoneFlagDefault );
}
}
}
diff --git a/server/TracyView.hpp b/server/TracyView.hpp
index 7e7ddfa3..53d10990 100644
--- a/server/TracyView.hpp
+++ b/server/TracyView.hpp
@@ -251,6 +251,7 @@ private:
uint64_t GetZoneThread( const ZoneEvent& zone ) const;
uint64_t GetZoneThread( const GpuEvent& zone ) const;
const GpuCtxData* GetZoneCtx( const GpuEvent& zone ) const;
+ bool FindMatchingZone( int prev0, int prev1, int flags );
const ZoneEvent* FindZoneAtTime( uint64_t thread, int64_t time ) const;
uint64_t GetFrameNumber( const FrameData& fd, int i, uint64_t offset ) const;
const char* GetFrameText( const FrameData& fd, int i, uint64_t ftime, uint64_t offset ) const;
@@ -447,6 +448,13 @@ private:
NeedsJoin
};
+ enum
+ {
+ FindMatchingZoneFlagDefault = 0,
+ FindMatchingZoneFlagSourceFile = (1 << 0),
+ FindMatchingZoneFlagLineNum = (1 << 1),
+ };
+
std::atomic<SaveThreadState> m_saveThreadState { SaveThreadState::Inert };
std::thread m_saveThread;
std::atomic<size_t> m_srcFileBytes { 0 };