From 7c3cdeda2b96eeae0a6d21866aaa5bb835aaba0e Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Fri, 19 Aug 2022 19:51:31 -0700 Subject: [PATCH] qt: defer writing gamelist cache until EndRefresh large speedup --- Source/Core/DolphinQt/GameList/GameTracker.cpp | 5 ++++- Source/Core/DolphinQt/GameList/GameTracker.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Core/DolphinQt/GameList/GameTracker.cpp b/Source/Core/DolphinQt/GameList/GameTracker.cpp index 59421db9e8..7ee0c04e3a 100644 --- a/Source/Core/DolphinQt/GameList/GameTracker.cpp +++ b/Source/Core/DolphinQt/GameList/GameTracker.cpp @@ -89,12 +89,15 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent) m_cache.Clear(UICommon::GameFileCache::DeleteOnDisk::Yes); break; case CommandType::BeginRefresh: + m_refresh_in_progress = true; QueueOnObject(this, [] { Settings::Instance().NotifyRefreshGameListStarted(); }); for (auto& file : m_tracked_files.keys()) emit GameRemoved(file.toStdString()); m_tracked_files.clear(); break; case CommandType::EndRefresh: + m_refresh_in_progress = false; + m_cache.Save(); QueueOnObject(this, [] { Settings::Instance().NotifyRefreshGameListComplete(); }); break; } @@ -356,7 +359,7 @@ void GameTracker::LoadGame(const QString& path) auto game = m_cache.AddOrGet(converted_path, &cache_changed); if (game) emit GameLoaded(std::move(game)); - if (cache_changed) + if (cache_changed && !m_refresh_in_progress) m_cache.Save(); } } diff --git a/Source/Core/DolphinQt/GameList/GameTracker.h b/Source/Core/DolphinQt/GameList/GameTracker.h index c3e968a22f..97ec5bb268 100644 --- a/Source/Core/DolphinQt/GameList/GameTracker.h +++ b/Source/Core/DolphinQt/GameList/GameTracker.h @@ -94,6 +94,7 @@ private: bool m_initial_games_emitted = false; bool m_started = false; bool m_needs_purge = false; + bool m_refresh_in_progress = false; std::atomic_bool m_processing_halted = false; };