1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Load second trace on a separate thread.

This commit is contained in:
Bartosz Taudul 2018-07-28 18:47:33 +02:00
parent a46425f4e9
commit 6a3a9c0bc5
2 changed files with 17 additions and 7 deletions

View File

@ -283,6 +283,8 @@ View::~View()
{
m_worker.Shutdown();
if( m_compare.loadThread.joinable() ) m_compare.loadThread.join();
assert( s_instance != nullptr );
s_instance = nullptr;
}
@ -4469,7 +4471,7 @@ void View::DrawCompare()
if( !m_compare.second )
{
ImGui::TextWrapped( "Please load a second trace to compare results." );
if( ImGui::Button( "Open second trace" ) )
if( ImGui::Button( "Open second trace" ) && !m_compare.loadThread.joinable() )
{
nfdchar_t* fn;
auto res = NFD_OpenDialog( "tracy", nullptr, &fn );
@ -4477,16 +4479,21 @@ void View::DrawCompare()
{
try
{
auto f = std::unique_ptr<tracy::FileRead>( tracy::FileRead::Open( fn ) );
auto f = std::shared_ptr<tracy::FileRead>( tracy::FileRead::Open( fn ) );
if( f )
{
m_compare.second = std::make_unique<Worker>( *f, EventType::None );
m_compare.loadThread = std::thread( [this, f] {
try
{
m_compare.second = std::make_unique<Worker>( *f, EventType::None );
}
catch( const tracy::UnsupportedVersion& e )
{
m_compare.badVer = e.version;
}
} );
}
}
catch( const tracy::UnsupportedVersion& e )
{
m_compare.badVer = e.version;
}
catch( const tracy::NotTracyDump& e )
{
m_compare.badVer = -1;
@ -4498,6 +4505,8 @@ void View::DrawCompare()
return;
}
if( m_compare.loadThread.joinable() ) m_compare.loadThread.join();
if( !m_worker.AreSourceLocationZonesReady() || !m_compare.second->AreSourceLocationZonesReady() )
{
ImGui::TextWrapped( "Please wait, computing data..." );

View File

@ -279,6 +279,7 @@ private:
struct {
bool show = false;
std::unique_ptr<Worker> second;
std::thread loadThread;
int badVer = 0;
char pattern[1024] = {};
std::vector<int32_t> match[2];