diff --git a/.gitignore b/.gitignore
index 5acd04bb91..9c08783dc2 100755
--- a/.gitignore
+++ b/.gitignore
@@ -111,8 +111,10 @@ indra/newview/pilot.xml
# Firestorm additions
indra/newview/exoflickrkeys.h
indra/newview/fsdiscordkey.h
+indra/tools/vstool/obj/*/*.cache
my_autobuild.xml
.vscode
+.vs
*.srctrlbm
*.srctrldb
*.srctrlprj
diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp
index 1fbed9d6f1..5ffdd5b2aa 100644
--- a/indra/llimagej2coj/llimagej2coj.cpp
+++ b/indra/llimagej2coj/llimagej2coj.cpp
@@ -557,11 +557,6 @@ public:
}
- if (!opj_setup_encoder(encoder, ¶meters, image))
- {
- return false;
- }
-
U32 width_tiles = (rawImageIn.getWidth() >> 6);
U32 height_tiles = (rawImageIn.getHeight() >> 6);
@@ -575,6 +570,23 @@ public:
height_tiles = 1;
}
+ if (width_tiles == 1 || height_tiles == 1)
+ {
+ // Images with either dimension less than 32 need less number of resolutions otherwise they error
+ int min_dim = rawImageIn.getWidth() < rawImageIn.getHeight() ? rawImageIn.getWidth() : rawImageIn.getHeight();
+ int max_res = 1 + (int)floor(log2(min_dim));
+ parameters.numresolution = max_res;
+ }
+
+ if (!opj_setup_encoder(encoder, ¶meters, image))
+ {
+ return false;
+ }
+
+ opj_set_info_handler(encoder, opj_info, this);
+ opj_set_warning_handler(encoder, opj_warn, this);
+ opj_set_error_handler(encoder, opj_error, this);
+
U32 tile_count = width_tiles * height_tiles;
U32 data_size_guess = tile_count * TILE_SIZE;
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index 58266fc2d8..495ba2f40f 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -316,11 +316,7 @@ void LLAccordionCtrl::ctrlShiftVertical(LLView* panel, S32 delta)
//---------------------------------------------------------------------------------
-// If adding a lot of controls rapidly, calling arrange will cost a lot of times, as it's running through n! controls.
-// In that case we can avvoid calling arrange over and over and just call it once when finished.
-//void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
-void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab, bool aArrange)
-//
+void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
{
if (!accordion_tab)
return;
@@ -329,14 +325,7 @@ void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab, bool
mAccordionTabs.push_back(accordion_tab);
accordion_tab->setDropDownStateChangedCallback( boost::bind(&LLAccordionCtrl::onCollapseCtrlCloseOpen, this, (S16)(mAccordionTabs.size() - 1)) );
-
- // If adding a lot of controls rapidly, calling arrange will cost a lot of times, as it's running through n! controls.
- // In that case we can avvoid calling arrange over and over and just call it once when finished.
-
- // arrange();
- if( aArrange )
- arrange();
- //
+ arrange();
}
void LLAccordionCtrl::removeCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h
index c4d7c276e1..43a33a2b3c 100644
--- a/indra/llui/llaccordionctrl.h
+++ b/indra/llui/llaccordionctrl.h
@@ -103,11 +103,7 @@ public:
// Call reshape after changing splitter's size
virtual void reshape(S32 width, S32 height, bool called_from_parent = true);
- // If adding a lot of controls rapidly, calling arrange will cost a lot of times, as it's running through n! controls.
- // In that case we can avvoid calling arrange over and over and just call it once when finished.
- // void addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab);
- void addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab, bool aArrange = true /*Standard is true as to not mess with old code all over the place*/ );
- //
+ void addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab);
void removeCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab);
void arrange();
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 93e9d3626b..f22d2b5b84 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -27004,5 +27004,18 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
0
+ FSLargeOutfitsWarningInThisSession
+
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 9b35bf425d..f81bc78ed0 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -220,11 +220,7 @@ void LLOutfitsList::updateAddedCategory(LLUUID cat_id)
// *TODO: LLUICtrlFactory::defaultBuilder does not use "display_children" from xml. Should be investigated.
tab->setDisplayChildren(false);
-
- // Calling this when there's a lot of outfits causes horrible perfomance and disconnects, due to arrange eating so many cpu cycles.
- //mAccordion->addCollapsibleCtrl(tab);
- mAccordion->addCollapsibleCtrl(tab, false);
- //
+ mAccordion->addCollapsibleCtrl(tab);
// Start observing the new outfit category.
LLWearableItemsList* list = tab->getChild("wearable_items_list");
@@ -1120,8 +1116,21 @@ void LLOutfitListBase::refreshList(const LLUUID& category_id)
}
// FIRE-6958/VWR-2862; Handle large amounts of outfits, write a least a warning into the logs.
- if (mRefreshListState.Added.size() > 128)
- LL_WARNS() << "Large amount of outfits found: " << mRefreshListState.Added.size() << " this may cause hangs and disconnects" << LL_ENDL;
+ S32 currentOutfitsAmount = (S32)mRefreshListState.Added.size();
+ constexpr S32 maxSuggestedOutfits = 200;
+ if (currentOutfitsAmount > maxSuggestedOutfits)
+ {
+ LL_WARNS() << "Large amount of outfits found: " << currentOutfitsAmount << " this may cause hangs and disconnects" << LL_ENDL;
+ static LLCachedControl fsLargeOutfitsWarningInThisSession(gSavedSettings, "FSLargeOutfitsWarningInThisSession");
+ if (!fsLargeOutfitsWarningInThisSession)
+ {
+ gSavedSettings.setBOOL("FSLargeOutfitsWarningInThisSession", true);
+ LLSD args;
+ args["AMOUNT"] = currentOutfitsAmount;
+ args["MAX"] = maxSuggestedOutfits;
+ LLNotificationsUtil::add("FSLargeOutfitsWarningInThisSession", args);
+ }
+ }
//
// FIRE-12939: Add outfit count to outfits list
@@ -1157,7 +1166,18 @@ void LLOutfitListBase::onIdleRefreshList()
return;
}
- const F64 MAX_TIME = 0.05f;
+ // Scale MAX_TIME with FPS to avoid overloading the viewer with function calls at low frame rates
+ // const F64 MAX_TIME = 0.05f;
+ F64 MAX_TIME = 0.05f;
+ constexpr F64 min_time = 0.001f;
+ constexpr F64 threshold_fps = 30.0;
+ const auto current_fps = LLTrace::get_frame_recording().getPeriodMedianPerSec(LLStatViewer::FPS, 1);
+ if (current_fps < threshold_fps)
+ {
+ MAX_TIME = min_time + (current_fps / threshold_fps) * (MAX_TIME - min_time);
+ }
+ //
+
F64 curent_time = LLTimer::getTotalSeconds();
const F64 end_time = curent_time + MAX_TIME;
@@ -1174,9 +1194,6 @@ void LLOutfitListBase::onIdleRefreshList()
mRefreshListState.Added.clear();
mRefreshListState.AddedIterator = mRefreshListState.Added.end();
- // We called mAccordion->addCollapsibleCtrl with false as second paramter and did not let it arrange itself each time. Do this here after all is said and done.
- arrange();
-
// Handle removed tabs.
while (mRefreshListState.RemovedIterator < mRefreshListState.Removed.end())
{
@@ -1200,8 +1217,8 @@ void LLOutfitListBase::onIdleRefreshList()
// Links aren't supposed to be allowed here, check only cats
if (cat)
- {
- std::string name = cat->getName();
+ {
+ std::string name = cat->getName();
updateChangedCategoryName(cat, name);
}
diff --git a/indra/newview/skins/ansastorm/xui/ja/floater_camera.xml b/indra/newview/skins/ansastorm/xui/ja/floater_camera.xml
index 9f078e0221..150e59e293 100644
--- a/indra/newview/skins/ansastorm/xui/ja/floater_camera.xml
+++ b/indra/newview/skins/ansastorm/xui/ja/floater_camera.xml
@@ -29,6 +29,7 @@
+
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index 3897f750b2..0482feafa0 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -5900,6 +5900,10 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
Bestehende Pose „[POSE_NAME]“ überschreiben?
+
+ Eine große Anzahl an Outfits wurde erkannt: [AMOUNT]. Dies kann zu einem Blockieren des Viewers oder zu Verbindungsabbrüchen führen. Ziehen Sie eine Reduzierung der Outfits für eine bessere Performance in Betracht (unter [MAX]).
+
+
Login-Anfrage wurde von Primfeed abgelehnt.
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 7cdc26e0d8..af49165aeb 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -14775,6 +14775,18 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
yestext="Okay"/>
+
+
+ A large number of outfits were detected: [AMOUNT]. This may cause viewer hangs or disconnects. Consider reducing the number of outfits for better performance (below [MAX]).
+
+
+
+
-
+
幅:
diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml
index 326d6da209..b06b27137c 100644
--- a/indra/newview/skins/default/xui/ja/floater_camera.xml
+++ b/indra/newview/skins/default/xui/ja/floater_camera.xml
@@ -19,9 +19,10 @@
+
-
+
diff --git a/indra/newview/skins/default/xui/ja/floater_fs_camera_small.xml b/indra/newview/skins/default/xui/ja/floater_fs_camera_small.xml
index 9d81d1891d..f9d93435a2 100644
--- a/indra/newview/skins/default/xui/ja/floater_fs_camera_small.xml
+++ b/indra/newview/skins/default/xui/ja/floater_fs_camera_small.xml
@@ -39,31 +39,14 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/indra/newview/skins/default/xui/ja/floater_phototools_camera.xml b/indra/newview/skins/default/xui/ja/floater_phototools_camera.xml
index a412f823a1..14a0ad21b7 100644
--- a/indra/newview/skins/default/xui/ja/floater_phototools_camera.xml
+++ b/indra/newview/skins/default/xui/ja/floater_phototools_camera.xml
@@ -22,17 +22,22 @@
- 前面ビュー
+ 前方ビュー
- 側面ビュー
+ サイドビュー
- 背面ビュー
+ 後方ビュー
+
+
+
+
+ 三人称ビュー
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_move.xml b/indra/newview/skins/default/xui/ja/panel_preferences_move.xml
index cb0aab617c..0baeb81d86 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_move.xml
@@ -58,6 +58,7 @@
+
リージョンを越える移動の予告:
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 78de3a4f58..dc365b92fb 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -5583,7 +5583,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
- パーティクル源ビーコン(青)を表示しています。
+ パーティクル源のビーコン(青)を表示しています。
物理的オブジェクトのビーコン(緑)を表示しています。
@@ -5597,6 +5597,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
サウンドビーコン(黄)を表示しています。
+
+ リージョンのコーナー(黄)を表示しています。
+
メディアビーコン(白)を表示しています。
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 358aef673d..8d6a835f10 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -5518,6 +5518,10 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
Nadpisać istniejącą pozę “[POSE_NAME]”?
+
+ Została wykryta duża liczba strojów: [AMOUNT]. Może to powodować zawieszanie się lub rozłączanie przeglądarki. Rozważ zmniejszenie liczby strojów dla lepszej wydajności (poniżej [MAX]).
+
+
Żądanie logowania odrzucone przez Primfeed.