Impl sceSystemServiceLoadExec (#3647)

* Add support for restarting the emulator with new configurations

- Implement `Restart` function in `Emulator` to enable process relaunch with updated parameters.
- Modify `sceSystemServiceLoadExec` to use the restart functionality.

* Add logging for emulator restart and system service load execution

* Add IPC emulator PID output command

Impl `PID` output command to return the emulator process ID
- required for launches supporting emulator restart

* Add log file append mode support (used after restarting to keep the same log file)

* Keep game root between restarts

* add --wait-for-debugger option flag

* add --wait-for-pid flag

used for sync between parent & child process during restart

* impl restart via ipc

* fix override game root

* add qt flags to allow restart
This commit is contained in:
Vinicius Rangel
2025-09-25 23:01:52 -03:00
committed by GitHub
parent a6f5e4c7dc
commit 71f343d2d6
16 changed files with 432 additions and 43 deletions

View File

@@ -4,6 +4,7 @@
#pragma once
#include <filesystem>
#include <optional>
#include <thread>
#include "common/singleton.h"
@@ -25,9 +26,19 @@ public:
Emulator();
~Emulator();
void Run(std::filesystem::path file, const std::vector<std::string> args = {});
void Run(std::filesystem::path file, std::vector<std::string> args = {},
std::optional<std::filesystem::path> game_folder = {});
void UpdatePlayTime(const std::string& serial);
/**
* This will kill the current process and launch a new process with the same configuration
* (using CLI args) but replacing the eboot image and guest arguments
*/
void Restart(std::filesystem::path eboot_path, const std::vector<std::string>& guest_args = {});
const char* executableName;
bool waitForDebuggerBeforeRun{false};
private:
void LoadSystemModules(const std::string& game_serial);