From 9f82a9a2444a232e746992fa89084b928255cb63 Mon Sep 17 00:00:00 2001 From: FearlessTobi Date: Wed, 20 May 2020 21:28:16 +0200 Subject: crypto: Make KeyManager a singleton class Previously, we were reading the keys everytime a KeyManager object was created, causing yuzu to reread the keys file multiple hundreds of times when loading the game list. With this change, it is only loaded once. On my system, this decreased game list loading times by a factor of 20. --- src/core/crypto/key_manager.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/core/crypto/key_manager.h') diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index 7265c4171..bf3434e1c 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -223,7 +223,13 @@ bool operator<(const KeyIndex& lhs, const KeyIndex& rhs) { class KeyManager { public: - KeyManager(); + static KeyManager& instance() { + static KeyManager instance; + return instance; + } + + KeyManager(KeyManager const&) = delete; + void operator=(KeyManager const&) = delete; bool HasKey(S128KeyType id, u64 field1 = 0, u64 field2 = 0) const; bool HasKey(S256KeyType id, u64 field1 = 0, u64 field2 = 0) const; @@ -257,6 +263,8 @@ public: bool AddTicketPersonalized(Ticket raw); private: + KeyManager(); + std::map, Key128> s128_keys; std::map, Key256> s256_keys; -- cgit v1.2.3 From 00a1d106bd11e4290ac9b9c460435c8cae3f5d6b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 1 Jul 2020 00:21:29 -0400 Subject: key_manager: Make use of canonical deleted operator= operator= typically returns a reference, it's not void. While we're at it, we can correct the parameter formatting to adhere to the codebase. --- src/core/crypto/key_manager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/core/crypto/key_manager.h') diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index bf3434e1c..f1125e083 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -228,8 +228,8 @@ public: return instance; } - KeyManager(KeyManager const&) = delete; - void operator=(KeyManager const&) = delete; + KeyManager(const KeyManager&) = delete; + KeyManager& operator=(const KeyManager&) = delete; bool HasKey(S128KeyType id, u64 field1 = 0, u64 field2 = 0) const; bool HasKey(S256KeyType id, u64 field1 = 0, u64 field2 = 0) const; -- cgit v1.2.3 From c91710a82fc99b420dfab103fe89bdd44ba004cb Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 1 Jul 2020 00:24:35 -0400 Subject: key_manager: Delete move operations Prevents the singleton from being moved from. --- src/core/crypto/key_manager.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/core/crypto/key_manager.h') diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index f1125e083..44e7c5bb5 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -231,6 +231,9 @@ public: KeyManager(const KeyManager&) = delete; KeyManager& operator=(const KeyManager&) = delete; + KeyManager(KeyManager&&) = delete; + KeyManager& operator=(KeyManager&&) = delete; + bool HasKey(S128KeyType id, u64 field1 = 0, u64 field2 = 0) const; bool HasKey(S256KeyType id, u64 field1 = 0, u64 field2 = 0) const; -- cgit v1.2.3 From fb13f053bb6ef304bc7656b521727c87eff697f1 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 1 Jul 2020 00:28:49 -0400 Subject: key_manager: Correct casing of instance() Our codebase uppercases member function names. --- src/core/crypto/key_manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/core/crypto/key_manager.h') diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index 44e7c5bb5..9269a73f2 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -223,7 +223,7 @@ bool operator<(const KeyIndex& lhs, const KeyIndex& rhs) { class KeyManager { public: - static KeyManager& instance() { + static KeyManager& Instance() { static KeyManager instance; return instance; } -- cgit v1.2.3