Optimized HelpComponent updates by caching the icons

This commit is contained in:
Leon Styhre 2025-03-14 22:50:00 +01:00
parent d814431496
commit 76423107ad
7 changed files with 36 additions and 3 deletions

View file

@ -197,6 +197,7 @@ void GuiMenu::openUIOptions()
s->setNeedsReloading();
s->setNeedsGoToStart();
s->setNeedsCollectionsUpdate();
s->setNeedsClearHelpPromptsImageCache();
s->setInvalidateCachedBackground();
}
});
@ -211,6 +212,7 @@ void GuiMenu::openUIOptions()
Settings::getInstance()->setString("ThemeVariant", themeVariant->getSelected());
s->setNeedsSaving();
s->setNeedsReloading();
s->setNeedsClearHelpPromptsImageCache();
s->setInvalidateCachedBackground();
}
});
@ -271,6 +273,7 @@ void GuiMenu::openUIOptions()
Settings::getInstance()->setString("ThemeColorScheme", themeColorScheme->getSelected());
s->setNeedsSaving();
s->setNeedsReloading();
s->setNeedsClearHelpPromptsImageCache();
s->setInvalidateCachedBackground();
}
});
@ -323,6 +326,7 @@ void GuiMenu::openUIOptions()
Settings::getInstance()->setString("ThemeFontSize", themeFontSize->getSelected());
s->setNeedsSaving();
s->setNeedsReloading();
s->setNeedsClearHelpPromptsImageCache();
s->setInvalidateCachedBackground();
}
});
@ -366,6 +370,7 @@ void GuiMenu::openUIOptions()
Settings::getInstance()->setString("ThemeAspectRatio", themeAspectRatio->getSelected());
s->setNeedsSaving();
s->setNeedsReloading();
s->setNeedsClearHelpPromptsImageCache();
s->setInvalidateCachedBackground();
}
});
@ -524,6 +529,7 @@ void GuiMenu::openUIOptions()
Settings::getInstance()->setString("ThemeLanguage", themeLanguage->getSelected());
s->setNeedsSaving();
s->setNeedsReloading();
s->setNeedsClearHelpPromptsImageCache();
s->setInvalidateCachedBackground();
}
});
@ -601,6 +607,7 @@ void GuiMenu::openUIOptions()
s->setNeedsRescanROMDirectory();
s->setNeedsReloading();
s->setNeedsCollectionsUpdate();
s->setNeedsClearHelpPromptsImageCache();
}
});
@ -1356,6 +1363,7 @@ void GuiMenu::openInputDeviceOptions()
Settings::getInstance()->setString("InputControllerType",
inputControllerType->getSelected());
s->setNeedsSaving();
s->setNeedsClearHelpPromptsImageCache();
}
});
@ -2395,6 +2403,7 @@ void GuiMenu::openThemeDownloader(GuiSettings* settings)
}
else {
openUIOptions();
mWindow->clearHelpPromptsImageCache();
mWindow->invalidateCachedBackground();
}
};

View file

@ -38,6 +38,7 @@ GuiSettings::GuiSettings(std::string title)
, mNeedsGoToSystem {false}
, mNeedsGoToGroupedCollections {false}
, mNeedsUpdateStatusComponents {false}
, mNeedsClearHelpPromptsImageCache {false}
, mInvalidateCachedBackground {false}
{
addChild(&mMenu);
@ -154,6 +155,9 @@ void GuiSettings::save()
mWindow->updateSystemStatusComponents();
}
if (mNeedsClearHelpPromptsImageCache)
mWindow->clearHelpPromptsImageCache();
if (mNeedsCollectionsUpdate) {
auto state = ViewController::getInstance()->getState();
// If we're in any view other than the grouped custom collections, always jump to the

View file

@ -59,6 +59,7 @@ public:
};
void setNeedsGoToGroupedCollections() { mNeedsGoToGroupedCollections = true; }
void setNeedsUpdateStatusComponents() { mNeedsUpdateStatusComponents = true; }
void setNeedsClearHelpPromptsImageCache() { mNeedsClearHelpPromptsImageCache = true; }
void setNeedsCloseMenu(std::function<void()> closeFunction)
{
mCloseMenuFunction = closeFunction;
@ -86,6 +87,7 @@ private:
bool mNeedsGoToSystem;
bool mNeedsGoToGroupedCollections;
bool mNeedsUpdateStatusComponents;
bool mNeedsClearHelpPromptsImageCache;
bool mInvalidateCachedBackground;
};

View file

@ -217,6 +217,7 @@ void Window::deinit()
(*it)->onHide();
mPostprocessedBackground.reset();
sHelpPromptsImageCache.clear();
mHelp.reset();
if (mHelpComponents != nullptr) {
mHelpComponents->clear();

View file

@ -123,6 +123,12 @@ public:
void renderHelpPromptsEarly(); // Used to render HelpPrompts before a fade.
void setHelpPrompts(const std::vector<HelpPrompt>& prompts);
std::map<std::string, std::shared_ptr<ImageComponent>>& getHelpPromptsImageCache()
{
return sHelpPromptsImageCache;
}
void clearHelpPromptsImageCache() { sHelpPromptsImageCache.clear(); }
// GuiInfoPopup notifications.
void queueInfoPopup(const std::string& message, const int& duration)
{
@ -210,6 +216,8 @@ private:
unsigned int color;
};
static inline std::map<std::string, std::shared_ptr<ImageComponent>> sHelpPromptsImageCache;
Renderer* mRenderer;
std::vector<std::unique_ptr<HelpComponent>>* mHelpComponents;
std::unique_ptr<HelpComponent> mHelp;

View file

@ -106,7 +106,6 @@ void ComponentGrid::setEntry(const std::shared_ptr<GuiComponent>& comp,
{
assert(pos.x >= 0 && pos.x < mGridSize.x && pos.y >= 0 && pos.y < mGridSize.y);
assert(comp != nullptr);
assert(comp->getParent() == nullptr);
comp->setAutoCalcExtent(autoCalcExtent);
GridEntry entry {pos, size, comp, canFocus, resize, updateType, border};

View file

@ -611,8 +611,18 @@ void HelpComponent::updateGrid()
std::find(mEntries.cbegin(), mEntries.cend(), (*it).first) == mEntries.cend())
continue;
std::shared_ptr<ImageComponent> icon {std::make_shared<ImageComponent>(false, true)};
icon->setImage(mIconPathMap[it->first]);
std::shared_ptr<ImageComponent> icon;
auto& imageCache = mWindow->getHelpPromptsImageCache();
if (imageCache.find(mIconPathMap[it->first]) != imageCache.end()) {
icon = imageCache[mIconPathMap[it->first]];
}
else {
icon = std::make_shared<ImageComponent>(false, true);
icon->setImage(mIconPathMap[it->first]);
imageCache[mIconPathMap[it->first]] = icon;
}
icon->setColorShift(isDimmed ? mStyleIconColorDimmed : mStyleIconColor);
icon->setResize(0, height);
icon->setOpacity(isDimmed ? mStyleOpacityDimmed : mStyleOpacity);