diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml index cdb0a069db..48cbc704de 100644 --- a/.github/workflows/build_viewer.yml +++ b/.github/workflows/build_viewer.yml @@ -1,6 +1,11 @@ name: Build viewer on: workflow_dispatch: + inputs: + include_tracy: + description: 'Include tracy profiling builds' + required: false + default: 'false' push: branches: - "Firestorm*.*.*" @@ -116,7 +121,11 @@ jobs: elif [[ "${{ github.ref_name }}" == *nightly* ]] || [[ "${{ github.event_name }}" == 'schedule' ]]; then FS_RELEASE_TYPE=Nightly elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then - FS_RELEASE_TYPE=Manual + if [[ "${{ github.event.inputs.include_tracy }}" == "false" ]]; then + FS_RELEASE_TYPE=Manual + elif [[ "${{ github.event.inputs.include_tracy }}" == "true" ]]; then + FS_RELEASE_TYPE=Profiling + fi fi if [[ "${{ matrix.addrsize }}" == "64" ]]; then FS_RELEASE_CHAN="${FS_RELEASE_TYPE}x64" @@ -243,7 +252,7 @@ jobs: - name: Set expiration days based on FS_RELEASE_TYPE run: | case "${{ env.FS_RELEASE_TYPE }}" in - "Nightly" | "Manual") + "Nightly" | "Manual" | "Profiling") EXPIRE_DAYS=14 ;; "Alpha") @@ -264,6 +273,10 @@ jobs: echo "EXTRA_ARGS=${{ env.EXTRA_ARGS}}" >> $GITHUB_ENV fi shell: bash + - name: Add tracy builds for dev use if selected (manual builds only). + if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.include_tracy == 'true' }} + shell: bash + run: echo "EXTRA_ARGS=${{ env.EXTRA_ARGS }} --tracy" >> $GITHUB_ENV - name: Clean up packages to give more space run: rm *${{ env.fallback_platform }}*bz2 @@ -344,11 +357,14 @@ jobs: FS_RELEASE_FOLDER: if: always() steps: - - name: Checkout files - uses: Bhacaz/checkout-files@v2 + - name: Checkout repository + uses: actions/checkout@v4 with: - files: fsutils/download_list.py - branch: ${{ github.head_ref || github.ref_name || 'master' }} + sparse-checkout: | + fsutils/download_list.py + sparse-checkout-cone-mode: false + ref: ${{ github.head_ref || github.ref_name || 'master' }} + fetch-depth: 1 - name: Install discord-webhook library run: pip install discord-webhook diff --git a/autobuild.xml b/autobuild.xml index 642975f067..e6b7a0fa32 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -2752,15 +2752,43 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - fc67514183e7dbbb96bebb9970e1431c + ae3ac835e50d75e1c1691534bfddbf71 hash_algorithm md5 url - https://3p.firestormviewer.org/tracy-v0.10.241491433-windows-241491433.tar.bz2 + https://3p.firestormviewer.org/tracy-v0.10.241831928-windows-241831928.tar.bz2 name windows + linux + + archive + + hash + 9ab29796dc144431a9db46fddfbd88b0 + hash_algorithm + md5 + url + https://3p.firestormviewer.org/tracy-v0.10.241831929-linux-241831929.tar.bz2 + + name + linux + + darwin + + archive + + hash + f87f9db3a3c69464b46cd59490bca842 + hash_algorithm + md5 + url + https://3p.firestormviewer.org/tracy-v0.10.241831925-darwin-241831925.tar.bz2 + + name + darwin + license bsd diff --git a/doc/building_linux.md b/doc/building_linux.md index eeeb950728..92348765ca 100644 --- a/doc/building_linux.md +++ b/doc/building_linux.md @@ -158,7 +158,7 @@ Available premade firestorm-specific build targets: ``` ReleaseFS (includes KDU, FMOD) ReleaseFS_open (no KDU, no FMOD) -RelWithDebInfo_open (no KDU, no FMOD) +RelWithDebInfoFS_open (no KDU, no FMOD) ``` ### Configuration Switches diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp index 4b7d60d654..f7162bcf6e 100644 --- a/indra/llcommon/llmemory.cpp +++ b/indra/llcommon/llmemory.cpp @@ -39,6 +39,7 @@ #elif LL_LINUX # include # include +# include #endif #include "llmemory.h" @@ -85,6 +86,7 @@ void LLMemory::initMaxHeapSizeGB(F32Gigabytes max_heap_size) void LLMemory::updateMemoryInfo() { LL_PROFILE_ZONE_SCOPED + U32Kilobytes avail_phys; // align MemInfo across platforms #if LL_WINDOWS PROCESS_MEMORY_COUNTERS counters; @@ -95,23 +97,25 @@ void LLMemory::updateMemoryInfo() } sAllocatedMemInKB = U32Kilobytes::convert(U64Bytes(counters.WorkingSetSize)); - sample(sAllocatedMem, sAllocatedMemInKB); + // sample(sAllocatedMem, sAllocatedMemInKB); // align MemInfo across platforms sAllocatedPageSizeInKB = U32Kilobytes::convert(U64Bytes(counters.PagefileUsage)); sample(sVirtualMem, sAllocatedPageSizeInKB); + // align MemInfo across platforms + // U32Kilobytes avail_phys, avail_virtual; + // LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ; + // sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB); - U32Kilobytes avail_phys, avail_virtual; + // if(sMaxPhysicalMemInKB > sAllocatedMemInKB) + // { + // sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ; + // } + // else + // { + // sAvailPhysicalMemInKB = U32Kilobytes(0); + // } + U32Kilobytes avail_virtual; LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ; - sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB); - - if(sMaxPhysicalMemInKB > sAllocatedMemInKB) - { - sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ; - } - else - { - sAvailPhysicalMemInKB = U32Kilobytes(0); - } - + // #elif defined(LL_DARWIN) task_vm_info info; mach_msg_type_number_t infoCount = TASK_VM_INFO_COUNT; @@ -147,21 +151,47 @@ void LLMemory::updateMemoryInfo() if (result == KERN_SUCCESS) { // This is what Chrome reports as 'the "Physical Memory Free" value reported by the Memory Monitor in Instruments.' // Note though that inactive pages are not included here and not yet free, but could become so under memory pressure. - sAvailPhysicalMemInKB = U32Bytes(vmstat.free_count * page_size); - sMaxPhysicalMemInKB = LLMemoryInfo::getHardwareMemSize(); - } + // align MemInfo across platforms + // sAvailPhysicalMemInKB = U32Bytes(vmstat.free_count * page_size); + // sMaxPhysicalMemInKB = LLMemoryInfo::getHardwareMemSize(); + avail_phys = U32Bytes(vmstat.free_count * page_size); + sMaxHeapSizeInKB = LLMemoryInfo::getHardwareMemSize(); + // + } else { LL_WARNS() << "task_info failed" << LL_ENDL; } - + // align MemInfo across platforms +#elif defined(LL_LINUX) + // Use sysinfo() to get the total physical memory. + struct sysinfo info; + sysinfo(&info); + sMaxHeapSizeInKB = U32Kilobytes::convert((U64Bytes)info.totalram); // Total RAM in system + avail_phys = U32Kilobytes::convert((U64Bytes)info.freeram); // Total Free RAM in system + sAllocatedMemInKB = U32Kilobytes::convert(U64Bytes(LLMemory::getCurrentRSS())); // represents the RAM allocated by this process only (inline with the windows implementation) + // #else //not valid for other systems for now. + LL_WARNS() << "LLMemory::updateMemoryInfo() not implemented for this platform." << LL_ENDL; sAllocatedMemInKB = U64Bytes(LLMemory::getCurrentRSS()); sMaxPhysicalMemInKB = U64Bytes(U32_MAX); sAvailPhysicalMemInKB = U64Bytes(U32_MAX); #endif + // align MemInfo across platforms + sample(sAllocatedMem, sAllocatedMemInKB); + // sMaxPhysicalMem - max this process can use = the lesser of (what we already have + what's available) or MaxHeap + sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB); + if(sMaxPhysicalMemInKB > sAllocatedMemInKB) + { + sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ; + } + else + { + sAvailPhysicalMemInKB = U32Kilobytes(0); + } + // return ; } diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp index 96801da2ae..1620253875 100644 --- a/indra/llcommon/llqueuedthread.cpp +++ b/indra/llcommon/llqueuedthread.cpp @@ -427,11 +427,20 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req) if (req) { // Deferred retry requests - // Potentially when there is nothing else to do this will loop until the retry time. + // Avoid loop when idle by restoring a sleep // note that when there is nothing to do the thread still sleeps normally. - if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now() ) + using namespace std::chrono_literals; + + const auto throttle_time = 2ms; + if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now()) + { + ms_sleep(throttle_time.count()); + } + // if we're still not ready to retry then requeue + if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now()) { LL_PROFILE_ZONE_NAMED("qtpr - defer requeue"); + lockData(); req->setStatus(STATUS_QUEUED); mRequestQueue.post([this, req]() { processRequest(req); }); @@ -487,7 +496,6 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req) llassert(ret); #else using namespace std::chrono_literals; - auto retry_time = LL::WorkQueue::TimePoint::clock::now() + 2ms; // reduce delay on retry // improve retry behaviour // mRequestQueue.post([=] // { @@ -503,6 +511,8 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req) // } // processRequest(req); // }); + const auto retry_backoff = 16ms; + auto retry_time = LL::WorkQueue::TimePoint::clock::now() + retry_backoff; req->defer_until(retry_time); LL_PROFILE_ZONE_NAMED("processRequest - post deferred"); mRequestQueue.post([this, req]() { processRequest(req); }); diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 7963977d29..ccd513ea58 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -1014,7 +1014,6 @@ LLBoundListener LLNotificationChannelBase::connectChangedImpl(const LLEventListe LLBoundListener LLNotificationChannelBase::connectAtFrontChangedImpl(const LLEventListener& slot) { - LLMutexLock lock(&mItemsMutex); // Guard against against unlocked access to mItems for (LLNotificationSet::iterator it = mItems.begin(); it != mItems.end(); ++it) { slot(LLSD().with("sigtype", "load").with("id", (*it)->id())); @@ -1053,17 +1052,10 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload) bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPtr pNotification) { std::string cmd = payload["sigtype"]; - // Guard against unlocked access to mItems - // LLNotificationSet::iterator foundItem = mItems.find(pNotification); - // bool wasFound = (foundItem != mItems.end()); - bool wasFound = false; - { - LLMutexLock lock(&mItemsMutex); - LLNotificationSet::iterator foundItem = mItems.find(pNotification); - wasFound = (foundItem != mItems.end()); - } - // + LLNotificationSet::iterator foundItem = mItems.find(pNotification); + bool wasFound = (foundItem != mItems.end()); bool passesFilter = mFilter ? mFilter(pNotification) : true; + // first, we offer the result of the filter test to the simple // signals for pass/fail. One of these is guaranteed to be called. // If either signal returns true, the change processing is NOT performed @@ -1092,7 +1084,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt assert(!wasFound); if (passesFilter) { - LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems // not in our list, add it and say so mItems.insert(pNotification); onLoad(pNotification); @@ -1116,7 +1107,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt } else { - LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems // not in our list, add it and say so mItems.insert(pNotification); onChange(pNotification); @@ -1130,7 +1120,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt { if (wasFound) { - LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems // it already existed, so this is a delete mItems.erase(pNotification); onChange(pNotification); @@ -1149,7 +1138,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt assert(!wasFound); if (passesFilter) { - LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems // not in our list, add it and say so mItems.insert(pNotification); onAdd(pNotification); @@ -1161,7 +1149,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt // if we have it in our list, pass on the delete, then delete it, else do nothing if (wasFound) { - LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems onDelete(pNotification); abortProcessing = mChanged(payload); mItems.erase(pNotification); @@ -1263,8 +1250,7 @@ LLNotifications::LLNotifications() : LLNotificationChannelBase(LLNotificationFilters::includeEverything), mIgnoreAllNotifications(false) { - // Disable test API - //mListener.reset(new LLNotificationsListener(*this)); + mListener.reset(new LLNotificationsListener(*this)); LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Notification.Show", boost::bind(&LLNotifications::addFromCallback, this, _2)); // touch the instance tracker for notification channels, so that it will still be around in our destructor @@ -1727,7 +1713,6 @@ void LLNotifications::add(const LLNotificationPtr pNotif) if (pNotif == NULL) return; // first see if we already have it -- if so, that's a problem - LLMutexLock lock(&mItemsMutex); // Guard against unlocked acceess to mItems LLNotificationSet::iterator it=mItems.find(pNotif); if (it != mItems.end()) { diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 4e2bd85e29..5d46e48cf3 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -98,8 +98,7 @@ #include "llrefcount.h" #include "llsdparam.h" -// Disable test API -//#include "llnotificationslistener.h" +#include "llnotificationslistener.h" class LLAvatarName; typedef enum e_notification_priority @@ -999,8 +998,7 @@ private: bool mIgnoreAllNotifications; - // Disable test API - //std::unique_ptr mListener; + std::unique_ptr mListener; std::vector mDefaultChannels; }; diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index abca90011f..83ebe2bfde 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -141,7 +141,9 @@ void LLUICtrlFactory::createChildren(LLView* viewp, LLXMLNodePtr node, const wid //LL_WARNS() << child_name << " is not a valid child of " << node->getName()->mString << LL_ENDL; std::string name; node->getAttributeString("name", name); - LL_WARNS() << child_name << " is not a valid child of " << node->getName()->mString << " for " << name << " (line no. " << node->getLineNumber() << ")" << LL_ENDL; + std::string child_name_attribute; + child_node->getAttributeString("name", child_name_attribute); + LL_WARNS() << child_name << " with name " << child_name_attribute << " is not a valid child of " << node->getName()->mString << " for " << name << " (line no. " << node->getLineNumber() << ")" << LL_ENDL; // } else @@ -150,7 +152,9 @@ void LLUICtrlFactory::createChildren(LLView* viewp, LLXMLNodePtr node, const wid //LL_WARNS() << "Could not create widget named " << child_node->getName()->mString << LL_ENDL; std::string name; node->getAttributeString("name", name); - LL_WARNS() << "Could not create widget named " << child_node->getName()->mString << " for " << name << " (line no. " << node->getLineNumber() << ")" << LL_ENDL; + std::string child_name_attribute; + child_node->getAttributeString("name", child_name_attribute); + LL_WARNS() << "Could not create widget " << child_node->getName()->mString << " with name " << child_name_attribute << " for " << name << " (line no. " << node->getLineNumber() << ")" << LL_ENDL; // } } diff --git a/indra/newview/app_settings/graphic_preset_controls.xml b/indra/newview/app_settings/graphic_preset_controls.xml index 5a08a37639..26bdee3ef2 100644 --- a/indra/newview/app_settings/graphic_preset_controls.xml +++ b/indra/newview/app_settings/graphic_preset_controls.xml @@ -20,7 +20,6 @@ RenderAvatarMaxComplexity RenderAvatarMaxNonImpostors RenderAvatarPhysicsLODFactor - RenderCloudShadowAmbianceFactor RenderCompressTextures RenderDeferredSSAO RenderDepthOfField diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index bfb600ba54..219901ae78 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2186,6 +2186,28 @@ Value http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/avatars.html + AvatarRotateThresholdSlow + + Comment + Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving slowly (degrees) + Persist + 1 + Type + F32 + Value + 60 + + AvatarRotateThresholdFast + + Comment + Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving fast (degrees) + Persist + 1 + Type + F32 + Value + 2 + AvatarBakedTextureUploadTimeout Comment @@ -14970,6 +14992,19 @@ Change of this parameter will affect the layout of buttons in notification toast Backup 0 + TextureBiasUnimportantFactor + + Comment + When biasing textures to lower resolution due to lack of vram, the importance threshold below which is considered unimportant and getting an extra bias. + Persist + 1 + Type + F32 + Value + 0.25 + Backup + 0 + TextureDecodeDisabled Comment @@ -25706,5 +25741,16 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 + FSMinFreeMainMemoryTextureDiscardThreshold + + Comment + Minimum of available physical memory in MB before textures get scaled down + Persist + 1 + Type + S32 + Value + 512 + diff --git a/indra/newview/fspanelface.cpp b/indra/newview/fspanelface.cpp index 0852968418..9edadb68de 100644 --- a/indra/newview/fspanelface.cpp +++ b/indra/newview/fspanelface.cpp @@ -1980,10 +1980,6 @@ void FSPanelFace::updateUI(bool force_set_values /*false*/) mCheckFullbright->setValue((S32)(fullbright_flag != 0)); mCheckFullbright->setEnabled(editable ); mCheckFullbright->setTentative(!identical_fullbright); - - // TODO: find a better way to do this without relying on the name -Zi - childSetEnabled("panel_material_type_media", !has_pbr_material); - LL_DEBUGS("ENABLEDISABLETOOLS") << "panel_material_type_media " << !has_pbr_material << LL_ENDL; } // Repeats per meter @@ -5985,22 +5981,22 @@ void FSPanelFace::selectPBRChannel(S32 pbr_channel) { if (pbr_channel == PBRTYPE_NORMAL) { - mTabsMatChannel->selectTabByName("panel_pbr_transforms_base_color"); + mTabsPBRChannel->selectTabByName("panel_pbr_transforms_normal"); } else if (pbr_channel == PBRTYPE_BASE_COLOR) { - mTabsMatChannel->selectTabByName("panel_pbr_transforms_normal"); + mTabsPBRChannel->selectTabByName("panel_pbr_transforms_base_color"); } else if (pbr_channel == PBRTYPE_METALLIC_ROUGHNESS) { - mTabsMatChannel->selectTabByName("panel_pbr_transforms_metallic"); + mTabsPBRChannel->selectTabByName("panel_pbr_transforms_metallic"); } else if (pbr_channel == PBRTYPE_EMISSIVE) { - mTabsMatChannel->selectTabByName("panel_pbr_transforms_emissive"); + mTabsPBRChannel->selectTabByName("panel_pbr_transforms_emissive"); } else { - mTabsMatChannel->selectTabByName("panel_pbr_transforms_all"); + mTabsPBRChannel->selectTabByName("panel_pbr_transforms_all"); } } diff --git a/indra/newview/fspanelradar.cpp b/indra/newview/fspanelradar.cpp index 74e0ee826e..2d9c546549 100644 --- a/indra/newview/fspanelradar.cpp +++ b/indra/newview/fspanelradar.cpp @@ -331,6 +331,8 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat mRadarList->clearRows(); for (const auto& avdata : entries) { + constexpr char font_name[] = "SANSSERIF_SMALL"; + LLSD entry = avdata["entry"]; LLSD options = avdata["options"]; @@ -338,10 +340,12 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat row_data["value"] = entry["id"]; row_data["columns"][0]["column"] = "name"; row_data["columns"][0]["value"] = entry["name"]; + row_data["columns"][0]["font"] = font_name; row_data["columns"][1]["column"] = "voice_level"; row_data["columns"][1]["type"] = "icon"; row_data["columns"][1]["value"] = ""; // Need to set it after the row has been created because it's to big for the row + row_data["columns"][1]["font"] = font_name; row_data["columns"][2]["column"] = "in_region"; row_data["columns"][2]["type"] = "icon"; @@ -377,13 +381,16 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat row_data["columns"][7]["column"] = "age"; row_data["columns"][7]["value"] = entry["age"]; row_data["columns"][7]["halign"] = "right"; + row_data["columns"][7]["font"] = font_name; row_data["columns"][8]["column"] = "seen"; row_data["columns"][8]["value"] = entry["seen"]; row_data["columns"][8]["halign"] = "right"; + row_data["columns"][8]["font"] = font_name; row_data["columns"][9]["column"] = "range"; row_data["columns"][9]["value"] = entry["range"]; + row_data["columns"][9]["font"] = font_name; row_data["columns"][10]["column"] = "seen_sort"; row_data["columns"][10]["value"] = entry["seen"].asString() + "_" + entry["name"].asString(); diff --git a/indra/newview/installers/darwin/apple-notarize.sh b/indra/newview/installers/darwin/apple-notarize.sh index cd3f9eb803..c8ff10df5c 100755 --- a/indra/newview/installers/darwin/apple-notarize.sh +++ b/indra/newview/installers/darwin/apple-notarize.sh @@ -23,13 +23,23 @@ if [[ -f "$CONFIG_FILE" ]]; then echo "Notarytool submit:" echo $res - [[ "$res" =~ 'id: '([^[:space:]]+) ]] - match=$? - echo "Notarized with id: [$match]" + if [[ "$res" =~ id:\ ([^[:space:]]+) ]]; then + match="${BASH_REMATCH[1]}" + echo "Notarized with id: [$match]" + else + echo "No match found" + fi # if [[ ! $match -eq 0 ]]; then echo "Running Stapler" xcrun stapler staple "$app_file" + # Delete the zip file to stop it being packed in the dmg + rm -f "$zip_file" + if [[ $? -eq 0 ]]; then + echo "$zip_file deleted successfully." + else + echo "Failed to delete $zip_file" + fi exit 0 # else # echo "Notarization error" @@ -39,4 +49,7 @@ if [[ -f "$CONFIG_FILE" ]]; then echo "Notarization error: ditto failed" exit 1 fi +else + echo "No config file found - check notarize_creds is present in the secrets" + exit 1 fi diff --git a/indra/newview/lggcontactsets.cpp b/indra/newview/lggcontactsets.cpp index cd3dbf7309..df5cbb8aa9 100644 --- a/indra/newview/lggcontactsets.cpp +++ b/indra/newview/lggcontactsets.cpp @@ -320,6 +320,8 @@ LLColor4 LGGContactSets::colorize(const LLUUID& uuid, LLColor4 color, ContactSet color = LLUIColorTable::instance().getColor("MapAvatarSelfColor", LLColor4::white).get(); break; case ContactSetType::RADAR: + // Do nothing + break; default: LL_DEBUGS("ContactSets") << "Unhandled colorize case!" << LL_ENDL; break; @@ -378,6 +380,8 @@ LLColor4 LGGContactSets::colorize(const LLUUID& uuid, LLColor4 color, ContactSet color = LLUIColorTable::instance().getColor("MapAvatarMutedColor", LLColor4::grey3).get(); break; case ContactSetType::RADAR: + // Do nothing + break; default: LL_DEBUGS("ContactSets") << "Unhandled colorize case!" << LL_ENDL; break; @@ -398,6 +402,8 @@ LLColor4 LGGContactSets::colorize(const LLUUID& uuid, LLColor4 color, ContactSet color = LLUIColorTable::instance().getColor("MapAvatarFirestormColor", LLColor4::red).get(); break; case ContactSetType::RADAR: + // Do nothing + break; default: LL_DEBUGS("ContactSets") << "Unhandled colorize case!" << LL_ENDL; break; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 639fce0248..5e78459d3a 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3313,7 +3313,6 @@ bool LLAppViewer::initConfiguration() gSavedSettings.getString("SkinCurrentTheme"), gSavedSettings.getString("Language")); loadSettingsFromDirectory("CurrentSkin"); - loadSettingsFromDirectory("User"); // [/SL:KB] // gDirUtilp->setSkinFolder(skinfolder->getValue().asString(), // gSavedSettings.getString("Language")); diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 8878cb62f2..153addef1f 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -372,7 +372,7 @@ private: }; // consts from viewer.h -const S32 AGENT_UPDATES_PER_SECOND = 10; +const S32 AGENT_UPDATES_PER_SECOND = 125; // FIRE-34171 - Directional Input Delays with latest PBR-Capable Viewers const S32 AGENT_FORCE_UPDATES_PER_SECOND = 1; // Globals with external linkage. From viewer.h diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 6f5190b5b9..00d31bcdd9 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -302,6 +302,7 @@ bool LLFloaterTools::postBuild() LLSelectMgr::instance().setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_NORMAL); mCheckActualRoot = getChild("checkbox actual root"); + mCheckSelectProbes = getChild("checkbox select probes"); // @@ -428,6 +429,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key) // mCheckShowHighlight(NULL), mCheckActualRoot(NULL), + mCheckSelectProbes(NULL), // mBtnRotateLeft(NULL), @@ -1014,6 +1016,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) // if (mCheckShowHighlight) mCheckShowHighlight->setVisible( edit_visible ); if (mCheckActualRoot) mCheckActualRoot->setVisible( edit_visible ); + if (mCheckSelectProbes) mCheckSelectProbes->setVisible( edit_visible ); // // Create buttons diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 35ac55b4c6..95ab1048c8 100644 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -171,6 +171,7 @@ public: LLCheckBoxCtrl* mCheckStretchTexture; LLCheckBoxCtrl* mCheckShowHighlight; //Phoenix:KC LLCheckBoxCtrl* mCheckActualRoot; //Phoenix:KC + LLCheckBoxCtrl* mCheckSelectProbes; // // Ansariel: Reverted the hack because then when clicking the label it // doesn't check the checkbox anymore! diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp index 54ae38fb4d..552edcbcb7 100644 --- a/indra/newview/llheroprobemanager.cpp +++ b/indra/newview/llheroprobemanager.cpp @@ -211,6 +211,7 @@ void LLHeroProbeManager::update() else { mNearestHero = nullptr; + mDefaultProbe->mViewerObject = nullptr; // FIRE-34201 TP crash } mHeroProbeStrength = 1; @@ -219,6 +220,7 @@ void LLHeroProbeManager::update() else { mNearestHero = nullptr; + mDefaultProbe->mViewerObject = nullptr; // FIRE-34201 TP crash } // } diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index e31f37233f..774812bcfd 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -1478,10 +1478,10 @@ void LLPanelEditWearable::updateTypeSpecificControls(LLWearableType::EType type) if (type == LLWearableType::WT_SHAPE) { // Update avatar height - // The .08 is a fudge factor derived by measuring against + // The .195 is a fudge factor derived by measuring against // prims inworld, carried forward from Phoenix and adjusted // after LL's calculation change for shape sizes. -- TS - F32 new_size = gAgentAvatarp->mBodySize.mV[VZ] + .08f; + F32 new_size = gAgentAvatarp->mBodySize.mV[VZ] + .195f; if (!gSavedSettings.getBOOL("HeightUnits")) { diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 950bdf8eb2..6d83d13499 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1277,11 +1277,13 @@ bool idle_startup() gLoginMenuBarView->setVisible( true ); gLoginMenuBarView->setEnabled( true ); - LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID); - if(chat_channel) + // Fixing chat toasts to not show on the login page when login progress screens are disabled. + LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NEARBY_CHAT_CHANNEL_UUID); + if (chat_channel) { chat_channel->removeToastsFromChannel(); } + // show_debug_menus(); @@ -3984,11 +3986,13 @@ void reset_login() } // Hide any other stuff - LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID); - if(chat_channel) + // Fixing chat toasts to not show on the login page when login progress screens are disabled. + LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NEARBY_CHAT_CHANNEL_UUID); + if (chat_channel) { chat_channel->removeToastsFromChannel(); } + // LLFloaterReg::hideVisibleInstances(); // Improved menu and navigation bar diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 5ede9ea817..6eff1aa84d 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -381,11 +381,6 @@ static void update_tp_display(bool minimized) gViewerWindow->setProgressPercent(75.f); } - if (!gSavedSettings.getBOOL("FSDisableTeleportScreens")) - { - gAgentCamera.resetView(true, true); - } - // FIRE-12004: Attachments getting lost on TP gPostTeleportFinishKillObjectDelayTimer.reset(); break; @@ -394,7 +389,7 @@ static void update_tp_display(bool minimized) // Make the user wait while content "pre-caches" { F32 arrival_fraction = (gTeleportArrivalTimer.getElapsedTimeF32() / teleport_arrival_delay()); - if (arrival_fraction > 1.f || gSavedSettings.getBOOL("FSDisableTeleportScreens")) + if (arrival_fraction > 1.f) { arrival_fraction = 1.f; //LLFirstUse::useTeleport(); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index a80d32271c..9b6721064e 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -507,6 +507,81 @@ void LLViewerTexture::initClass() F32 texmem_lower_bound_scale = 0.85f; F32 texmem_middle_bound_scale = 0.925f; +//static +bool LLViewerTexture::isMemoryForTextureLow() +{ + LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE; + // Disable memory checking on request + static LLCachedControl FSDisableMemCheck(gSavedSettings, "FSDisableAMDTextureMemoryCheck"); + if (FSDisableMemCheck) + return false; + // + + // Note: we need to figure out a better source for 'min' values, + // what is free for low end at minimal settings is 'nothing left' + // for higher end gpus at high settings. + const S32Megabytes MIN_FREE_TEXTURE_MEMORY(20); + const S32Megabytes MIN_FREE_MAIN_MEMORY(100); + + S32Megabytes gpu; + S32Megabytes physical; + getGPUMemoryForTextures(gpu, physical); + + return (gpu < MIN_FREE_TEXTURE_MEMORY); // || (physical < MIN_FREE_MAIN_MEMORY); +} + +//static +void LLViewerTexture::getGPUMemoryForTextures(S32Megabytes &gpu, S32Megabytes &physical) +{ + LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE; + static LLFrameTimer timer; + + static S32Megabytes gpu_res = S32Megabytes(S32_MAX); + static S32Megabytes physical_res = S32Megabytes(S32_MAX); + + if (timer.getElapsedTimeF32() < GPU_MEMORY_CHECK_WAIT_TIME) //call this once per second. + { + gpu = gpu_res; + physical = physical_res; + return; + } + timer.reset(); + + { + gpu_res = (S32Megabytes)gViewerWindow->getWindow()->getAvailableVRAMMegabytes(); + + //check main memory, only works for windows and macos. + LLMemory::updateMemoryInfo(); + physical_res = LLMemory::getAvailableMemKB(); + + gpu = gpu_res; + physical = physical_res; + } +} + +// Restrict texture memory by available physical system memory +static bool isSystemMemoryForTextureLow() +{ + static LLFrameTimer timer; + static S32Megabytes physical_res = S32Megabytes(S32_MAX); + + static LLCachedControl fs_min_free_main_memory(gSavedSettings, "FSMinFreeMainMemoryTextureDiscardThreshold"); + const S32Megabytes MIN_FREE_MAIN_MEMORY(fs_min_free_main_memory); + + if (timer.getElapsedTimeF32() < GPU_MEMORY_CHECK_WAIT_TIME) //call this once per second. + { + return physical_res < MIN_FREE_MAIN_MEMORY; + } + + timer.reset(); + + //check main memory, only works for windows. + LLMemory::updateMemoryInfo(); + physical_res = LLMemory::getAvailableMemKB(); + return physical_res < MIN_FREE_MAIN_MEMORY; +} +// + //static void LLViewerTexture::updateClass() { @@ -538,12 +613,33 @@ void LLViewerTexture::updateClass() sFreeVRAMMegabytes = target - used; F32 over_pct = llmax((used-target) / target, 0.f); - sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct); + // Restrict texture memory by available physical system memory + //sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct); - if (sDesiredDiscardBias > 1.f) + //if (sDesiredDiscardBias > 1.f) + //{ + // sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01; + //} + + if (isSystemMemoryForTextureLow()) { - sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01; + // System RAM is low -> ramp up discard bias over time to free memory + if (sEvaluationTimer.getElapsedTimeF32() > GPU_MEMORY_CHECK_WAIT_TIME) + { + sDesiredDiscardBias += llmax(.1f, over_pct); // add at least 10% over-percentage + sEvaluationTimer.reset(); + } } + else + { + sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct); + + if (sDesiredDiscardBias > 1.f) + { + sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01; + } + } + // LLViewerTexture::sFreezeImageUpdates = false; // sDesiredDiscardBias > (desired_discard_bias_max - 1.0f); } diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 9efc658403..8331aa1471 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -950,6 +950,12 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag if (face && face->getViewerObject() && face->getTextureEntry()) { +// Fix Blurry textures and use importance weight + F32 radius; + F32 cos_angle_to_view_dir; + bool in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius); + static LLCachedControl bias_unimportant_threshold(gSavedSettings, "TextureBiasUnimportantFactor", 0.25f); +// F32 vsize = face->getPixelArea(); // Scale desired texture resolution higher or lower depending on texture scale @@ -963,13 +969,17 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag min_scale = llclamp(min_scale*min_scale, texture_scale_min(), texture_scale_max()); vsize /= min_scale; - vsize /= LLViewerTexture::sDesiredDiscardBias; - vsize /= llmax(1.f, (LLViewerTexture::sDesiredDiscardBias-1.f) * (1.f + face->getDrawable()->mDistanceWRTCamera * bias_distance_scale)); +// Fix Blurry textures and use importance weight +// vsize /= LLViewerTexture::sDesiredDiscardBias; +// vsize /= llmax(1.f, (LLViewerTexture::sDesiredDiscardBias-1.f) * (1.f + face->getDrawable()->mDistanceWRTCamera * bias_distance_scale)); - F32 radius; - F32 cos_angle_to_view_dir; - bool in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius); - if (!in_frustum || !face->getDrawable()->isVisible()) + +// F32 radius; +// F32 cos_angle_to_view_dir; +// bool in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius); +// if (!in_frustum || !face->getDrawable()->isVisible()) +// + if (!in_frustum || !face->getDrawable()->isVisible() || face->getImportanceToCamera() < bias_unimportant_threshold) { // further reduce by discard bias when off screen or occluded vsize /= LLViewerTexture::sDesiredDiscardBias; } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 40edd647f7..6de62d8ad5 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -4968,8 +4968,12 @@ void LLVOAvatar::updateOrientation(LLAgent& agent, F32 speed, F32 delta_time) LLVector3 pelvisDir( mRoot->getWorldMatrix().getFwdRow4().mV ); - const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW = 60.0f; - const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_FAST = 2.0f; + // FIRE-34196 Restore the pelvis rotation threshold config removed by LL as "unused" + // const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW = 60.0f; + // const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_FAST = 2.0f; + static LLCachedControl AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW(gSavedSettings, "AvatarRotateThresholdSlow", 60.0); + static LLCachedControl AVATAR_PELVIS_ROTATE_THRESHOLD_FAST(gSavedSettings, "AvatarRotateThresholdFast", 2.0); + // F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW, AVATAR_PELVIS_ROTATE_THRESHOLD_FAST); diff --git a/indra/newview/skins/ansastorm/settings.xml b/indra/newview/skins/ansastorm/settings.xml deleted file mode 100644 index a7efb8363a..0000000000 --- a/indra/newview/skins/ansastorm/settings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - FSShowChatType - - Comment - Shows/Hides the chat type selector (Whisper, Say, Shout) - Persist - 1 - Type - Boolean - Value - 0 - - - diff --git a/indra/newview/skins/default/xui/de/panel_fs_tools_texture.xml b/indra/newview/skins/default/xui/de/panel_fs_tools_texture.xml index 6b996ff83a..fa19700ac1 100644 --- a/indra/newview/skins/default/xui/de/panel_fs_tools_texture.xml +++ b/indra/newview/skins/default/xui/de/panel_fs_tools_texture.xml @@ -1,5 +1,5 @@ - + Falls mehrere Flächen kopiert werden, müssen auf dem Zielobjekt dieselbe Anzahl an Flächen selektiert sein. diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 64e72e62cb..dc8ec946c9 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -3282,14 +3282,14 @@ Low ↔ Lwst top_pad="8" width="132" /> + +--> @@ -2110,7 +2109,6 @@ max_val="255" increment="1" decimal_digits="0" - text_readonly_color="LabelDisabledColor" enabled_control="FSInternalFaceHasBPSpecularMap" /> @@ -2958,7 +2956,6 @@ top_pad="5" right="-4" height="2" - visibility_control="FSInternalCanEditObjectFaces" /> -