diff options
| author | 2021-10-15 17:57:58 -0400 | |
|---|---|---|
| committer | 2021-10-15 17:57:58 -0400 | |
| commit | dc385b7392df2b2c301b6df908483beadbb5eb3b (patch) | |
| tree | f03cf5293b06159cfc9325ee4527a4ea15685c25 /src/core/core.cpp | |
| parent | Merge pull request #7183 from FearlessTobi/translation-ci (diff) | |
| parent | bootmanager: Forward declare System and SystemResultStatus (diff) | |
| download | yuzu-dc385b7392df2b2c301b6df908483beadbb5eb3b.tar.gz yuzu-dc385b7392df2b2c301b6df908483beadbb5eb3b.tar.xz yuzu-dc385b7392df2b2c301b6df908483beadbb5eb3b.zip | |
Merge pull request #7182 from Morph1984/system
yuzu: Remove all remaining global system instances
Diffstat (limited to 'src/core/core.cpp')
| -rw-r--r-- | src/core/core.cpp | 64 |
1 files changed, 26 insertions, 38 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index bb268a319..3532839df 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -139,8 +139,8 @@ struct System::Impl { | |||
| 139 | : kernel{system}, fs_controller{system}, memory{system}, | 139 | : kernel{system}, fs_controller{system}, memory{system}, |
| 140 | cpu_manager{system}, reporter{system}, applet_manager{system}, time_manager{system} {} | 140 | cpu_manager{system}, reporter{system}, applet_manager{system}, time_manager{system} {} |
| 141 | 141 | ||
| 142 | ResultStatus Run() { | 142 | SystemResultStatus Run() { |
| 143 | status = ResultStatus::Success; | 143 | status = SystemResultStatus::Success; |
| 144 | 144 | ||
| 145 | kernel.Suspend(false); | 145 | kernel.Suspend(false); |
| 146 | core_timing.SyncPause(false); | 146 | core_timing.SyncPause(false); |
| @@ -149,8 +149,8 @@ struct System::Impl { | |||
| 149 | return status; | 149 | return status; |
| 150 | } | 150 | } |
| 151 | 151 | ||
| 152 | ResultStatus Pause() { | 152 | SystemResultStatus Pause() { |
| 153 | status = ResultStatus::Success; | 153 | status = SystemResultStatus::Success; |
| 154 | 154 | ||
| 155 | core_timing.SyncPause(true); | 155 | core_timing.SyncPause(true); |
| 156 | kernel.Suspend(true); | 156 | kernel.Suspend(true); |
| @@ -159,7 +159,7 @@ struct System::Impl { | |||
| 159 | return status; | 159 | return status; |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | ResultStatus Init(System& system, Frontend::EmuWindow& emu_window) { | 162 | SystemResultStatus Init(System& system, Frontend::EmuWindow& emu_window) { |
| 163 | LOG_DEBUG(Core, "initialized OK"); | 163 | LOG_DEBUG(Core, "initialized OK"); |
| 164 | 164 | ||
| 165 | device_memory = std::make_unique<Core::DeviceMemory>(); | 165 | device_memory = std::make_unique<Core::DeviceMemory>(); |
| @@ -197,7 +197,7 @@ struct System::Impl { | |||
| 197 | 197 | ||
| 198 | gpu_core = VideoCore::CreateGPU(emu_window, system); | 198 | gpu_core = VideoCore::CreateGPU(emu_window, system); |
| 199 | if (!gpu_core) { | 199 | if (!gpu_core) { |
| 200 | return ResultStatus::ErrorVideoCore; | 200 | return SystemResultStatus::ErrorVideoCore; |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | service_manager = std::make_shared<Service::SM::ServiceManager>(kernel); | 203 | service_manager = std::make_shared<Service::SM::ServiceManager>(kernel); |
| @@ -217,21 +217,22 @@ struct System::Impl { | |||
| 217 | 217 | ||
| 218 | LOG_DEBUG(Core, "Initialized OK"); | 218 | LOG_DEBUG(Core, "Initialized OK"); |
| 219 | 219 | ||
| 220 | return ResultStatus::Success; | 220 | return SystemResultStatus::Success; |
| 221 | } | 221 | } |
| 222 | 222 | ||
| 223 | ResultStatus Load(System& system, Frontend::EmuWindow& emu_window, const std::string& filepath, | 223 | SystemResultStatus Load(System& system, Frontend::EmuWindow& emu_window, |
| 224 | u64 program_id, std::size_t program_index) { | 224 | const std::string& filepath, u64 program_id, |
| 225 | std::size_t program_index) { | ||
| 225 | app_loader = Loader::GetLoader(system, GetGameFileFromPath(virtual_filesystem, filepath), | 226 | app_loader = Loader::GetLoader(system, GetGameFileFromPath(virtual_filesystem, filepath), |
| 226 | program_id, program_index); | 227 | program_id, program_index); |
| 227 | 228 | ||
| 228 | if (!app_loader) { | 229 | if (!app_loader) { |
| 229 | LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); | 230 | LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); |
| 230 | return ResultStatus::ErrorGetLoader; | 231 | return SystemResultStatus::ErrorGetLoader; |
| 231 | } | 232 | } |
| 232 | 233 | ||
| 233 | ResultStatus init_result{Init(system, emu_window)}; | 234 | SystemResultStatus init_result{Init(system, emu_window)}; |
| 234 | if (init_result != ResultStatus::Success) { | 235 | if (init_result != SystemResultStatus::Success) { |
| 235 | LOG_CRITICAL(Core, "Failed to initialize system (Error {})!", | 236 | LOG_CRITICAL(Core, "Failed to initialize system (Error {})!", |
| 236 | static_cast<int>(init_result)); | 237 | static_cast<int>(init_result)); |
| 237 | Shutdown(); | 238 | Shutdown(); |
| @@ -249,8 +250,8 @@ struct System::Impl { | |||
| 249 | LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result); | 250 | LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result); |
| 250 | Shutdown(); | 251 | Shutdown(); |
| 251 | 252 | ||
| 252 | return static_cast<ResultStatus>(static_cast<u32>(ResultStatus::ErrorLoader) + | 253 | return static_cast<SystemResultStatus>( |
| 253 | static_cast<u32>(load_result)); | 254 | static_cast<u32>(SystemResultStatus::ErrorLoader) + static_cast<u32>(load_result)); |
| 254 | } | 255 | } |
| 255 | AddGlueRegistrationForProcess(*app_loader, *main_process); | 256 | AddGlueRegistrationForProcess(*app_loader, *main_process); |
| 256 | kernel.MakeCurrentProcess(main_process.get()); | 257 | kernel.MakeCurrentProcess(main_process.get()); |
| @@ -282,7 +283,7 @@ struct System::Impl { | |||
| 282 | GetAndResetPerfStats(); | 283 | GetAndResetPerfStats(); |
| 283 | perf_stats->BeginSystemFrame(); | 284 | perf_stats->BeginSystemFrame(); |
| 284 | 285 | ||
| 285 | status = ResultStatus::Success; | 286 | status = SystemResultStatus::Success; |
| 286 | return status; | 287 | return status; |
| 287 | } | 288 | } |
| 288 | 289 | ||
| @@ -355,7 +356,7 @@ struct System::Impl { | |||
| 355 | arp_manager.Register(launch.title_id, launch, std::move(nacp_data)); | 356 | arp_manager.Register(launch.title_id, launch, std::move(nacp_data)); |
| 356 | } | 357 | } |
| 357 | 358 | ||
| 358 | void SetStatus(ResultStatus new_status, const char* details = nullptr) { | 359 | void SetStatus(SystemResultStatus new_status, const char* details = nullptr) { |
| 359 | status = new_status; | 360 | status = new_status; |
| 360 | if (details) { | 361 | if (details) { |
| 361 | status_details = details; | 362 | status_details = details; |
| @@ -411,7 +412,7 @@ struct System::Impl { | |||
| 411 | /// Network instance | 412 | /// Network instance |
| 412 | Network::NetworkInstance network_instance; | 413 | Network::NetworkInstance network_instance; |
| 413 | 414 | ||
| 414 | ResultStatus status = ResultStatus::Success; | 415 | SystemResultStatus status = SystemResultStatus::Success; |
| 415 | std::string status_details = ""; | 416 | std::string status_details = ""; |
| 416 | 417 | ||
| 417 | std::unique_ptr<Core::PerfStats> perf_stats; | 418 | std::unique_ptr<Core::PerfStats> perf_stats; |
| @@ -428,21 +429,8 @@ struct System::Impl { | |||
| 428 | }; | 429 | }; |
| 429 | 430 | ||
| 430 | System::System() : impl{std::make_unique<Impl>(*this)} {} | 431 | System::System() : impl{std::make_unique<Impl>(*this)} {} |
| 431 | System::~System() = default; | ||
| 432 | |||
| 433 | System& System::GetInstance() { | ||
| 434 | if (!s_instance) { | ||
| 435 | throw std::runtime_error("Using System instance before its initialization"); | ||
| 436 | } | ||
| 437 | return *s_instance; | ||
| 438 | } | ||
| 439 | 432 | ||
| 440 | void System::InitializeGlobalInstance() { | 433 | System::~System() = default; |
| 441 | if (s_instance) { | ||
| 442 | throw std::runtime_error("Reinitializing Global System instance."); | ||
| 443 | } | ||
| 444 | s_instance = std::unique_ptr<System>(new System); | ||
| 445 | } | ||
| 446 | 434 | ||
| 447 | CpuManager& System::GetCpuManager() { | 435 | CpuManager& System::GetCpuManager() { |
| 448 | return impl->cpu_manager; | 436 | return impl->cpu_manager; |
| @@ -452,16 +440,16 @@ const CpuManager& System::GetCpuManager() const { | |||
| 452 | return impl->cpu_manager; | 440 | return impl->cpu_manager; |
| 453 | } | 441 | } |
| 454 | 442 | ||
| 455 | System::ResultStatus System::Run() { | 443 | SystemResultStatus System::Run() { |
| 456 | return impl->Run(); | 444 | return impl->Run(); |
| 457 | } | 445 | } |
| 458 | 446 | ||
| 459 | System::ResultStatus System::Pause() { | 447 | SystemResultStatus System::Pause() { |
| 460 | return impl->Pause(); | 448 | return impl->Pause(); |
| 461 | } | 449 | } |
| 462 | 450 | ||
| 463 | System::ResultStatus System::SingleStep() { | 451 | SystemResultStatus System::SingleStep() { |
| 464 | return ResultStatus::Success; | 452 | return SystemResultStatus::Success; |
| 465 | } | 453 | } |
| 466 | 454 | ||
| 467 | void System::InvalidateCpuInstructionCaches() { | 455 | void System::InvalidateCpuInstructionCaches() { |
| @@ -476,8 +464,8 @@ void System::Shutdown() { | |||
| 476 | impl->Shutdown(); | 464 | impl->Shutdown(); |
| 477 | } | 465 | } |
| 478 | 466 | ||
| 479 | System::ResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath, | 467 | SystemResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath, |
| 480 | u64 program_id, std::size_t program_index) { | 468 | u64 program_id, std::size_t program_index) { |
| 481 | return impl->Load(*this, emu_window, filepath, program_id, program_index); | 469 | return impl->Load(*this, emu_window, filepath, program_id, program_index); |
| 482 | } | 470 | } |
| 483 | 471 | ||
| @@ -637,7 +625,7 @@ Loader::ResultStatus System::GetGameName(std::string& out) const { | |||
| 637 | return impl->GetGameName(out); | 625 | return impl->GetGameName(out); |
| 638 | } | 626 | } |
| 639 | 627 | ||
| 640 | void System::SetStatus(ResultStatus new_status, const char* details) { | 628 | void System::SetStatus(SystemResultStatus new_status, const char* details) { |
| 641 | impl->SetStatus(new_status, details); | 629 | impl->SetStatus(new_status, details); |
| 642 | } | 630 | } |
| 643 | 631 | ||