From 142781dae769963c02a9ae8c6fbb16bb8957e424 Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 9 Jul 2023 01:23:46 +0100 Subject: [PATCH 1/8] actually expose used ram properly. --- indra/newview/fsdata.cpp | 2 +- indra/newview/skins/default/xui/en/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/fsdata.cpp b/indra/newview/fsdata.cpp index d99f6363aa..484cb66130 100644 --- a/indra/newview/fsdata.cpp +++ b/indra/newview/fsdata.cpp @@ -1025,7 +1025,7 @@ LLSD FSData::getSystemInfo() sysinfo1 += llformat("%s\n\n", info["SERVER_VERSION"].asString().c_str()); sysinfo1 += llformat("CPU: %s\n", info["CPU"].asString().c_str()); - sysinfo1 += llformat("Memory: %d MB\n", info["MEMORY_MB"].asInteger()); + sysinfo1 += llformat("Memory: %d MB (Used: %d MB)\n", info["MEMORY_MB"].asInteger(), info["USED_RAM"].asInteger()); sysinfo1 += llformat("OS: %s\n", info["OS_VERSION"].asString().c_str()); sysinfo1 += llformat("Graphics Card Vendor: %s\n", info["GRAPHICS_CARD_VENDOR"].asString().c_str()); sysinfo1 += llformat("Graphics Card: %s\n", info["GRAPHICS_CARD"].asString().c_str()); diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 928daf17f6..33158dc2de 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -50,7 +50,7 @@ You are in [REGION] and this info sometimes gets sent to support. --> CPU: [CPU] -Memory: [MEMORY_MB] MB +Memory: [MEMORY_MB] MB (Used: [USED_RAM] MB) Concurrency: [CONCURRENCY] OS Version: [OS_VERSION] Graphics Card Vendor: [GRAPHICS_CARD_VENDOR] From dc206c83fcde842b1dfeded8705ae77e6fdab43f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 9 Jul 2023 13:12:08 +0200 Subject: [PATCH 2/8] Update German translation --- indra/newview/skins/default/xui/de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index b10301447a..4dea831a54 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -52,7 +52,7 @@ SLURL: <nolink>[SLURL]</nolink> CPU: [CPU] -Speicher: [MEMORY_MB] MB +Speicher: [MEMORY_MB] MB (Verwendet: [USED_RAM] MB) Parallelität: [CONCURRENCY] Betriebssystemversion: [OS_VERSION] Grafikkartenhersteller: [GRAPHICS_CARD_VENDOR] From cbefcf6004d7ba87f45b808464f7197f124c7adf Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 9 Jul 2023 18:19:15 +0100 Subject: [PATCH 3/8] FIRE-32905 - Allow a larger range of fps for limit As 144 Hz is very common and 240 and even 360Hz are feasible it makes no sense to limit this at 120. I have made the upper limit 360 for now. At some point no doubt this will not be good enough but we may need to review the limiting code at that point as it will be increasingly inaccurate given the use of millisecond sleep --- .../skins/default/xui/en/panel_preferences_graphics1.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 0d8d6e2b14..26aa3becb5 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -1309,7 +1309,7 @@ label="FPS:" label_width="30" layout="topleft" - max_val="120" + max_val="360" min_val="15" name="MaxFPS" left_delta="240" From 2ab51339b13cea3119badbc781879fdd486246a2 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Sun, 9 Jul 2023 23:17:07 +0200 Subject: [PATCH 4/8] FIRE-33074 French translation update, by Laurent Bechir - as well as updating all remaining languages ("used RAM") --- indra/newview/skins/default/xui/az/strings.xml | 2 +- indra/newview/skins/default/xui/es/strings.xml | 3 ++- indra/newview/skins/default/xui/fr/strings.xml | 3 ++- indra/newview/skins/default/xui/it/strings.xml | 2 +- indra/newview/skins/default/xui/pl/strings.xml | 2 +- indra/newview/skins/default/xui/pt/strings.xml | 3 ++- indra/newview/skins/default/xui/ru/strings.xml | 2 +- indra/newview/skins/default/xui/tr/strings.xml | 3 ++- indra/newview/skins/default/xui/zh/strings.xml | 3 ++- 9 files changed, 14 insertions(+), 9 deletions(-) diff --git a/indra/newview/skins/default/xui/az/strings.xml b/indra/newview/skins/default/xui/az/strings.xml index 08a5b5e6a4..52447aef6d 100644 --- a/indra/newview/skins/default/xui/az/strings.xml +++ b/indra/newview/skins/default/xui/az/strings.xml @@ -52,7 +52,7 @@ Siz [REGION] regionundasınız Prosesor: [CPU] -RAM: [MEMORY_MB] MB +RAM: [MEMORY_MB] MB (İstifadə olunmuş yaddaş: [USED_RAM] MB) Şəkilləri dekodlaşdırma threadləri: [CONCURRENCY] OS versiyası: [OS_VERSION] Grafik kartının istehsalçısı: [GRAPHICS_CARD_VENDOR] diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index f12e1004f5..50671bba7d 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -49,7 +49,8 @@ SLURL: <nolink>[SLURL]</nolink> CPU: [CPU] -Memoria: [MEMORY_MB] MB +Memoria: [MEMORY_MB] MB (Memoria usada: [USED_RAM] MB) +Concurrency: [CONCURRENCY] Versión del Sistema Operativo: [OS_VERSION] Fabricante de la tarjeta gráfica: [GRAPHICS_CARD_VENDOR] Tarjeta gráfica: [GRAPHICS_CARD] diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 92102fbcfb..d18bd467c3 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -49,7 +49,8 @@ Vous êtes à [REGION] CPU : [CPU] -Mémoire : [MEMORY_MB] Mo +Mémoire : [MEMORY_MB] Mo (Utilisée : [USED_RAM] Mo) +Concurrence: [CONCURRENCY] Version OS : [OS_VERSION] Distributeur de cartes graphiques : [GRAPHICS_CARD_VENDOR] Carte graphique : [GRAPHICS_CARD] diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index f1cffee461..64e83cf0ee 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -41,7 +41,7 @@ SLURL: <nolink>[SLURL]</nolink> Processore (CPU): [CPU] -Memoria (Memory): [MEMORY_MB] MB +Memoria (Memory): [MEMORY_MB] MB (Memoria utilizzata: [USED_RAM] MB) Concurrency: [CONCURRENCY] Versione SO (OS Version): [OS_VERSION] Produttore scheda grafica (Graphics Card Vendor): [GRAPHICS_CARD_VENDOR] diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index bd8407958f..575257fac2 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -41,7 +41,7 @@ Położenie: [REGION] Procesor (CPU): [CPU] -Pamięć (Memory): [MEMORY_MB] MB +Pamięć (Memory): [MEMORY_MB] MB (w użyciu: [USED_RAM] MB) Wątki dekodowania obrazów (Concurrency): [CONCURRENCY] System operacyjny (OS Version): [OS_VERSION] Dostawca karty graficznej (Graphics Card Vendor): [GRAPHICS_CARD_VENDOR] diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 339f08788f..6d1192ec7a 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -41,7 +41,8 @@ SLURL: <nolink>[SLURL]</nolink> CPU: [CPU] -Memória: [MEMORY_MB] MBs +Memória: [MEMORY_MB] MBs (Memória usada: [USED_RAM] MBs) +Concurrency: [CONCURRENCY] Versão OS: [OS_VERSION] Placa de vídeo: [GRAPHICS_CARD_VENDOR] Placa gráfica: [GRAPHICS_CARD] diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index 3e62e731d8..fc178ecab0 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -61,7 +61,7 @@ SLURL: <nolink>[SLURL]</nolink> Процессор: [CPU] -Память RAM: [MEMORY_MB] МБ +Память RAM: [MEMORY_MB] МБ (Использовал: [USED_RAM] MB) Потоки декодирования изображений: [CONCURRENCY] Версия ОС: [OS_VERSION] Производитель видеокарты: [GRAPHICS_CARD_VENDOR] diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index 775611a1aa..4a3575597b 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -53,7 +53,8 @@ SLURL: <nolink>[SLURL]</nolink> CPU: [CPU] -Bellek: [MEMORY_MB] MB +Bellek: [MEMORY_MB] MB (Used: [USED_RAM] MB) +Concurrency: [CONCURRENCY] İşl. Sis. Sürümü: [OS_VERSION] Grafik Kartı Üreticisi: [GRAPHICS_CARD_VENDOR] Grafik Kartı: [GRAPHICS_CARD] diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index bde712a8b1..7ff5d55bcb 100644 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -53,7 +53,8 @@ CPU:[CPU] -記憶體:[MEMORY_MB] MB +記憶體:[MEMORY_MB] MB (Used: [USED_RAM] MB) +Concurrency: [CONCURRENCY] 作業系統版本:[OS_VERSION] 顯示卡供應商:[GRAPHICS_CARD_VENDOR] 顯示卡:[GRAPHICS_CARD] From b92f9490857ba2be40e601a3196d64555560a2fb Mon Sep 17 00:00:00 2001 From: Beq Date: Mon, 10 Jul 2023 00:24:54 +0100 Subject: [PATCH 5/8] remove commented out old cruft from requirements.txt --- requirements.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 5ed33066fd..1c8fa7fcf0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,2 @@ llbase>=1.2.11 -autobuild>=3.9.1 -# git+https://github.com/FirestormViewer/autobuild-3.0#egg=autobuild -# git+https://github.com/Nicky-D/autobuild@main_nd#egg=autobuild \ No newline at end of file +autobuild>=3.9.1 \ No newline at end of file From 6eb96153e65f7a7126a1921baac23f56470f261e Mon Sep 17 00:00:00 2001 From: Beq Date: Mon, 10 Jul 2023 01:35:01 +0100 Subject: [PATCH 6/8] FIRE-32688 - Area Search Improvements Part 1: These changes prevent some of the aggressive culling that has prevented area search from working. They work best in combination with changes to the aggressive culling that better fit the viewer's memory footprint. These changes are committed separately to make it easier to change them --- indra/newview/fsareasearch.cpp | 2 ++ indra/newview/llviewerregion.cpp | 1 + indra/newview/llviewerregion.h | 1 + indra/newview/llvocache.cpp | 11 +++++++++-- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/indra/newview/fsareasearch.cpp b/indra/newview/fsareasearch.cpp index b3e107eb5e..b81a20454f 100644 --- a/indra/newview/fsareasearch.cpp +++ b/indra/newview/fsareasearch.cpp @@ -173,6 +173,7 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) : mRequestNeedsSent(false), mRlvBehaviorCallbackConnection() { + LLViewerRegion::sFSAreaSearchActive = true; mFactoryMap["area_search_list_panel"] = LLCallbackMap(createPanelList, this); mFactoryMap["area_search_find_panel"] = LLCallbackMap(createPanelFind, this); mFactoryMap["area_search_filter_panel"] = LLCallbackMap(createPanelFilter, this); @@ -188,6 +189,7 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) : FSAreaSearch::~FSAreaSearch() { + LLViewerRegion::sFSAreaSearchActive = false; if (!gIdleCallbacks.deleteFunction(idle, this)) { LL_WARNS("FSAreaSearch") << "FSAreaSearch::~FSAreaSearch() failed to delete callback" << LL_ENDL; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index a719294007..a7915bf092 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -106,6 +106,7 @@ const S32 MAX_CAP_REQUEST_ATTEMPTS = 30; const U32 DEFAULT_MAX_REGION_WIDE_PRIM_COUNT = 15000; +BOOL LLViewerRegion::sFSAreaSearchActive = FALSE; BOOL LLViewerRegion::sVOCacheCullingEnabled = FALSE; S32 LLViewerRegion::sLastCameraUpdated = 0; S32 LLViewerRegion::sNewObjectCreationThrottle = -1; diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 312b792b4f..2e53d9bef9 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -478,6 +478,7 @@ public: std::vector mMapAvatars; std::vector mMapAvatarIDs; + static BOOL sFSAreaSearchActive; // FIRE-32688 Area Search improvements static BOOL sVOCacheCullingEnabled; //vo cache culling enabled or not. static S32 sLastCameraUpdated; diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index 2a2bbd09a9..be7b2b1453 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -432,6 +432,7 @@ F32 LLVOCacheEntry::getSquaredPixelThreshold(bool is_front) bool LLVOCacheEntry::isAnyVisible(const LLVector4a& camera_origin, const LLVector4a& local_camera_origin, F32 dist_threshold) { + if( LLViewerRegion::sFSAreaSearchActive ) { return true; } // FIRE-32688 Area Search improvements LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)getGroup(); if(!group) { @@ -928,7 +929,10 @@ S32 LLVOCachePartition::cull(LLCamera &camera, bool do_occlusion) //process back objects selection selectBackObjects(camera, LLVOCacheEntry::getSquaredPixelThreshold(mFrontCull), - do_occlusion && use_object_cache_occlusion); + // FIRE-32688 Area Search improvements + // do_occlusion && use_object_cache_occlusion); + do_occlusion && use_object_cache_occlusion && !LLViewerRegion::sFSAreaSearchActive); + // return 0; //nothing changed, reduce frequency of culling } } @@ -942,7 +946,10 @@ S32 LLVOCachePartition::cull(LLCamera &camera, bool do_occlusion) camera.calcRegionFrustumPlanes(region_agent, gAgentCamera.mDrawDistance); mFrontCull = TRUE; - LLVOCacheOctreeCull culler(&camera, mRegionp, region_agent, do_occlusion && use_object_cache_occlusion, + // FIRE-32688 Area Search improvements + // LLVOCacheOctreeCull culler(&camera, mRegionp, region_agent, do_occlusion && use_object_cache_occlusion, + LLVOCacheOctreeCull culler(&camera, mRegionp, region_agent, do_occlusion && use_object_cache_occlusion && !LLViewerRegion::sFSAreaSearchActive, + // LLVOCacheEntry::getSquaredPixelThreshold(mFrontCull), this); culler.traverse(mOctree); From 7f2e0b3566fe7c76bfb022a4de72503a86d8b73f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 12 Jul 2023 10:04:40 +0200 Subject: [PATCH 7/8] Ewwww! Fake booleans... --- indra/newview/llviewerregion.cpp | 2 +- indra/newview/llviewerregion.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index a7915bf092..5fd65c3405 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -106,7 +106,7 @@ const S32 MAX_CAP_REQUEST_ATTEMPTS = 30; const U32 DEFAULT_MAX_REGION_WIDE_PRIM_COUNT = 15000; -BOOL LLViewerRegion::sFSAreaSearchActive = FALSE; +bool LLViewerRegion::sFSAreaSearchActive = false; // FIRE-32688 Area Search improvements BOOL LLViewerRegion::sVOCacheCullingEnabled = FALSE; S32 LLViewerRegion::sLastCameraUpdated = 0; S32 LLViewerRegion::sNewObjectCreationThrottle = -1; diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 2e53d9bef9..786b530ab9 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -478,7 +478,7 @@ public: std::vector mMapAvatars; std::vector mMapAvatarIDs; - static BOOL sFSAreaSearchActive; // FIRE-32688 Area Search improvements + static bool sFSAreaSearchActive; // FIRE-32688 Area Search improvements static BOOL sVOCacheCullingEnabled; //vo cache culling enabled or not. static S32 sLastCameraUpdated; From 7a77145cd3a3a98e370326726e2f193e60887808 Mon Sep 17 00:00:00 2001 From: Zi Ree Date: Mon, 17 Jul 2023 17:21:13 +0200 Subject: [PATCH 8/8] FIRE-19959: Fix unindent after } when a previous line had a word wrap --- indra/llui/lltexteditor.cpp | 5 ++++- .../skins/default/textures/icons/radar_b.png | Bin 0 -> 7900 bytes 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 indra/newview/skins/default/textures/icons/radar_b.png diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index c208c0006b..b03e53a643 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -1915,7 +1915,10 @@ void LLTextEditor::unindentLineBeforeCloseBrace() LLWString text = getWText(); if( ' ' == text[ mCursorPos - 1 ] ) { - S32 line = getLineNumFromDocIndex(mCursorPos, false); + // FIRE-19959: Fix unindent after } when a previous line had a word wrap + //S32 line = getLineNumFromDocIndex(mCursorPos, false); + S32 line = getLineNumFromDocIndex(mCursorPos, true); + // S32 line_start = getLineStart(line); // Jump over spaces in the current line diff --git a/indra/newview/skins/default/textures/icons/radar_b.png b/indra/newview/skins/default/textures/icons/radar_b.png new file mode 100644 index 0000000000000000000000000000000000000000..df91915f760bdc5191116a37ca0d2b8cc93f3855 GIT binary patch literal 7900 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 literal 0 HcmV?d00001