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 + + Comment + Internal; Suppresses the 'too many outfits' warning (does not persist across sessions) + HideFromEditor + 1 + Persist + 0 + Type + Boolean + Value + 0 + 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.