mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-23 06:44:35 +00:00
Merge pull request #257 from xxxbxxx/filter-by-srcloc
Filter samples by zones source locations
This commit is contained in:
commit
b6eee83463
@ -268,6 +268,7 @@ enum { SampleDataSize = sizeof( SampleData ) };
|
|||||||
struct SampleDataRange
|
struct SampleDataRange
|
||||||
{
|
{
|
||||||
Int48 time;
|
Int48 time;
|
||||||
|
uint16_t thread;
|
||||||
CallstackFrameId ip;
|
CallstackFrameId ip;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -153,6 +153,13 @@ private:
|
|||||||
bool highlight;
|
bool highlight;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SymList
|
||||||
|
{
|
||||||
|
uint64_t symAddr;
|
||||||
|
uint32_t incl, excl;
|
||||||
|
uint32_t count;
|
||||||
|
};
|
||||||
|
|
||||||
void InitMemory();
|
void InitMemory();
|
||||||
void InitTextEditor( ImFont* font );
|
void InitTextEditor( ImFont* font );
|
||||||
|
|
||||||
@ -196,6 +203,7 @@ private:
|
|||||||
void DrawFindZone();
|
void DrawFindZone();
|
||||||
void AccumulationModeComboBox();
|
void AccumulationModeComboBox();
|
||||||
void DrawStatistics();
|
void DrawStatistics();
|
||||||
|
void DrawSamplesStatistics(Vector<SymList>& data, int64_t timeRange, AccumulationMode accumulationMode);
|
||||||
void DrawMemory();
|
void DrawMemory();
|
||||||
void DrawAllocList();
|
void DrawAllocList();
|
||||||
void DrawCompare();
|
void DrawCompare();
|
||||||
@ -508,6 +516,7 @@ private:
|
|||||||
{
|
{
|
||||||
uint16_t id;
|
uint16_t id;
|
||||||
Vector<short_ptr<ZoneEvent>> zones;
|
Vector<short_ptr<ZoneEvent>> zones;
|
||||||
|
Vector<uint16_t> zonesTids;
|
||||||
int64_t time = 0;
|
int64_t time = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -554,6 +563,12 @@ private:
|
|||||||
ptrdiff_t distEnd;
|
ptrdiff_t distEnd;
|
||||||
} binCache;
|
} binCache;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
Vector<SymList> counts;
|
||||||
|
bool scheduleUpdate = false;
|
||||||
|
bool enabled = false;
|
||||||
|
} samples;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
ResetMatch();
|
ResetMatch();
|
||||||
@ -561,6 +576,7 @@ private:
|
|||||||
selMatch = 0;
|
selMatch = 0;
|
||||||
selGroup = Unselected;
|
selGroup = Unselected;
|
||||||
highlight.active = false;
|
highlight.active = false;
|
||||||
|
samples.counts.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResetMatch()
|
void ResetMatch()
|
||||||
@ -595,6 +611,7 @@ private:
|
|||||||
selTotal = 0;
|
selTotal = 0;
|
||||||
selTime = 0;
|
selTime = 0;
|
||||||
binCache.numBins = -1;
|
binCache.numBins = -1;
|
||||||
|
samples.scheduleUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowZone( int16_t srcloc, const char* name )
|
void ShowZone( int16_t srcloc, const char* name )
|
||||||
|
@ -1931,6 +1931,7 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks )
|
|||||||
jobs.emplace_back( std::thread( [this] {
|
jobs.emplace_back( std::thread( [this] {
|
||||||
for( auto& t : m_data.threads )
|
for( auto& t : m_data.threads )
|
||||||
{
|
{
|
||||||
|
uint16_t tid = CompressThread( t->id );
|
||||||
for( auto& v : t->samples )
|
for( auto& v : t->samples )
|
||||||
{
|
{
|
||||||
const auto& time = v.time;
|
const auto& time = v.time;
|
||||||
@ -1944,11 +1945,11 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks )
|
|||||||
auto it = m_data.symbolSamples.find( symAddr );
|
auto it = m_data.symbolSamples.find( symAddr );
|
||||||
if( it == m_data.symbolSamples.end() )
|
if( it == m_data.symbolSamples.end() )
|
||||||
{
|
{
|
||||||
m_data.symbolSamples.emplace( symAddr, Vector<SampleDataRange>( SampleDataRange { time, ip } ) );
|
m_data.symbolSamples.emplace( symAddr, Vector<SampleDataRange>( SampleDataRange { time, tid, ip } ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
it->second.push_back_non_empty( SampleDataRange { time, ip } );
|
it->second.push_back_non_empty( SampleDataRange { time, tid, ip } );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for( uint16_t i=1; i<callstack.size(); i++ )
|
for( uint16_t i=1; i<callstack.size(); i++ )
|
||||||
@ -5970,6 +5971,8 @@ void Worker::ProcessCallstackSampleImpl( const SampleData& sd, ThreadData& td, i
|
|||||||
|
|
||||||
#ifndef TRACY_NO_STATISTICS
|
#ifndef TRACY_NO_STATISTICS
|
||||||
{
|
{
|
||||||
|
uint16_t tid = CompressThread( td.id );
|
||||||
|
|
||||||
auto frame = GetCallstackFrame( ip );
|
auto frame = GetCallstackFrame( ip );
|
||||||
if( frame )
|
if( frame )
|
||||||
{
|
{
|
||||||
@ -5994,18 +5997,18 @@ void Worker::ProcessCallstackSampleImpl( const SampleData& sd, ThreadData& td, i
|
|||||||
auto sit = m_data.symbolSamples.find( symAddr );
|
auto sit = m_data.symbolSamples.find( symAddr );
|
||||||
if( sit == m_data.symbolSamples.end() )
|
if( sit == m_data.symbolSamples.end() )
|
||||||
{
|
{
|
||||||
m_data.symbolSamples.emplace( symAddr, Vector<SampleDataRange>( SampleDataRange { sd.time, ip } ) );
|
m_data.symbolSamples.emplace( symAddr, Vector<SampleDataRange>( SampleDataRange { sd.time, tid, ip } ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( sit->second.back().time.Val() <= sd.time.Val() )
|
if( sit->second.back().time.Val() <= sd.time.Val() )
|
||||||
{
|
{
|
||||||
sit->second.push_back_non_empty( SampleDataRange { sd.time, ip } );
|
sit->second.push_back_non_empty( SampleDataRange { sd.time, tid, ip } );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto iit = std::upper_bound( sit->second.begin(), sit->second.end(), sd.time.Val(), [] ( const auto& lhs, const auto& rhs ) { return lhs < rhs.time.Val(); } );
|
auto iit = std::upper_bound( sit->second.begin(), sit->second.end(), sd.time.Val(), [] ( const auto& lhs, const auto& rhs ) { return lhs < rhs.time.Val(); } );
|
||||||
sit->second.insert( iit, SampleDataRange { sd.time, ip } );
|
sit->second.insert( iit, SampleDataRange { sd.time, tid, ip } );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6023,11 +6026,11 @@ void Worker::ProcessCallstackSampleImpl( const SampleData& sd, ThreadData& td, i
|
|||||||
auto sit = m_data.pendingSymbolSamples.find( ip );
|
auto sit = m_data.pendingSymbolSamples.find( ip );
|
||||||
if( sit == m_data.pendingSymbolSamples.end() )
|
if( sit == m_data.pendingSymbolSamples.end() )
|
||||||
{
|
{
|
||||||
m_data.pendingSymbolSamples.emplace( ip, Vector<SampleDataRange>( SampleDataRange { sd.time, ip } ) );
|
m_data.pendingSymbolSamples.emplace( ip, Vector<SampleDataRange>( SampleDataRange { sd.time, tid, ip } ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sit->second.push_back_non_empty( SampleDataRange { sd.time, ip } );
|
sit->second.push_back_non_empty( SampleDataRange { sd.time, tid, ip } );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user