From c7859da997dbe4790a5b5585f49beca20257b8d4 Mon Sep 17 00:00:00 2001 From: DrChat Date: Sun, 17 Dec 2017 13:44:39 -0600 Subject: [PATCH] [GPU] Fix TraceDump progress not showing --- src/xenia/gpu/trace_dump.cc | 44 +++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/src/xenia/gpu/trace_dump.cc b/src/xenia/gpu/trace_dump.cc index 237d7a44e..4a4beaf85 100644 --- a/src/xenia/gpu/trace_dump.cc +++ b/src/xenia/gpu/trace_dump.cc @@ -164,22 +164,30 @@ bool TraceDump::Load(std::wstring trace_file_path) { } int TraceDump::Run() { - loop_->Post([&]() { + loop_->PostSynchronous([&]() { player_->SeekFrame(0); player_->SeekCommand( static_cast(player_->current_frame()->commands.size() - 1)); }); + + auto file_name = xe::find_name_from_path(trace_file_path_); + std::wstring title = std::wstring(L"Xenia GPU Trace Dump: ") + file_name; + while (player_->is_playing_trace()) { + // Update titlebar status. + if (player_->is_playing_trace()) { + int percent = + static_cast(player_->playback_percent() / 10000.0 * 100.0); + window_->set_title(title + xe::format_string(L" (%d%%)", percent)); + } + + xe::threading::Sleep(std::chrono::milliseconds(1)); + } + + window_->set_title(title); player_->WaitOnPlayback(); - loop_->PostSynchronous([&]() { - // Breathe. - }); - loop_->PostSynchronous([&]() { - // Breathe. - }); - + xe::threading::Fence capture_fence; int result = 0; - auto capture_event = xe::threading::Event::CreateManualResetEvent(false); loop_->PostDelayed( [&]() { // Capture. @@ -187,7 +195,7 @@ int TraceDump::Run() { if (!raw_image) { // Failed to capture anything. result = -1; - capture_event->Set(); + capture_fence.Signal(); return; } @@ -199,23 +207,11 @@ int TraceDump::Run() { static_cast(raw_image->stride)); result = 0; - capture_event->Set(); + capture_fence.Signal(); }, 50); - while (xe::threading::Wait(capture_event.get(), false, - std::chrono::milliseconds(1)) == - xe::threading::WaitResult::kTimeout) { - // Update titlebar status. - auto file_name = xe::find_name_from_path(trace_file_path_); - std::wstring title = std::wstring(L"Xenia GPU Trace Dump: ") + file_name; - if (player_->is_playing_trace()) { - int percent = - static_cast(player_->playback_percent() / 10000.0 * 100.0); - title += xe::format_string(L" (%d%%)", percent); - } - window_->set_title(title); - } + capture_fence.Wait(); // Profiler must exit before the window is closed. Profiler::Shutdown();