Do postponed work only when needed.

This commit is contained in:
Bartosz Taudul
2021-02-07 18:29:29 +01:00
parent 9bb1d13afa
commit c220177828
3 changed files with 38 additions and 34 deletions

View File

@@ -2797,38 +2797,6 @@ void Worker::Exec()
m_netWriteCv.notify_one();
}
HandlePostponedPlots();
#ifndef TRACY_NO_STATISTICS
if( m_data.newFramesWereReceived )
{
HandlePostponedSamples();
HandlePostponedGhostZones();
m_data.newFramesWereReceived = false;
}
#endif
if( m_data.newSymbolsIndex >= 0 )
{
#ifdef NO_PARALLEL_SORT
pdqsort_branchless( m_data.symbolLoc.begin() + m_data.newSymbolsIndex, m_data.symbolLoc.end(), [] ( const auto& l, const auto& r ) { return l.addr < r.addr; } );
#else
std::sort( std::execution::par_unseq, m_data.symbolLoc.begin() + m_data.newSymbolsIndex, m_data.symbolLoc.end(), [] ( const auto& l, const auto& r ) { return l.addr < r.addr; } );
#endif
const auto ms = std::lower_bound( m_data.symbolLoc.begin(), m_data.symbolLoc.begin() + m_data.newSymbolsIndex, m_data.symbolLoc[m_data.newSymbolsIndex], [] ( const auto& l, const auto& r ) { return l.addr < r.addr; } );
std::inplace_merge( ms, m_data.symbolLoc.begin() + m_data.newSymbolsIndex, m_data.symbolLoc.end(), [] ( const auto& l, const auto& r ) { return l.addr < r.addr; } );
m_data.newSymbolsIndex = -1;
}
if( m_data.newInlineSymbolsIndex >= 0 )
{
#ifdef NO_PARALLEL_SORT
pdqsort_branchless( m_data.symbolLocInline.begin() + m_data.newInlineSymbolsIndex, m_data.symbolLocInline.end() );
#else
std::sort( std::execution::par_unseq, m_data.symbolLocInline.begin() + m_data.newInlineSymbolsIndex, m_data.symbolLocInline.end() );
#endif
const auto ms = std::lower_bound( m_data.symbolLocInline.begin(), m_data.symbolLocInline.begin() + m_data.newInlineSymbolsIndex, m_data.symbolLocInline[m_data.newInlineSymbolsIndex] );
std::inplace_merge( ms, m_data.symbolLocInline.begin() + m_data.newInlineSymbolsIndex, m_data.symbolLocInline.end() );
m_data.newInlineSymbolsIndex = -1;
}
if( !m_serverQueryQueue.empty() && m_serverQuerySpaceLeft > 0 )
{
const auto toSend = std::min( m_serverQuerySpaceLeft, m_serverQueryQueue.size() );
@@ -3953,12 +3921,44 @@ void Worker::HandleFrameName( uint64_t name, const char* str, size_t sz )
} );
}
void Worker::HandlePostponedPlots()
void Worker::DoPostponedWork()
{
for( auto& plot : m_data.plots.Data() )
{
if( !plot->data.is_sorted() ) plot->data.sort();
}
#ifndef TRACY_NO_STATISTICS
if( m_data.newFramesWereReceived )
{
HandlePostponedSamples();
HandlePostponedGhostZones();
m_data.newFramesWereReceived = false;
}
#endif
if( m_data.newSymbolsIndex >= 0 )
{
#ifdef NO_PARALLEL_SORT
pdqsort_branchless( m_data.symbolLoc.begin() + m_data.newSymbolsIndex, m_data.symbolLoc.end(), [] ( const auto& l, const auto& r ) { return l.addr < r.addr; } );
#else
std::sort( std::execution::par_unseq, m_data.symbolLoc.begin() + m_data.newSymbolsIndex, m_data.symbolLoc.end(), [] ( const auto& l, const auto& r ) { return l.addr < r.addr; } );
#endif
const auto ms = std::lower_bound( m_data.symbolLoc.begin(), m_data.symbolLoc.begin() + m_data.newSymbolsIndex, m_data.symbolLoc[m_data.newSymbolsIndex], [] ( const auto& l, const auto& r ) { return l.addr < r.addr; } );
std::inplace_merge( ms, m_data.symbolLoc.begin() + m_data.newSymbolsIndex, m_data.symbolLoc.end(), [] ( const auto& l, const auto& r ) { return l.addr < r.addr; } );
m_data.newSymbolsIndex = -1;
}
if( m_data.newInlineSymbolsIndex >= 0 )
{
#ifdef NO_PARALLEL_SORT
pdqsort_branchless( m_data.symbolLocInline.begin() + m_data.newInlineSymbolsIndex, m_data.symbolLocInline.end() );
#else
std::sort( std::execution::par_unseq, m_data.symbolLocInline.begin() + m_data.newInlineSymbolsIndex, m_data.symbolLocInline.end() );
#endif
const auto ms = std::lower_bound( m_data.symbolLocInline.begin(), m_data.symbolLocInline.begin() + m_data.newInlineSymbolsIndex, m_data.symbolLocInline[m_data.newInlineSymbolsIndex] );
std::inplace_merge( ms, m_data.symbolLocInline.begin() + m_data.newInlineSymbolsIndex, m_data.symbolLocInline.end() );
m_data.newInlineSymbolsIndex = -1;
}
}
#ifndef TRACY_NO_STATISTICS
@@ -6817,6 +6817,8 @@ void Worker::Disconnect()
void Worker::Write( FileWrite& f )
{
DoPostponedWork();
f.Write( FileHeader, sizeof( FileHeader ) );
f.Write( &m_delay, sizeof( m_delay ) );