SL-13119 Made control settings cached and fixed potential filtering issue

meow-7.2.2
Andrey Kleshchev 2020-04-30 16:28:40 +03:00
parent d70b749101
commit 59433e3132
5 changed files with 22 additions and 12 deletions

View File

@ -342,7 +342,9 @@ static LLTrace::BlockTimerStatHandle FTM_FILTER("Filter Folder View");
void LLFolderView::filter( LLFolderViewFilter& filter )
{
LL_RECORD_BLOCK_TIME(FTM_FILTER);
filter.resetTime(llclamp(LLUI::getInstance()->mSettingGroups["config"]->getS32(mParentPanel.get()->getVisible() ? "FilterItemsMaxTimePerFrameVisible" : "FilterItemsMaxTimePerFrameUnvisible"), 1, 100));
static LLCachedControl<S32> filter_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10);
static LLCachedControl<S32> filter_hidden(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameUnvisible", 1);
filter.resetTime(llclamp(mParentPanel.get()->getVisible() ? filter_visible() : filter_hidden(), 1, 100));
// Note: we filter the model, not the view
getViewModelItem()->filter(filter);

View File

@ -183,10 +183,13 @@ LLFolderViewItem::~LLFolderViewItem()
BOOL LLFolderViewItem::postBuild()
{
LLFolderViewModelItem& vmi = *getViewModelItem();
mLabel = vmi.getDisplayName(); // slightly expensive, but only first time
// getDisplayName() is slightly expensive and requires a filter reset
mLabel = vmi.getDisplayName();
setToolTip(vmi.getName());
// Dirty the filter flag of the model from the view (CHUI-849)
vmi.dirtyFilter();
mLabelNeedsRefresh = true;
mLabelWidthDirty = true;
return TRUE;
@ -288,10 +291,6 @@ void LLFolderViewItem::refresh()
{
LLFolderViewModelItem& vmi = *getViewModelItem();
// getDisplayName() is slightly expensive on first run
mLabel = vmi.getDisplayName();
setToolTip(vmi.getName());
// icons are slightly expensive to get, can be optimized
// see LLInventoryIcon::getIcon()
mIcon = vmi.getIcon();
@ -306,8 +305,6 @@ void LLFolderViewItem::refresh()
mLabelSuffix = vmi.getLabelSuffix();
}
// Dirty the filter flag of the model from the view (CHUI-849)
vmi.dirtyFilter();
mLabelWidthDirty = true;
mLabelNeedsRefresh = false;
}
@ -362,6 +359,8 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height )
{
if (mLabelNeedsRefresh)
{
// Expensive. But despite refreshing label,
// it is purely visual, so it is fine to do at our laisure
refresh();
}
mLabelWidth = getLabelXPos() + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + mLabelPaddingRight;

View File

@ -268,7 +268,7 @@ public:
virtual BOOL isPotentiallyVisible(S32 filter_generation = -1);
// refresh information from the object being viewed.
// refreshes, label, sufixes and sets icons. Expensive!
// refreshes sufixes and sets icons. Expensive!
virtual void refresh();
// LLView functionality

View File

@ -48,7 +48,8 @@ std::string LLFolderViewModelCommon::getStatusText()
void LLFolderViewModelCommon::filter()
{
getFilter().resetTime(llclamp(LLUI::getInstance()->mSettingGroups["config"]->getS32("FilterItemsMaxTimePerFrameVisible"), 1, 100));
static LLCachedControl<S32> filter_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10);
getFilter().resetTime(llclamp(filter_visible(), 1, 100));
mFolderView->getViewModelItem()->filter(getFilter());
}

View File

@ -430,7 +430,11 @@ void LLConversationViewSession::refresh()
// Refresh the session view from its model data
LLConversationItem* vmi = dynamic_cast<LLConversationItem*>(getViewModelItem());
vmi->resetRefresh();
mLabel = vmi->getDisplayName(); // needs a filter reset
setToolTip(vmi->getName());
vmi->dirtyFilter();
if (mSessionTitle)
{
mSessionTitle->setText(vmi->getDisplayName());
@ -621,7 +625,11 @@ void LLConversationViewParticipant::refresh()
// *TODO: We should also do something with vmi->isModerator() to echo that state in the UI somewhat
mSpeakingIndicator->setIsModeratorMuted(participant_model->isModeratorMuted());
mLabel = participant_model->getDisplayName(); // needs a filter reset
setToolTip(participant_model->getName());
participant_model->dirtyFilter();
// Do the regular upstream refresh
LLFolderViewItem::refresh();
}