Fix caching strategy
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7960
This commit is contained in:
parent
f9bfa831e5
commit
7231f1dc68
|
@ -164,7 +164,14 @@ void SETTINGS_MANAGER::FlushAndRelease( JSON_SETTINGS* aSettings, bool aSave )
|
||||||
if( aSave )
|
if( aSave )
|
||||||
( *it )->SaveToFile( GetPathForSettingsFile( it->get() ) );
|
( *it )->SaveToFile( GetPathForSettingsFile( it->get() ) );
|
||||||
|
|
||||||
|
size_t typeHash = typeid( *it->get() ).hash_code();
|
||||||
|
|
||||||
|
if( m_app_settings_cache.count( typeHash ) )
|
||||||
|
m_app_settings_cache.erase( typeHash );
|
||||||
|
|
||||||
m_settings.erase( it );
|
m_settings.erase( it );
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#ifndef _SETTINGS_MANAGER_H
|
#ifndef _SETTINGS_MANAGER_H
|
||||||
#define _SETTINGS_MANAGER_H
|
#define _SETTINGS_MANAGER_H
|
||||||
|
|
||||||
|
#include <typeinfo>
|
||||||
#include <common.h> // for wxString hash
|
#include <common.h> // for wxString hash
|
||||||
#include <settings/color_settings.h>
|
#include <settings/color_settings.h>
|
||||||
|
|
||||||
|
@ -85,7 +86,11 @@ public:
|
||||||
template<typename AppSettings>
|
template<typename AppSettings>
|
||||||
AppSettings* GetAppSettings( bool aLoadNow = true )
|
AppSettings* GetAppSettings( bool aLoadNow = true )
|
||||||
{
|
{
|
||||||
static AppSettings* ret = nullptr;
|
AppSettings* ret = nullptr;
|
||||||
|
size_t typeHash = typeid( AppSettings ).hash_code();
|
||||||
|
|
||||||
|
if( m_app_settings_cache.count( typeHash ) )
|
||||||
|
ret = dynamic_cast<AppSettings*>( m_app_settings_cache.at( typeHash ) );
|
||||||
|
|
||||||
if( ret )
|
if( ret )
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -113,6 +118,8 @@ public:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_app_settings_cache[typeHash] = ret;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,6 +402,9 @@ private:
|
||||||
|
|
||||||
std::unordered_map<wxString, COLOR_SETTINGS*> m_color_settings;
|
std::unordered_map<wxString, COLOR_SETTINGS*> m_color_settings;
|
||||||
|
|
||||||
|
/// Cache for app settings
|
||||||
|
std::unordered_map<size_t, JSON_SETTINGS*> m_app_settings_cache;
|
||||||
|
|
||||||
// Convenience shortcut
|
// Convenience shortcut
|
||||||
COMMON_SETTINGS* m_common_settings;
|
COMMON_SETTINGS* m_common_settings;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue