summaryrefslogtreecommitdiff
path: root/src/core/core.cpp
diff options
context:
space:
mode:
authorGravatar Mai M2021-10-15 17:57:58 -0400
committerGravatar GitHub2021-10-15 17:57:58 -0400
commitdc385b7392df2b2c301b6df908483beadbb5eb3b (patch)
treef03cf5293b06159cfc9325ee4527a4ea15685c25 /src/core/core.cpp
parentMerge pull request #7183 from FearlessTobi/translation-ci (diff)
parentbootmanager: Forward declare System and SystemResultStatus (diff)
downloadyuzu-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.cpp64
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
430System::System() : impl{std::make_unique<Impl>(*this)} {} 431System::System() : impl{std::make_unique<Impl>(*this)} {}
431System::~System() = default;
432
433System& 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
440void System::InitializeGlobalInstance() { 433System::~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
447CpuManager& System::GetCpuManager() { 435CpuManager& 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
455System::ResultStatus System::Run() { 443SystemResultStatus System::Run() {
456 return impl->Run(); 444 return impl->Run();
457} 445}
458 446
459System::ResultStatus System::Pause() { 447SystemResultStatus System::Pause() {
460 return impl->Pause(); 448 return impl->Pause();
461} 449}
462 450
463System::ResultStatus System::SingleStep() { 451SystemResultStatus System::SingleStep() {
464 return ResultStatus::Success; 452 return SystemResultStatus::Success;
465} 453}
466 454
467void System::InvalidateCpuInstructionCaches() { 455void System::InvalidateCpuInstructionCaches() {
@@ -476,8 +464,8 @@ void System::Shutdown() {
476 impl->Shutdown(); 464 impl->Shutdown();
477} 465}
478 466
479System::ResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath, 467SystemResultStatus 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
640void System::SetStatus(ResultStatus new_status, const char* details) { 628void System::SetStatus(SystemResultStatus new_status, const char* details) {
641 impl->SetStatus(new_status, details); 629 impl->SetStatus(new_status, details);
642} 630}
643 631