Reduce UI draw stalls from LLSpellChecker singleton via simpleton

master
Rye Mutt 2024-08-13 18:39:57 -04:00
parent ad8dc13150
commit 2cff1e217b
4 changed files with 27 additions and 31 deletions

View File

@ -42,19 +42,13 @@ static const std::string DICT_FILE_USER = "user_dictionaries.xml";
LLSpellChecker::settings_change_signal_t LLSpellChecker::sSettingsChangeSignal;
LLSpellChecker::LLSpellChecker()
: mHunspell(NULL)
{
// Load initial dictionary information
refreshDictionaryMap();
}
LLSpellChecker::~LLSpellChecker()
{
delete mHunspell;
}
void LLSpellChecker::initSingleton()
{
// Load initial dictionary information
refreshDictionaryMap();
}
bool LLSpellChecker::checkSpelling(const std::string& word) const
@ -300,8 +294,7 @@ void LLSpellChecker::initHunspell(const std::string& dict_language)
{
if (mHunspell)
{
delete mHunspell;
mHunspell = NULL;
mHunspell.reset();
mDictLanguage.clear();
mDictFile.clear();
mIgnoreList.clear();
@ -322,11 +315,11 @@ void LLSpellChecker::initHunspell(const std::string& dict_language)
const std::string filename_dic = dict_entry["name"].asString() + ".dic";
if ( (gDirUtilp->fileExists(user_path + filename_aff)) && (gDirUtilp->fileExists(user_path + filename_dic)) )
{
mHunspell = new Hunspell((user_path + filename_aff).c_str(), (user_path + filename_dic).c_str());
mHunspell = std::make_unique<Hunspell>((user_path + filename_aff).c_str(), (user_path + filename_dic).c_str());
}
else if ( (gDirUtilp->fileExists(app_path + filename_aff)) && (gDirUtilp->fileExists(app_path + filename_dic)) )
{
mHunspell = new Hunspell((app_path + filename_aff).c_str(), (app_path + filename_dic).c_str());
mHunspell = std::make_unique<Hunspell>((app_path + filename_aff).c_str(), (app_path + filename_dic).c_str());
}
if (!mHunspell)
{

View File

@ -34,12 +34,12 @@
class Hunspell;
class LLSpellChecker : public LLSingleton<LLSpellChecker>
class LLSpellChecker : public LLSimpleton<LLSpellChecker>
{
LLSINGLETON(LLSpellChecker);
public:
LLSpellChecker();
~LLSpellChecker();
public:
void addToCustomDictionary(const std::string& word);
void addToIgnoreList(const std::string& word);
bool checkSpelling(const std::string& word) const;
@ -47,7 +47,6 @@ public:
protected:
void addToDictFile(const std::string& dict_path, const std::string& word);
void initHunspell(const std::string& dict_language);
void initSingleton() override;
public:
typedef std::list<std::string> dict_list_t;
@ -77,7 +76,7 @@ public:
static boost::signals2::connection setSettingsChangeCallback(const settings_change_signal_t::slot_type& cb);
protected:
Hunspell* mHunspell;
std::unique_ptr<Hunspell> mHunspell;
std::string mDictLanguage;
std::string mDictFile;
dict_list_t mDictSecondary;

View File

@ -54,6 +54,7 @@
#include "llmenubutton.h"
#include "llloadingindicator.h"
#include "llwindow.h"
#include "llspellcheck.h"
// for registration
#include "llfiltereditor.h"
@ -157,6 +158,7 @@ mRootView(NULL),
mHelpImpl(NULL)
{
LLRender2D::createInstance(image_provider);
LLSpellChecker::createInstance();
if ((get_ptr_in_map(mSettingGroups, std::string("config")) == NULL) ||
(get_ptr_in_map(mSettingGroups, std::string("floater")) == NULL) ||
@ -198,6 +200,7 @@ mHelpImpl(NULL)
LLUI::~LLUI()
{
LLSpellChecker::deleteSingleton();
LLRender2D::deleteSingleton();
}

View File

@ -806,6 +806,20 @@ bool LLAppViewer::init()
LLUIImageList::getInstance(),
ui_audio_callback,
deferred_ui_audio_callback);
if (gSavedSettings.getBOOL("SpellCheck"))
{
std::list<std::string> dict_list;
std::string dict_setting = gSavedSettings.getString("SpellCheckDictionary");
boost::split(dict_list, dict_setting, boost::is_any_of(std::string(",")));
if (!dict_list.empty())
{
LLSpellChecker::setUseSpellCheck(dict_list.front());
dict_list.pop_front();
LLSpellChecker::instance().setSecondaryDictionaries(dict_list);
}
}
LL_INFOS("InitInfo") << "UI initialized." << LL_ENDL ;
// NOW LLUI::getLanguage() should work. gDirUtilp must know the language
@ -1611,7 +1625,7 @@ bool LLAppViewer::doFrame()
{
LL_PROFILE_ZONE_NAMED_CATEGORY_APP("df gMeshRepo");
gMeshRepo.update() ;
gMeshRepo.update() ;
}
if(!total_work_pending) //pause texture fetching threads if nothing to process.
@ -2799,19 +2813,6 @@ bool LLAppViewer::initConfiguration()
gSavedSettings.getString("Language"));
}
if (gSavedSettings.getBOOL("SpellCheck"))
{
std::list<std::string> dict_list;
std::string dict_setting = gSavedSettings.getString("SpellCheckDictionary");
boost::split(dict_list, dict_setting, boost::is_any_of(std::string(",")));
if (!dict_list.empty())
{
LLSpellChecker::setUseSpellCheck(dict_list.front());
dict_list.pop_front();
LLSpellChecker::instance().setSecondaryDictionaries(dict_list);
}
}
if (gNonInteractive)
{
tempSetControl("AllowMultipleViewers", "true");