diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp index 8dad714a841d..e0fce56fd931 100644 --- a/Source/Android/jni/MainAndroid.cpp +++ b/Source/Android/jni/MainAndroid.cpp @@ -639,7 +639,7 @@ static void Run(JNIEnv* env, const std::vector& paths, bool first_o if (first_open) { - DolphinAnalytics::Instance()->ReportDolphinStart(GetAnalyticValue("DEVICE_TYPE")); + DolphinAnalytics::Instance().ReportDolphinStart(GetAnalyticValue("DEVICE_TYPE")); } WiimoteReal::InitAdapterClass(); diff --git a/Source/Core/Core/Analytics.cpp b/Source/Core/Core/Analytics.cpp index 29b70b8de804..436a117029c3 100644 --- a/Source/Core/Core/Analytics.cpp +++ b/Source/Core/Core/Analytics.cpp @@ -53,14 +53,10 @@ DolphinAnalytics::DolphinAnalytics() MakeBaseBuilder(); } -std::shared_ptr DolphinAnalytics::Instance() +DolphinAnalytics& DolphinAnalytics::Instance() { - std::lock_guard lk{s_instance_mutex}; - if (!s_instance) - { - s_instance.reset(new DolphinAnalytics()); - } - return s_instance; + static DolphinAnalytics instance; + return instance; } void DolphinAnalytics::ReloadConfig() diff --git a/Source/Core/Core/Analytics.h b/Source/Core/Core/Analytics.h index 77faa3d80cf1..98f26900b0e0 100644 --- a/Source/Core/Core/Analytics.h +++ b/Source/Core/Core/Analytics.h @@ -36,7 +36,7 @@ class DolphinAnalytics { public: // Performs lazy-initialization of a singleton and returns the instance. - static std::shared_ptr Instance(); + static DolphinAnalytics& Instance(); #if defined(ANDROID) // Get value from java. @@ -124,9 +124,4 @@ class DolphinAnalytics std::mutex m_reporter_mutex; Common::AnalyticsReporter m_reporter; - - // Shared pointer in order to allow for multithreaded use of the instance and - // avoid races at reinitialization time. - static inline std::mutex s_instance_mutex; - static inline std::shared_ptr s_instance; }; diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index 56ad444a1909..128829721d53 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -745,7 +745,7 @@ void SConfig::SetRunningGameMetadata(const std::string& game_id, const std::stri HLE::Reload(); PatchEngine::Reload(); HiresTexture::Update(); - DolphinAnalytics::Instance()->ReportGameStart(); + DolphinAnalytics::Instance().ReportGameStart(); } } diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index 46de565a015b..6dc471736eef 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -322,7 +322,7 @@ static void CpuThread(const std::optional& savestate_path, bool del Common::SetCurrentThreadName("CPU-GPU thread"); // This needs to be delayed until after the video backend is ready. - DolphinAnalytics::Instance()->ReportGameStart(); + DolphinAnalytics::Instance().ReportGameStart(); if (_CoreParameter.bFastmem) EMM::InstallExceptionHandler(); // Let's run under memory watch diff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp index e62c22fa07c7..5a11782d6314 100644 --- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp @@ -520,7 +520,7 @@ bool Wiimote::ProcessReadDataRequest() m_read_request.address + m_read_request.size > CameraLogic::REPORT_DATA_OFFSET; if (is_reading_ext || is_reading_ir) - DolphinAnalytics::Instance()->ReportGameQuirk(GameQuirk::DIRECTLY_READS_WIIMOTE_INPUT); + DolphinAnalytics::Instance().ReportGameQuirk(GameQuirk::DIRECTLY_READS_WIIMOTE_INPUT); // Top byte of address is ignored on the bus, but it IS maintained in the read-reply. auto const bytes_read = m_i2c_bus.BusRead( diff --git a/Source/Core/Core/PowerPC/PPCCache.cpp b/Source/Core/Core/PowerPC/PPCCache.cpp index f3cdefb0c368..551142e17329 100644 --- a/Source/Core/Core/PowerPC/PPCCache.cpp +++ b/Source/Core/Core/PowerPC/PPCCache.cpp @@ -154,7 +154,7 @@ u32 InstructionCache::ReadInstruction(u32 addr) { INFO_LOG(POWERPC, "ICache read at %08x returned stale data: CACHED: %08x vs. RAM: %08x", addr, res, inmem); - DolphinAnalytics::Instance()->ReportGameQuirk(GameQuirk::ICACHE_MATTERS); + DolphinAnalytics::Instance().ReportGameQuirk(GameQuirk::ICACHE_MATTERS); } return res; } diff --git a/Source/Core/DolphinNoGUI/MainNoGUI.cpp b/Source/Core/DolphinNoGUI/MainNoGUI.cpp index 1b35ac880998..711583f736bb 100644 --- a/Source/Core/DolphinNoGUI/MainNoGUI.cpp +++ b/Source/Core/DolphinNoGUI/MainNoGUI.cpp @@ -202,7 +202,7 @@ int main(int argc, char* argv[]) sigaction(SIGINT, &sa, nullptr); sigaction(SIGTERM, &sa, nullptr); - DolphinAnalytics::Instance()->ReportDolphinStart("nogui"); + DolphinAnalytics::Instance().ReportDolphinStart("nogui"); if (!BootManager::BootCore(std::move(boot), s_platform->GetWindowSystemInfo())) { diff --git a/Source/Core/DolphinQt/Main.cpp b/Source/Core/DolphinQt/Main.cpp index ee30defcf794..58db5bb85f94 100644 --- a/Source/Core/DolphinQt/Main.cpp +++ b/Source/Core/DolphinQt/Main.cpp @@ -177,7 +177,7 @@ int main(int argc, char* argv[]) int retval; { - DolphinAnalytics::Instance()->ReportDolphinStart("qt"); + DolphinAnalytics::Instance().ReportDolphinStart("qt"); MainWindow win{std::move(boot), static_cast(options.get("movie"))}; if (options.is_set("debugger")) @@ -210,7 +210,7 @@ int main(int argc, char* argv[]) SConfig::GetInstance().m_analytics_permission_asked = true; Settings::Instance().SetAnalyticsEnabled(answer == QMessageBox::Yes); - DolphinAnalytics::Instance()->ReloadConfig(); + DolphinAnalytics::Instance().ReloadConfig(); } #endif diff --git a/Source/Core/DolphinQt/Settings/GeneralPane.cpp b/Source/Core/DolphinQt/Settings/GeneralPane.cpp index 756b4667d1e0..b4fdcd0ba311 100644 --- a/Source/Core/DolphinQt/Settings/GeneralPane.cpp +++ b/Source/Core/DolphinQt/Settings/GeneralPane.cpp @@ -300,7 +300,7 @@ void GeneralPane::OnSaveConfig() #if defined(USE_ANALYTICS) && USE_ANALYTICS Settings::Instance().SetAnalyticsEnabled(m_checkbox_enable_analytics->isChecked()); - DolphinAnalytics::Instance()->ReloadConfig(); + DolphinAnalytics::Instance().ReloadConfig(); #endif settings.bCPUThread = m_checkbox_dualcore->isChecked(); Config::SetBaseOrCurrent(Config::MAIN_CPU_THREAD, m_checkbox_dualcore->isChecked()); @@ -325,8 +325,8 @@ void GeneralPane::OnSaveConfig() #if defined(USE_ANALYTICS) && USE_ANALYTICS void GeneralPane::GenerateNewIdentity() { - DolphinAnalytics::Instance()->GenerateNewIdentity(); - DolphinAnalytics::Instance()->ReloadConfig(); + DolphinAnalytics::Instance().GenerateNewIdentity(); + DolphinAnalytics::Instance().ReloadConfig(); ModalMessageBox message_box(this); message_box.setIcon(QMessageBox::Information); message_box.setWindowTitle(tr("Identity Generation")); diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index 78e8234a819e..183abf8ad862 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -1282,7 +1282,7 @@ void Renderer::Swap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, u6 perf_sample.speed_ratio = SystemTimers::GetEstimatedEmulationPerformance(); perf_sample.num_prims = stats.thisFrame.numPrims + stats.thisFrame.numDLPrims; perf_sample.num_draw_calls = stats.thisFrame.numDrawCalls; - DolphinAnalytics::Instance()->ReportPerformanceInfo(std::move(perf_sample)); + DolphinAnalytics::Instance().ReportPerformanceInfo(std::move(perf_sample)); if (IsFrameDumping()) DumpCurrentFrame(xfb_entry->texture.get(), xfb_rect, ticks);