From d70291562409743f24ae663c0ac58af4b289d2c7 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Tue, 11 Jul 2023 22:43:28 -0600 Subject: [PATCH] Remove some global usages of system (#6688) --- src/android/app/src/main/jni/native.cpp | 2 +- src/citra/citra.cpp | 6 +++--- src/citra/emu_window/emu_window_sdl2.cpp | 5 +++-- src/citra/emu_window/emu_window_sdl2.h | 8 +++++++- src/citra/emu_window/emu_window_sdl2_gl.cpp | 4 ++-- src/citra/emu_window/emu_window_sdl2_gl.h | 6 +++++- src/citra/emu_window/emu_window_sdl2_sw.cpp | 2 +- src/citra_qt/bootmanager.cpp | 17 +++++++++-------- src/citra_qt/bootmanager.h | 7 ++++++- src/citra_qt/compatdb.cpp | 13 ++++++------- src/citra_qt/compatdb.h | 8 +++++++- src/citra_qt/main.cpp | 6 +++--- src/core/frontend/applets/default_applets.cpp | 6 +++--- src/core/frontend/applets/default_applets.h | 2 +- 14 files changed, 57 insertions(+), 35 deletions(-) diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index fac00bc2b..00e6667c2 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -151,7 +151,7 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) { Camera::RegisterFactory("ndk", std::move(ndk_factory)); // Register frontend applets - Frontend::RegisterDefaultApplets(); + Frontend::RegisterDefaultApplets(system); system.RegisterMiiSelector(std::make_shared()); system.RegisterSoftwareKeyboard(std::make_shared()); diff --git a/src/citra/citra.cpp b/src/citra/citra.cpp index 8397992a2..c23324212 100644 --- a/src/citra/citra.cpp +++ b/src/citra/citra.cpp @@ -346,7 +346,7 @@ int main(int argc, char** argv) { system.ApplySettings(); // Register frontend applets - Frontend::RegisterDefaultApplets(); + Frontend::RegisterDefaultApplets(system); EmuWindow_SDL2::InitializeSDL2(); @@ -354,12 +354,12 @@ int main(int argc, char** argv) { bool is_secondary) -> std::unique_ptr { switch (Settings::values.graphics_api.GetValue()) { case Settings::GraphicsAPI::OpenGL: - return std::make_unique(fullscreen, is_secondary); + return std::make_unique(system, fullscreen, is_secondary); case Settings::GraphicsAPI::Software: return std::make_unique(system, fullscreen, is_secondary); } LOG_ERROR(Frontend, "Invalid Graphics API, using OpenGL"); - return std::make_unique(fullscreen, is_secondary); + return std::make_unique(system, fullscreen, is_secondary); }; const auto emu_window{create_emu_window(fullscreen, false)}; diff --git a/src/citra/emu_window/emu_window_sdl2.cpp b/src/citra/emu_window/emu_window_sdl2.cpp index f8fe7135d..4761e5fe3 100644 --- a/src/citra/emu_window/emu_window_sdl2.cpp +++ b/src/citra/emu_window/emu_window_sdl2.cpp @@ -109,7 +109,8 @@ void EmuWindow_SDL2::Fullscreen() { SDL_MaximizeWindow(render_window); } -EmuWindow_SDL2::EmuWindow_SDL2(bool is_secondary) : EmuWindow(is_secondary) {} +EmuWindow_SDL2::EmuWindow_SDL2(Core::System& system_, bool is_secondary) + : EmuWindow(is_secondary), system(system_) {} EmuWindow_SDL2::~EmuWindow_SDL2() { SDL_Quit(); @@ -202,7 +203,7 @@ void EmuWindow_SDL2::OnMinimalClientAreaChangeRequest(std::pair minima void EmuWindow_SDL2::UpdateFramerateCounter() { const u32 current_time = SDL_GetTicks(); if (current_time > last_time + 2000) { - const auto results = Core::System::GetInstance().GetAndResetPerfStats(); + const auto results = system.GetAndResetPerfStats(); const auto title = fmt::format("Citra {} | {}-{} | FPS: {:.0f} ({:.0f}%)", Common::g_build_fullname, Common::g_scm_branch, Common::g_scm_desc, results.game_fps, diff --git a/src/citra/emu_window/emu_window_sdl2.h b/src/citra/emu_window/emu_window_sdl2.h index b74c70731..1a412c049 100644 --- a/src/citra/emu_window/emu_window_sdl2.h +++ b/src/citra/emu_window/emu_window_sdl2.h @@ -10,9 +10,13 @@ struct SDL_Window; +namespace Core { +class System; +} + class EmuWindow_SDL2 : public Frontend::EmuWindow { public: - explicit EmuWindow_SDL2(bool is_secondary); + explicit EmuWindow_SDL2(Core::System& system_, bool is_secondary); ~EmuWindow_SDL2(); /// Initializes SDL2 @@ -78,4 +82,6 @@ protected: /// Keeps track of how often to update the title bar during gameplay u32 last_time = 0; + + Core::System& system; }; diff --git a/src/citra/emu_window/emu_window_sdl2_gl.cpp b/src/citra/emu_window/emu_window_sdl2_gl.cpp index 090050ef9..ec86f301a 100644 --- a/src/citra/emu_window/emu_window_sdl2_gl.cpp +++ b/src/citra/emu_window/emu_window_sdl2_gl.cpp @@ -42,8 +42,8 @@ private: SDL_GLContext context; }; -EmuWindow_SDL2_GL::EmuWindow_SDL2_GL(bool fullscreen, bool is_secondary) - : EmuWindow_SDL2{is_secondary} { +EmuWindow_SDL2_GL::EmuWindow_SDL2_GL(Core::System& system_, bool fullscreen, bool is_secondary) + : EmuWindow_SDL2{system_, is_secondary} { // Initialize the window if (Settings::values.use_gles) { SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); diff --git a/src/citra/emu_window/emu_window_sdl2_gl.h b/src/citra/emu_window/emu_window_sdl2_gl.h index e56cd2c42..4a4d70601 100644 --- a/src/citra/emu_window/emu_window_sdl2_gl.h +++ b/src/citra/emu_window/emu_window_sdl2_gl.h @@ -9,9 +9,13 @@ struct SDL_Window; +namespace Core { +class System; +} + class EmuWindow_SDL2_GL : public EmuWindow_SDL2 { public: - explicit EmuWindow_SDL2_GL(bool fullscreen, bool is_secondary); + explicit EmuWindow_SDL2_GL(Core::System& system_, bool fullscreen, bool is_secondary); ~EmuWindow_SDL2_GL(); void Present() override; diff --git a/src/citra/emu_window/emu_window_sdl2_sw.cpp b/src/citra/emu_window/emu_window_sdl2_sw.cpp index 71161fdbf..f7b6b2bb8 100644 --- a/src/citra/emu_window/emu_window_sdl2_sw.cpp +++ b/src/citra/emu_window/emu_window_sdl2_sw.cpp @@ -18,7 +18,7 @@ class DummyContext : public Frontend::GraphicsContext {}; EmuWindow_SDL2_SW::EmuWindow_SDL2_SW(Core::System& system_, bool fullscreen, bool is_secondary) - : EmuWindow_SDL2{is_secondary}, system{system_} { + : EmuWindow_SDL2{system_, is_secondary}, system{system_} { std::string window_title = fmt::format("Citra {} | {}-{}", Common::g_build_fullname, Common::g_scm_branch, Common::g_scm_desc); render_window = diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp index c89869418..10963d224 100644 --- a/src/citra_qt/bootmanager.cpp +++ b/src/citra_qt/bootmanager.cpp @@ -44,7 +44,8 @@ static Frontend::WindowSystemType GetWindowSystemType(); -EmuThread::EmuThread(Frontend::GraphicsContext& core_context) : core_context(core_context) {} +EmuThread::EmuThread(Core::System& system_, Frontend::GraphicsContext& core_context) + : system{system_}, core_context(core_context) {} EmuThread::~EmuThread() = default; @@ -62,7 +63,6 @@ static GMainWindow* GetMainWindow() { void EmuThread::run() { MicroProfileOnThreadCreate("EmuThread"); const auto scope = core_context.Acquire(); - Core::System& system = Core::System::GetInstance(); if (Settings::values.preload_textures) { emit LoadProgress(VideoCore::LoadCallbackStage::Preload, 0, 0); @@ -107,7 +107,7 @@ void EmuThread::run() { } if (result != Core::System::ResultStatus::Success) { this->SetRunning(false); - emit ErrorThrown(result, Core::System::GetInstance().GetStatusDetails()); + emit ErrorThrown(result, system.GetStatusDetails()); } was_active = running || exec_step; @@ -248,8 +248,8 @@ public: #ifdef HAS_OPENGL class OpenGLRenderWidget : public RenderWidget { public: - explicit OpenGLRenderWidget(GRenderWindow* parent, bool is_secondary) - : RenderWidget(parent), is_secondary(is_secondary) { + explicit OpenGLRenderWidget(GRenderWindow* parent, Core::System& system_, bool is_secondary) + : RenderWidget(parent), system(system_), is_secondary(is_secondary) { setAttribute(Qt::WA_NativeWindow); setAttribute(Qt::WA_PaintOnScreen); if (GetWindowSystemType() == Frontend::WindowSystemType::Wayland) { @@ -266,7 +266,7 @@ public: if (!isVisible()) { return; } - if (!Core::System::GetInstance().IsPoweredOn()) { + if (!system.IsPoweredOn()) { return; } context->MakeCurrent(); @@ -284,6 +284,7 @@ public: private: std::unique_ptr context{}; + Core::System& system; bool is_secondary; }; #endif @@ -296,7 +297,7 @@ struct SoftwareRenderWidget : public RenderWidget { if (!isVisible()) { return; } - if (!Core::System::GetInstance().IsPoweredOn()) { + if (!system.IsPoweredOn()) { return; } @@ -666,7 +667,7 @@ bool GRenderWindow::InitializeOpenGL() { // TODO: One of these flags might be interesting: WA_OpaquePaintEvent, WA_NoBackground, // WA_DontShowOnScreen, WA_DeleteOnClose - auto child = new OpenGLRenderWidget(this, is_secondary); + auto child = new OpenGLRenderWidget(this, system, is_secondary); child_widget = child; child_widget->windowHandle()->create(); diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h index 59cdfab71..1689eebb7 100644 --- a/src/citra_qt/bootmanager.h +++ b/src/citra_qt/bootmanager.h @@ -18,6 +18,10 @@ class QTouchEvent; class GRenderWindow; +namespace Core { +class System; +} + namespace VideoCore { enum class LoadCallbackStage; } @@ -26,7 +30,7 @@ class EmuThread final : public QThread { Q_OBJECT public: - explicit EmuThread(Frontend::GraphicsContext& context); + explicit EmuThread(Core::System& system_, Frontend::GraphicsContext& context); ~EmuThread() override; /** @@ -80,6 +84,7 @@ private: std::mutex running_mutex; std::condition_variable running_cv; + Core::System& system; Frontend::GraphicsContext& core_context; signals: diff --git a/src/citra_qt/compatdb.cpp b/src/citra_qt/compatdb.cpp index 28f5438f2..92069dcca 100644 --- a/src/citra_qt/compatdb.cpp +++ b/src/citra_qt/compatdb.cpp @@ -11,9 +11,9 @@ #include "core/core.h" #include "ui_compatdb.h" -CompatDB::CompatDB(QWidget* parent) +CompatDB::CompatDB(Core::TelemetrySession& telemetry_session_, QWidget* parent) : QWizard(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint), - ui{std::make_unique()} { + ui{std::make_unique()}, telemetry_session{telemetry_session_} { ui->setupUi(this); connect(ui->radioButton_Perfect, &QRadioButton::clicked, this, &CompatDB::EnableNext); connect(ui->radioButton_Great, &QRadioButton::clicked, this, &CompatDB::EnableNext); @@ -51,16 +51,15 @@ void CompatDB::Submit() { case CompatDBPage::Final: back(); LOG_DEBUG(Frontend, "Compatibility Rating: {}", compatibility->checkedId()); - Core::System::GetInstance().TelemetrySession().AddField( - Common::Telemetry::FieldType::UserFeedback, "Compatibility", - compatibility->checkedId()); + telemetry_session.AddField(Common::Telemetry::FieldType::UserFeedback, "Compatibility", + compatibility->checkedId()); button(NextButton)->setEnabled(false); button(NextButton)->setText(tr("Submitting")); button(CancelButton)->setVisible(false); - testcase_watcher.setFuture(QtConcurrent::run( - [] { return Core::System::GetInstance().TelemetrySession().SubmitTestcase(); })); + testcase_watcher.setFuture( + QtConcurrent::run([this] { return telemetry_session.SubmitTestcase(); })); break; default: LOG_ERROR(Frontend, "Unexpected page: {}", currentId()); diff --git a/src/citra_qt/compatdb.h b/src/citra_qt/compatdb.h index 5381f67f7..b8ae5e209 100644 --- a/src/citra_qt/compatdb.h +++ b/src/citra_qt/compatdb.h @@ -8,6 +8,10 @@ #include #include +namespace Core { +class TelemetrySession; +} + namespace Ui { class CompatDB; } @@ -16,7 +20,7 @@ class CompatDB : public QWizard { Q_OBJECT public: - explicit CompatDB(QWidget* parent = nullptr); + explicit CompatDB(Core::TelemetrySession& telemetry_session_, QWidget* parent = nullptr); ~CompatDB(); private: @@ -27,4 +31,6 @@ private: void Submit(); void OnTestcaseSubmitted(); void EnableNext(); + + Core::TelemetrySession& telemetry_session; }; diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index b764459eb..d26e41a94 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -1223,7 +1223,7 @@ void GMainWindow::BootGame(const QString& filename) { } // Create and start the emulation thread - emu_thread = std::make_unique(*render_window); + emu_thread = std::make_unique(system, *render_window); emit EmulationStarting(emu_thread.get()); emu_thread->start(); @@ -1814,7 +1814,7 @@ void GMainWindow::OnLoadComplete() { void GMainWindow::OnMenuReportCompatibility() { if (!NetSettings::values.citra_token.empty() && !NetSettings::values.citra_username.empty()) { - CompatDB compatdb{this}; + CompatDB compatdb{system.TelemetrySession(), this}; compatdb.exec(); } else { QMessageBox::critical(this, tr("Missing Citra Account"), @@ -2931,7 +2931,7 @@ int main(int argc, char* argv[]) { GMainWindow main_window(system); // Register frontend applets - Frontend::RegisterDefaultApplets(); + Frontend::RegisterDefaultApplets(system); system.RegisterMiiSelector(std::make_shared(main_window)); system.RegisterSoftwareKeyboard(std::make_shared(main_window)); diff --git a/src/core/frontend/applets/default_applets.cpp b/src/core/frontend/applets/default_applets.cpp index 38a6c48dd..3b67e97f8 100644 --- a/src/core/frontend/applets/default_applets.cpp +++ b/src/core/frontend/applets/default_applets.cpp @@ -8,8 +8,8 @@ #include "core/frontend/applets/swkbd.h" namespace Frontend { -void RegisterDefaultApplets() { - Core::System::GetInstance().RegisterSoftwareKeyboard(std::make_shared()); - Core::System::GetInstance().RegisterMiiSelector(std::make_shared()); +void RegisterDefaultApplets(Core::System& system) { + system.RegisterSoftwareKeyboard(std::make_shared()); + system.RegisterMiiSelector(std::make_shared()); } } // namespace Frontend diff --git a/src/core/frontend/applets/default_applets.h b/src/core/frontend/applets/default_applets.h index d537b7bf0..300a147b9 100644 --- a/src/core/frontend/applets/default_applets.h +++ b/src/core/frontend/applets/default_applets.h @@ -9,5 +9,5 @@ namespace Frontend { * Registers default, frontend-independent applet implementations. * Will be replaced later if any frontend-specific implementation is available. */ -void RegisterDefaultApplets(); +void RegisterDefaultApplets(Core::System& system); } // namespace Frontend