diff options
-rw-r--r-- | src/citra_qt/bootmanager.cpp | 6 | ||||
-rw-r--r-- | src/citra_qt/bootmanager.h | 8 | ||||
-rw-r--r-- | src/citra_qt/debugger/disassembler.cpp | 4 | ||||
-rw-r--r-- | src/citra_qt/debugger/disassembler.h | 4 | ||||
-rw-r--r-- | src/citra_qt/debugger/registers.cpp | 4 | ||||
-rw-r--r-- | src/citra_qt/debugger/registers.h | 4 | ||||
-rw-r--r-- | src/citra_qt/main.cpp | 31 |
7 files changed, 26 insertions, 35 deletions
diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp index 4be410fe0..66a9e6fba 100644 --- a/src/citra_qt/bootmanager.cpp +++ b/src/citra_qt/bootmanager.cpp @@ -48,7 +48,7 @@ void EmuThread::run() { Core::RunLoop(); was_active = running || exec_step; - if (!was_active) + if (!was_active && !stop_run) emit DebugModeEntered(); } else if (exec_step) { if (!was_active) @@ -273,10 +273,10 @@ void GRenderWindow::OnMinimalClientAreaChangeRequest(const std::pair<unsigned,un setMinimumSize(minimal_size.first, minimal_size.second); } -void GRenderWindow::OnEmulationStarted(EmuThread* emu_thread) { +void GRenderWindow::OnEmulationStarting(EmuThread* emu_thread) { this->emu_thread = emu_thread; } -void GRenderWindow::OnEmulationStopped() { +void GRenderWindow::OnEmulationStopping() { emu_thread = nullptr; } diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h index e57522187..715faf2d7 100644 --- a/src/citra_qt/bootmanager.h +++ b/src/citra_qt/bootmanager.h @@ -51,9 +51,9 @@ public: bool IsRunning() { return running; } /** - * Requests for the emulation thread to stop running and shutdown emulation + * Requests for the emulation thread to stop running */ - void RequestShutdown() { + void RequestStop() { stop_run = true; running = false; }; @@ -115,8 +115,8 @@ public: public slots: void moveContext(); // overridden - void OnEmulationStarted(EmuThread* emu_thread); - void OnEmulationStopped(); + void OnEmulationStarting(EmuThread* emu_thread); + void OnEmulationStopping(); private: void OnMinimalClientAreaChangeRequest(const std::pair<unsigned,unsigned>& minimal_size) override; diff --git a/src/citra_qt/debugger/disassembler.cpp b/src/citra_qt/debugger/disassembler.cpp index 6400bb856..08c6b49bd 100644 --- a/src/citra_qt/debugger/disassembler.cpp +++ b/src/citra_qt/debugger/disassembler.cpp @@ -241,7 +241,7 @@ int DisassemblerWidget::SelectedRow() { return disasm_ui.treeView->selectionModel()->currentIndex().row(); } -void DisassemblerWidget::OnEmulationStarted(EmuThread* emu_thread) { +void DisassemblerWidget::OnEmulationStarting(EmuThread* emu_thread) { this->emu_thread = emu_thread; model = new DisassemblerModel(this); @@ -256,7 +256,7 @@ void DisassemblerWidget::OnEmulationStarted(EmuThread* emu_thread) { setEnabled(true); } -void DisassemblerWidget::OnEmulationStopped() { +void DisassemblerWidget::OnEmulationStopping() { disasm_ui.treeView->setModel(nullptr); delete model; emu_thread = nullptr; diff --git a/src/citra_qt/debugger/disassembler.h b/src/citra_qt/debugger/disassembler.h index b771e95b7..45b0a7e08 100644 --- a/src/citra_qt/debugger/disassembler.h +++ b/src/citra_qt/debugger/disassembler.h @@ -65,8 +65,8 @@ public slots: void OnDebugModeEntered(); void OnDebugModeLeft(); - void OnEmulationStarted(EmuThread* emu_thread); - void OnEmulationStopped(); + void OnEmulationStarting(EmuThread* emu_thread); + void OnEmulationStopping(); private: // returns -1 if no row is selected diff --git a/src/citra_qt/debugger/registers.cpp b/src/citra_qt/debugger/registers.cpp index 2b1e8ceb8..5527a2afd 100644 --- a/src/citra_qt/debugger/registers.cpp +++ b/src/citra_qt/debugger/registers.cpp @@ -71,11 +71,11 @@ void RegistersWidget::OnDebugModeEntered() { void RegistersWidget::OnDebugModeLeft() { } -void RegistersWidget::OnEmulationStarted(EmuThread* emu_thread) { +void RegistersWidget::OnEmulationStarting(EmuThread* emu_thread) { setEnabled(true); } -void RegistersWidget::OnEmulationStopped() { +void RegistersWidget::OnEmulationStopping() { // Reset widget text for (int i = 0; i < 16; ++i) registers->child(i)->setText(1, QString("")); diff --git a/src/citra_qt/debugger/registers.h b/src/citra_qt/debugger/registers.h index 0356de290..68e3fb908 100644 --- a/src/citra_qt/debugger/registers.h +++ b/src/citra_qt/debugger/registers.h @@ -21,8 +21,8 @@ public slots: void OnDebugModeEntered(); void OnDebugModeLeft(); - void OnEmulationStarted(EmuThread* emu_thread); - void OnEmulationStopped(); + void OnEmulationStarting(EmuThread* emu_thread); + void OnEmulationStopping(); private: Ui::ARMRegisters cpu_regs_ui; diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index f21c55db6..c3e637792 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -139,12 +139,12 @@ GMainWindow::GMainWindow() : emu_thread(nullptr) connect(ui.action_Single_Window_Mode, SIGNAL(triggered(bool)), this, SLOT(ToggleWindowMode())); connect(ui.action_Hotkeys, SIGNAL(triggered()), this, SLOT(OnOpenHotkeysDialog())); - connect(this, SIGNAL(EmulationStarted(EmuThread*)), disasmWidget, SLOT(OnEmulationStarted(EmuThread*))); - connect(this, SIGNAL(EmulationStopped()), disasmWidget, SLOT(OnEmulationStopped())); - connect(this, SIGNAL(EmulationStarted(EmuThread*)), registersWidget, SLOT(OnEmulationStarted(EmuThread*))); - connect(this, SIGNAL(EmulationStopped()), registersWidget, SLOT(OnEmulationStopped())); - connect(this, SIGNAL(EmulationStarted(EmuThread*)), render_window, SLOT(OnEmulationStarted(EmuThread*))); - connect(this, SIGNAL(EmulationStopped()), render_window, SLOT(OnEmulationStopped())); + connect(this, SIGNAL(EmulationStarting(EmuThread*)), disasmWidget, SLOT(OnEmulationStarting(EmuThread*))); + connect(this, SIGNAL(EmulationStopping()), disasmWidget, SLOT(OnEmulationStopping())); + connect(this, SIGNAL(EmulationStarting(EmuThread*)), registersWidget, SLOT(OnEmulationStarting(EmuThread*))); + connect(this, SIGNAL(EmulationStopping()), registersWidget, SLOT(OnEmulationStopping())); + connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window, SLOT(OnEmulationStarting(EmuThread*))); + connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping())); // Setup hotkeys RegisterHotkey("Main Window", "Load File", QKeySequence::Open); @@ -210,7 +210,7 @@ void GMainWindow::BootGame(std::string filename) { // Create and start the emulation thread emu_thread = Common::make_unique<EmuThread>(render_window); - emit EmulationStarted(emu_thread.get()); + emit EmulationStarting(emu_thread.get()); emu_thread->start(); // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views before the CPU continues @@ -230,25 +230,16 @@ void GMainWindow::BootGame(std::string filename) { } void GMainWindow::ShutdownGame() { - // Shutdown the emulation thread - emu_thread->RequestShutdown(); - - // Disconnect signals that are attached to the current emulation thread - disconnect(emu_thread.get(), SIGNAL(DebugModeEntered()), disasmWidget, SLOT(OnDebugModeEntered())); - disconnect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, SLOT(OnDebugModeEntered())); - disconnect(emu_thread.get(), SIGNAL(DebugModeEntered()), callstackWidget, SLOT(OnDebugModeEntered())); - disconnect(emu_thread.get(), SIGNAL(DebugModeLeft()), disasmWidget, SLOT(OnDebugModeLeft())); - disconnect(emu_thread.get(), SIGNAL(DebugModeLeft()), registersWidget, SLOT(OnDebugModeLeft())); - disconnect(emu_thread.get(), SIGNAL(DebugModeLeft()), callstackWidget, SLOT(OnDebugModeLeft())); + emu_thread->RequestStop(); // Release emu threads from any breakpoints - // This belongs after RequestShutdown() and before wait() because if emulation stops on a GPU - // breakpoint after (or before) RequestShutdown() is called, the emulation would never be able + // This belongs after RequestStop() and before wait() because if emulation stops on a GPU + // breakpoint after (or before) RequestStop() is called, the emulation would never be able // to continue out to the main loop and terminate. Thus wait() would hang forever. // TODO(bunnei): This function is not thread safe, but it's being used as if it were Pica::g_debug_context->ClearBreakpoints(); - emit EmulationStopped(); + emit EmulationStopping(); // Wait for emulation thread to complete and delete it emu_thread->wait(); |