From 2f264c64486fdb0d6ff880cce30e229803d4105c Mon Sep 17 00:00:00 2001 From: JosJuice Date: Wed, 25 Nov 2020 16:26:13 +0100 Subject: Common: Optimize Config::Get The way Config::Get works in master, it first calls Config::GetActiveLayerForConfig which searches for the setting in all layers, and then calls Config::Layer::Get which searches for the same setting again within the given layer. We can remove this second search by combining the logic of Config::GetActiveLayerForConfig and Config::Layer::Get into one function. --- Source/Core/Common/Config/Config.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'Source/Core/Common/Config/Config.cpp') diff --git a/Source/Core/Common/Config/Config.cpp b/Source/Core/Common/Config/Config.cpp index 29004787e4..03c0aed72e 100644 --- a/Source/Core/Common/Config/Config.cpp +++ b/Source/Core/Common/Config/Config.cpp @@ -178,6 +178,25 @@ LayerType GetActiveLayerForConfig(const Location& config) return LayerType::Base; } +std::optional GetAsString(const Location& config) +{ + std::optional result; + ReadLock lock(s_layers_rw_lock); + + for (auto layer : SEARCH_ORDER) + { + const auto it = s_layers.find(layer); + if (it != s_layers.end()) + { + result = it->second->Get(config); + if (result.has_value()) + break; + } + } + + return result; +} + ConfigChangeCallbackGuard::ConfigChangeCallbackGuard() { ++s_callback_guards; -- cgit v1.2.3