diff --git a/autobuild.xml b/autobuild.xml
index 8a3f711a1f..d6dea39d6a 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -2823,51 +2823,37 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index f2730c0494..ec3e4a76a4 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -117,7 +117,7 @@ if(WINDOWS)
elseif (MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019
set(MSVC_VER 140)
set(MSVC_TOOLSET_VER 142)
- elseif (MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) # Visual Studio 2022
+ elseif (MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) # Visual Studio 2022
set(MSVC_VER 140)
set(MSVC_TOOLSET_VER 143)
else (MSVC80)
diff --git a/indra/cmake/Tracy.cmake b/indra/cmake/Tracy.cmake
index 00b4844fca..5092e050f9 100644
--- a/indra/cmake/Tracy.cmake
+++ b/indra/cmake/Tracy.cmake
@@ -10,7 +10,7 @@ if (USE_TRACY)
use_prebuilt_binary(tracy)
target_include_directories( ll::tracy SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/tracy)
- target_link_libraries( ll::tracy INTERFACE TracyClient )
+ # target_link_libraries( ll::tracy INTERFACE TracyClient )
# See: indra/llcommon/llprofiler.h
add_compile_definitions(LL_PROFILER_CONFIGURATION=3)
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 43946ba62c..8c861f5faa 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -268,8 +268,12 @@ if (DARWIN)
list(APPEND llcommon_SOURCE_FILES llsys_objc.mm)
endif (DARWIN)
-# Tracy Profiler support
+# Tracy Profiler support
list(APPEND llcommon_SOURCE_FILES llprofiler.cpp)
+if (USE_TRACY)
+list(APPEND llcommon_SOURCE_FILES fstracyclient.cpp)
+endif()
+#
# Add all nd* files. memory pool, intrinsics, ...
diff --git a/indra/llcommon/fstracyclient.cpp b/indra/llcommon/fstracyclient.cpp
new file mode 100644
index 0000000000..c367657804
--- /dev/null
+++ b/indra/llcommon/fstracyclient.cpp
@@ -0,0 +1,8 @@
+// Just a simple wrapper to easily import the single tracy source file and save
+// all the pain of cross platform libraries in the Tracy 3p build.
+#include "linden_common.h"
+
+#if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY || LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY_FAST_TIMER
+ #include "TracyClient.cpp"
+#endif // LL_PROFILER_CONFIGURATION
+
diff --git a/indra/llcommon/llprofiler.h b/indra/llcommon/llprofiler.h
index 428702e0e7..11721aa62e 100644
--- a/indra/llcommon/llprofiler.h
+++ b/indra/llcommon/llprofiler.h
@@ -91,12 +91,12 @@ namespace LLProfiler
// #define TRACY_NO_BROADCAST 1
// #define TRACY_ONLY_LOCALHOST 1
#define TRACY_ONLY_IPV4 1
- #include "Tracy.hpp"
+ #include "tracy/Tracy.hpp"
// Fixed mutual exclusion issues with RAM and GPU. NOTE: This might still break on Apple in which case we'll need to restrict that platform
//// GPU Mutually exclusive with detailed memory tracing
// #define LL_PROFILER_ENABLE_TRACY_OPENGL 0
#define LL_PROFILER_ENABLE_TRACY_MEMORY 0
- #define LL_PROFILER_ENABLE_TRACY_OPENGL 0
+ #define LL_PROFILER_ENABLE_TRACY_OPENGL 1
// Enable RenderDoc labeling
#define LL_PROFILER_ENABLE_RENDER_DOC 0
@@ -104,37 +104,37 @@ namespace LLProfiler
#endif
#if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY
- #define LL_PROFILER_FRAME_END FrameMark
+ #define LL_PROFILER_FRAME_END FrameMark;
// Note: this threadlocal forces memory colelction enabled from the start. It conflicts with deferred profiling.
#define LL_PROFILER_SET_THREAD_NAME( name ) tracy::SetThreadName( name ); gProfilerEnabled = true;
//
- #define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ) // C string
- #define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ) // C string
+ #define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ); // C string
+ #define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ); // C string
// revert change that obscures custom FTM zones. We may want to may FTM Zones unique in future.
// #define LL_RECORD_BLOCK_TIME(name) ZoneScoped // Want descriptive names; was: ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active );
- #define LL_RECORD_BLOCK_TIME(name) ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active )
+ #define LL_RECORD_BLOCK_TIME(name) ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active );
//
//
// #define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, true )
// #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ) // RGB
// #define LL_PROFILE_ZONE_SCOPED ZoneScoped
- #define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, LLProfiler::active )
- #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ) // RGB
- #define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ) // Enable deferred collection through filters
+ #define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, LLProfiler::active );
+ #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ); // RGB
+ #define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ); // Enable deferred collection through filters
//
- #define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val )
- #define LL_PROFILE_ZONE_TEXT( text, size ) ZoneText( text, size )
+ #define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val );
+ #define LL_PROFILE_ZONE_TEXT( text, size ) ZoneText( text, size );
#define LL_PROFILE_ZONE_ERR(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0XFF0000 ) // RGB yellow
#define LL_PROFILE_ZONE_INFO(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0X00FFFF ) // RGB cyan
#define LL_PROFILE_ZONE_WARN(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0x0FFFF00 ) // RGB red
// Additional FS Tracy macros
- #define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active ) // Additional Tracy macro
- #define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value)
- #define LL_PROFILE_PLOT_SQ( name, prev, value ) TracyPlot(name,prev);TracyPlot( name, value)
+ #define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active );
+ #define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value);
+ #define LL_PROFILE_PLOT_CONFIG_SQUARE(name) TracyPlotConfig(name, tracy::PlotFormatType::Number, true, false, 0);
#define LL_PROFILE_IS_CONNECTED TracyIsConnected
//
#endif
@@ -158,15 +158,15 @@ namespace LLProfiler
// Additional FS Tracy macros
#define LL_PROFILE_ZONE_COLOR(color)
#define LL_PROFILE_PLOT( name, value )
- #define LL_PROFILE_PLOT_SQ( name, prev, value )
+ #define LL_PROFILE_PLOT_CONFIG_SQUARE(name)
#define LL_PROFILE_IS_CONNECTED
//
#endif
#if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY_FAST_TIMER
- #define LL_PROFILER_FRAME_END FrameMark
+ #define LL_PROFILER_FRAME_END FrameMark;
#define LL_PROFILER_SET_THREAD_NAME( name ) tracy::SetThreadName( name ); gProfilerEnabled = true;
- #define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ) // C string
- #define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ) // C string
+ #define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ); // C string
+ #define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ); // C string
// revert change that obscures custom FTM zones.
// #define LL_RECORD_BLOCK_TIME(name) ZoneScoped const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__);
@@ -177,20 +177,20 @@ namespace LLProfiler
// #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ) // RGB
// #define LL_PROFILE_ZONE_SCOPED ZoneScoped
#define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, LLProfiler::active );
- #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ) // RGB
- #define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ) // Enable deferred collection through filters
+ #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ); // RGB
+ #define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ); // Enable deferred collection through filters
//
- #define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val )
- #define LL_PROFILE_ZONE_TEXT( text, size ) ZoneText( text, size )
+ #define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val );
+ #define LL_PROFILE_ZONE_TEXT( text, size ) ZoneText( text, size );
#define LL_PROFILE_ZONE_ERR(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0XFF0000 ) // RGB yellow
#define LL_PROFILE_ZONE_INFO(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0X00FFFF ) // RGB cyan
#define LL_PROFILE_ZONE_WARN(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0x0FFFF00 ) // RGB red
// Additional FS Tracy macros
- #define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active )
- #define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value)
- #define LL_PROFILE_PLOT_SQ( name, prev, value ) TracyPlot( name, prev );TracyPlot( name, value )
+ #define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active );
+ #define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value);
+ #define LL_PROFILE_PLOT_CONFIG_SQUARE(name) TracyPlotConfig(name, tracy::PlotFormatType::Number, true, false, 0);
#define LL_PROFILE_IS_CONNECTED TracyIsConnected
//
#endif
@@ -215,16 +215,17 @@ namespace LLProfiler
// Additional FS Tracy macros
#define LL_PROFILE_ZONE_COLOR(color)
#define LL_PROFILE_PLOT( name, value )
- #define LL_PROFILE_PLOT_SQ( name, prev, value )
+ #define LL_PROFILE_PLOT_CONFIG_SQUARE(name)
#define LL_PROFILE_IS_CONNECTED
//
#endif // LL_PROFILER
#if LL_PROFILER_ENABLE_TRACY_OPENGL
-#define LL_PROFILE_GPU_ZONE(name) TracyGpuZone(name)
-#define LL_PROFILE_GPU_ZONEC(name,color) TracyGpuZoneC(name,color)
-#define LL_PROFILER_GPU_COLLECT TracyGpuCollect
-#define LL_PROFILER_GPU_CONTEXT TracyGpuContext
+#define LL_PROFILE_GPU_ZONE(name) TracyGpuZone(name);
+#define LL_PROFILE_GPU_ZONEC(name,color) TracyGpuZoneC(name,color);
+#define LL_PROFILER_GPU_COLLECT TracyGpuCollect;
+#define LL_PROFILER_GPU_CONTEXT TracyGpuContext;
+#define LL_PROFILER_GPU_CONTEXT_NS(name, size) TracyGpuContext;TracyGpuContextName(name,size);
// disable memory tracking (incompatible with GPU tracing
#define LL_PROFILE_ALLOC(ptr, size) (void)(ptr); (void)(size);
@@ -234,12 +235,13 @@ namespace LLProfiler
#define LL_PROFILE_GPU_ZONEC(name,color) (void)name;(void)color;
#define LL_PROFILER_GPU_COLLECT
#define LL_PROFILER_GPU_CONTEXT
+#define LL_PROFILER_GPU_CONTEXT_NS(name, size) (void)name;(void)size;
#define LL_LABEL_OBJECT_GL(type, name, length, label)
#if LL_PROFILER_CONFIGURATION > 1
-#define LL_PROFILE_ALLOC(ptr, size) TracyAlloc(ptr, size)
-#define LL_PROFILE_FREE(ptr) TracyFree(ptr)
+#define LL_PROFILE_ALLOC(ptr, size) TracyAlloc(ptr, size);
+#define LL_PROFILE_FREE(ptr) TracyFree(ptr);
#else
#define LL_PROFILE_ALLOC(ptr, size) (void)(ptr); (void)(size);
#define LL_PROFILE_FREE(ptr) (void)(ptr);
@@ -248,7 +250,7 @@ namespace LLProfiler
#endif
#if LL_PROFILER_ENABLE_RENDER_DOC
-#define LL_LABEL_OBJECT_GL(type, name, length, label) glObjectLabel(type, name, length, label)
+#define LL_LABEL_OBJECT_GL(type, name, length, label) glObjectLabel(type, name, length, label);
#else
#define LL_LABEL_OBJECT_GL(type, name, length, label)
#endif
diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp
index c854e30060..389dc2c39e 100644
--- a/indra/llcommon/llsdserialize.cpp
+++ b/indra/llcommon/llsdserialize.cpp
@@ -122,6 +122,7 @@ void LLSDSerialize::serialize(const LLSD& sd, std::ostream& str, ELLSD_Serialize
// static
bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, llssize max_bytes)
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_LLSD;
char hdr_buf[MAX_HDR_LEN + 1] = ""; /* Flawfinder: ignore */
bool fail_if_not_legacy = false;
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index e87f8feddf..eb706aea21 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -456,6 +456,7 @@ template std::string LLStringUtilBase::sLocale;
typedef LLStringUtilBase LLStringUtil;
typedef LLStringUtilBase LLWStringUtil;
typedef std::basic_string LLWString;
+typedef std::basic_string_view LLWStringView;
//@ Use this where we want to disallow input in the form of "foo"
// This is used to catch places where english text is embedded in the code
diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp
index 6f74bf3fc8..a34b8f1024 100644
--- a/indra/llcommon/lltimer.cpp
+++ b/indra/llcommon/lltimer.cpp
@@ -70,7 +70,7 @@ LLTimer* LLTimer::sTimer = NULL;
#if 0
void ms_sleep(U32 ms)
{
- LL_PROFILE_ZONE_SCOPED;
+ // LL_PROFILE_ZONE_SCOPED;
using TimePoint = std::chrono::steady_clock::time_point;
auto resume_time = TimePoint::clock::now() + std::chrono::milliseconds(ms);
while (TimePoint::clock::now() < resume_time)
diff --git a/indra/llcorehttp/_httppolicy.cpp b/indra/llcorehttp/_httppolicy.cpp
index 704c8abb93..03ac521b87 100644
--- a/indra/llcorehttp/_httppolicy.cpp
+++ b/indra/llcorehttp/_httppolicy.cpp
@@ -213,6 +213,7 @@ void HttpPolicy::retryOp(const HttpOpRequest::ptr_t &op)
//
HttpService::ELoopSpeed HttpPolicy::processReadyQueue()
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;// missing http trace
const HttpTime now(totalTime());
HttpService::ELoopSpeed result(HttpService::REQUEST_SLEEP);
HttpLibcurl & transport(mService->getTransport());
diff --git a/indra/llmessage/llmessagetemplate.h b/indra/llmessage/llmessagetemplate.h
index 85a765b085..e949d2b395 100644
--- a/indra/llmessage/llmessagetemplate.h
+++ b/indra/llmessage/llmessagetemplate.h
@@ -365,6 +365,7 @@ public:
BOOL callHandlerFunc(LLMessageSystem *msgsystem) const
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
if (mHandlerFunc)
{
diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
index 0fd8ee875c..1eec975d46 100644
--- a/indra/llmessage/lltemplatemessagereader.cpp
+++ b/indra/llmessage/lltemplatemessagereader.cpp
@@ -541,6 +541,11 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
llassert( mCurrentRMessageTemplate);
llassert( !mCurrentRMessageData );
delete mCurrentRMessageData; // just to make sure
+ // storage for Tracy tag
+ #ifdef TRACY_ENABLE
+ static char msgstr[36];
+ #endif
+ //
// The offset tells us how may bytes to skip after the end of the
// message name.
@@ -556,6 +561,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
iter != mCurrentRMessageTemplate->mMemberBlocks.end();
++iter)
{
+ LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("BuildFromTemplate");
LLMessageBlock* mbci = *iter;
U8 repeat_number;
S32 i;
@@ -598,6 +604,13 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
}
LLMsgBlkData* cur_data_block = NULL;
+ // Tracy Message processing
+ LL_DEBUGS("LLMessage") << "Processing " << mbci->mName << " with " << repeat_number << " repetitions" << LL_ENDL;
+ #ifdef TRACY_ENABLE
+ strncpy(msgstr, mbci->mName, 35);
+ LL_PROFILE_ZONE_TEXT(msgstr, 35);
+ #endif
+ //
// now loop through the block
for (i = 0; i < repeat_number; i++)
@@ -622,6 +635,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
mbci->mMemberVariables.begin();
iter != mbci->mMemberVariables.end(); iter++)
{
+ LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("AddVariables");
const LLMessageVariable& mvci = **iter;
// ok, build out the variables
@@ -704,6 +718,12 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
}
{
+ // Tracy Message processing
+ LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("ProcessMessage");
+ #ifdef TRACY_ENABLE
+ LL_PROFILE_ZONE_TEXT(msgstr, 35);
+ #endif
+ //
static LLTimer decode_timer;
if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback())
@@ -742,7 +762,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
if(decode_time > LLMessageReader::getTimeDecodesSpamThreshold())
{
- LL_DEBUGS() << "--------- Message " << mCurrentRMessageTemplate->mName << " decode took " << decode_time << " seconds. (" <<
+ LL_DEBUGS("LLMessage") << "--------- Message " << mCurrentRMessageTemplate->mName << " decode took " << decode_time << " seconds. (" <<
mCurrentRMessageTemplate->mMaxDecodeTimePerMsg << " max, " <<
(mCurrentRMessageTemplate->mTotalDecodeTime / mCurrentRMessageTemplate->mTotalDecoded) << " avg)" << LL_ENDL;
}
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 6d41a5a22d..5a83c6e68f 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -2547,6 +2547,7 @@ void LLImageGLThread::run()
// WorkQueue, likewise cleanup afterwards.
mWindow->makeContextCurrent(mContext);
gGL.init(false);
+ LL_PROFILER_GPU_CONTEXT_NS("LLImageGL Context", 17);
LL::ThreadPool::run();
gGL.shutdown();
mWindow->destroySharedContext(mContext);
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 78227a7207..548ce6c308 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -237,6 +237,7 @@ public:
{
mWindow->makeContextCurrent(mContext);
gGL.init(false);
+ LL_PROFILER_GPU_CONTEXT_NS("LLGLWorker Context", 18);
mQueue->runUntilClose();
gGL.shutdown();
mWindow->destroySharedContext(mContext);
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 9ae60ab301..052987b69f 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1014,6 +1014,7 @@ 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()));
@@ -1052,10 +1053,17 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload)
bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPtr pNotification)
{
std::string cmd = payload["sigtype"];
- LLNotificationSet::iterator foundItem = mItems.find(pNotification);
- bool wasFound = (foundItem != mItems.end());
+ // 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());
+ }
+ //
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
@@ -1084,6 +1092,7 @@ 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);
@@ -1107,6 +1116,7 @@ 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);
@@ -1120,6 +1130,7 @@ 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);
@@ -1138,6 +1149,7 @@ 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);
@@ -1149,6 +1161,7 @@ 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);
@@ -1714,6 +1727,7 @@ 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/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 2f2d2cca88..2573b8be5b 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -1686,6 +1686,7 @@ const S32 max_format = (S32)num_formats - 1;
close();
return FALSE;
}
+ //LL_PROFILER_GPU_CONTEXT; TODO(Beq) review this
LL_PROFILER_GPU_CONTEXT
@@ -1720,7 +1721,7 @@ const S32 max_format = (S32)num_formats - 1;
swapBuffers();
}
- LL_PROFILER_GPU_CONTEXT;
+ LL_PROFILER_GPU_CONTEXT_NS("MainGL Context", 14);
return TRUE;
}
@@ -1890,7 +1891,7 @@ void* LLWindowWin32::createSharedContext()
void LLWindowWin32::makeContextCurrent(void* contextPtr)
{
wglMakeCurrent(mhDC, (HGLRC) contextPtr);
- LL_PROFILER_GPU_CONTEXT;
+
}
void LLWindowWin32::destroySharedContext(void* contextPtr)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5a561571d4..235bc3e8a8 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -138,6 +138,7 @@ set(viewer_SOURCE_FILES
fsfloatervolumecontrols.cpp
fsfloatervramusage.cpp
fsfloaterwearablefavorites.cpp
+ fsfloaterwhitelisthelper.cpp
fskeywords.cpp
fslslbridge.cpp
fslslbridgerequest.cpp
@@ -166,6 +167,7 @@ set(viewer_SOURCE_FILES
fsscriptlibrary.cpp
fsscrolllistctrl.cpp
fsslurlcommand.cpp
+ fsworldmapmessage.cpp
groupchatlistener.cpp
lggbeamcolormapfloater.cpp
lggbeammapfloater.cpp
@@ -178,8 +180,6 @@ set(viewer_SOURCE_FILES
llpanelopenregionsettings.cpp
# [Legacy Bake]
llagentwearablesfetch.cpp
-
- # local mesh
vjlocalmesh.cpp
vjfloaterlocalmesh.cpp
vjlocalmeshimportdae.cpp
@@ -931,6 +931,7 @@ set(viewer_HEADER_FILES
fsfloatervolumecontrols.h
fsfloatervramusage.h
fsfloaterwearablefavorites.h
+ fsfloaterwhitelisthelper.h
fsgridhandler.h
fskeywords.h
fslslbridge.h
@@ -961,6 +962,7 @@ set(viewer_HEADER_FILES
fsscrolllistctrl.h
fsslurl.h
fsslurlcommand.h
+ fsworldmapmessage.h
groupchatlistener.h
llaccountingcost.h
lggbeamcolormapfloater.h
@@ -973,8 +975,6 @@ set(viewer_HEADER_FILES
llfloaterflickr.h
# [Legacy Bake]
llagentwearablesfetch.h
-
- # local mesh
vjlocalmesh.h
vjfloaterlocalmesh.h
vjlocalmeshimportdae.h
diff --git a/indra/newview/app_settings/grids.xml b/indra/newview/app_settings/grids.xml
index 2a2e599f07..5c37cb0767 100644
--- a/indra/newview/app_settings/grids.xml
+++ b/indra/newview/app_settings/grids.xml
@@ -1,942 +1,32 @@
- alternatemetaverse.com:8002
+ localhost:9000
LastModified
- 2020-06-02T11:41:00.95Z
+ 2024-05-28T12:00:00Z
+ grid_login_id
+ localhost:9000
gridname
- Alternate Metaverse
+ localhost
gridnick
- AMV
+ localhost
login_identifier_types
agent
account
loginpage
- https://alternatemetaverse.com/splash
- loginuri
-
- http://alternatemetaverse.com:8002
-
- name
- alternatemetaverse.com:8002
- platform
- OpenSim
- slurl_base
- hop://alternatemetaverse.com:8002/
-
- astralia.eu:8002
-
- LastModified
- 2020-06-02T11:43:19.89Z
- gatekeeper
- astralia.eu:8002
- gridname
- astralia
- gridnick
- astralia
- helperuri
- http://astralia.eu//currency/helper/landtool.php
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://astralia.eu
- loginuri
-
- http://astralia.eu:8002/
-
- name
- astralia.eu:8002
- platform
- OpenSim
- slurl_base
- hop://astralia.eu:8002/
-
- cc.opensimulator.org:8002
-
- LastModified
- 2019-12-09T10:00:00Z
- gatekeeper
- cc.opensimulator.org:8002
- gridname
- OpenSim Community Conference
- gridnick
- opensimcc
- helperuri
- http://cc.opensimulator.org/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://cc.opensimulator.org:8005/wifi/welcome.html
- loginuri
-
- http://cc.opensimulator.org:8002/
-
- name
- cc.opensimulator.org:8002
- password
- http://cc.opensimulator.org:8005/wifi/forgotpassword
- platform
- OpenSim
- register
- http://cc.opensimulator.org:8005/wifi/user/account
- slurl_base
- hop://cc.opensimulator.org:8002/
-
- craft-world.org:8002
-
- LastModified
- 2020-06-02T14:23:31.86Z
- about
- https://www.craft-world.org/
- gatekeeper
- craft-world.org:8002
- gridname
- Craft World
- gridnick
- craft
- help
- https://www.craft-world.org/page/en/support.php
- helperuri
- http://webapp.craft-world.org/economy/
- login_identifier_types
-
- agent
- account
-
- loginpage
- https://www.craft-world.org/loginscreen.php
- loginuri
-
- http://craft-world.org:8002/
-
- name
- craft-world.org:8002
- password
- https://www.craft-world.org/page/en/avatar-tools.php
- platform
- OpenSim
- register
- https://www.craft-world.org/page/en/register-an-avatar.php
- slurl_base
- hop://craft-world.org:8002/
-
- discoverygrid.net:8002
-
- LastModified
- 2020-04-24T12:06:59.18Z
- about
- https://discoverygrid.net/about.php
- gatekeeper
- discoverygrid.net:8002
- gridname
- DiscoveryGrid
- gridnick
- DiscoveryGrid
- help
- https://discoverygrid.net
- helperuri
- https://discoverygrid.net/apps/
- login_identifier_types
-
- agent
- account
-
- loginpage
- https://discoverygrid.net/viewersplash.php
- loginuri
-
- http://discoverygrid.net:8002/
-
- name
- discoverygrid.net:8002
- password
- https://discoverygrid.net/#needpw
- platform
- OpenSim
- register
- https://discoverygrid.net/index.php#create
- slurl_base
- hop://discoverygrid.net:8002/
-
- fireandicegrid.net:8002
-
- LastModified
- 2020-06-02T11:41:59.83Z
- about
- http://fireandicegrid.net
- gatekeeper
- fireandicegrid.net:8002
- gridname
- Fire And Ice Grid
- gridnick
- FireAndIceGrid
- help
- http://fireandicegrid.net
- helperuri
- http://fireandicegrid.net
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://fireandicegrid.net
- loginuri
-
- http://fireandicegrid.net:8002/
-
- name
- fireandicegrid.net:8002
- password
- http://fireandicegrid.net:8002/wifi
- platform
- OpenSim
- register
- http://fireandicegrid.net:8002/wifi
- slurl_base
- hop://fireandicegrid.net:8002/
-
- gaynations.org:7002
-
- DEPRECATED
- TRUE
- login_identifier_types
-
- agent
- account
-
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- gaynations.org:7002
-
- goto.theencoreescape.com:8002
-
- DirectoryFee
- 0
- LastModified
- 2020-04-24T17:00:50.92Z
- SendGridInfoToViewerOnLogin
- true
- about
- http://theencoreescape.com/
- gatekeeper
- goto.theencoreescape.com:8002
- gridname
- The Encore Escape
- gridnick
- EncoreEscape
- help
- http://theencoreescape.com/
- helperuri
- http://money.theencoreescape.com/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://splash.theencoreescape.com/
- loginuri
-
- http://goto.theencoreescape.com:8002/
-
- name
- goto.theencoreescape.com:8002
- password
- http://theencoreescape.com/
- platform
- OpenSim
- register
- http://theencoreescape.com/
- search
- http://search.theencoreescape.com/query.php
- slurl_base
- hop://goto.theencoreescape.com:8002/
-
- grid.3rdrockgrid.com:8002
-
- LastModified
- 2012-08-03T15:32:54.31Z
- about
- http://3rdrockgrid.com/
- gridname
- 3RD Rock Grid
- gridnick
- 3RG
- help
- http://3rdrockgrid.com/
- helperuri
- http://grid.3rdrockgrid.com/3rg_money/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://grid.3rdrockgrid.com/3rg_login/
- loginuri
-
- http://grid.3rdrockgrid.com:8002/
-
- name
- grid.3rdrockgrid.com:8002
- password
- http://3rdrockgrid.com/
- register
- http://3rdrockgrid.com/
- slurl_base
- hop://grid.3rdrockgrid.com:8002/
-
-
- grid.avacon.org:8002
-
- LastModified
- 2020-06-02T12:01:35.02Z
- gatekeeper
- grid.avacon.org:8002
- gridname
- AvaCon Grid
- gridnick
- avacon
- helperuri
- http://grid.avacon.org/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://grid.avacon.org:8005/wifi/welcome.html
- loginuri
-
- http://grid.avacon.org:8002/
-
- name
- grid.avacon.org:8002
- password
- http://grid.avacon.org:8005/wifi/forgotpassword
- platform
- OpenSim
- register
- http://grid.avacon.org:8005/wifi/user/account
- slurl_base
- hop://grid.avacon.org:8002/
-
- grid.kitely.com:8002
-
- LastModified
- 2014-03-20T12:30:00Z
- gatekeeper
- grid.kitely.com:8002
- gridname
- Kitely
- gridnick
- kitely
- helperuri
- http://grid.kitely.com:8002/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://www.kitely.com/viewer_login
- loginuri
-
- http://grid.kitely.com:8002/
-
- name
- grid.kitely.com:8002
- platform
- OpenSim
- slurl_base
- hop://grid.kitely.com:8002/
-
- grid.virtualife.cloud:8002
-
- LastModified
- 2019-12-04T10:50:32.55Z
- about
- http://www.virtualife.cloud
- gatekeeper
- grid.virtualife.cloud:8002
- gridname
- virtualife world
- gridnick
- Virtualife world
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://www.virtualife.cloud/index.php?option=com_opensim
- loginuri
-
- http://grid.virtualife.cloud:8002/
-
- name
- grid.virtualife.cloud:8002
- password
- http://grid.virtualife.cloud:8002/wifi/forgotpassword
- platform
- OpenSim
- register
- http://grid.virtualife.cloud:8002/wifi/user/account
- slurl_base
- hop://grid.virtualife.cloud:8002/
-
- grid01.from-ne.com:8002
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- login_identifier_types
-
- agent
- account
-
- name
- grid01.from-ne.com:8002
-
- hypergrid.org:8002
-
- LastModified
- 2013-04-02T01:01:24.65Z
- about
- http://www.hypergrid.org/metropolis/wiki
- gatekeeper
- hypergrid.org:8002
- gridname
- Metropolis Metaversum
- gridnick
- Metropolis
- help
- http://metropolis.hypergrid.org/forum
- helperuri
- http://metropolis.hypergrid.org/currency/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://metropolis.hypergrid.org
- loginuri
-
- http://hypergrid.org:8002/
-
- name
- hypergrid.org:8002
- password
- http://metropolis.hypergrid.org/password.php
- platform
- OpenSim
- register
- http://www.hypergrid.org/metropolis/metro_rg.php
- slurl_base
- hop://hypergrid.org:8002/
-
- islandoasisgrid.biz:8002
-
- LastModified
- 2013-01-21T20:10:35.17Z
- about
- http://www.islandoasis.biz/GridStats.aspx
- gridname
- Island Oasis
- gridnick
- Island_Oasis
- help
- http://www.islandoasis.biz/Support.aspx
- helperuri
- http://islandoasisgrid:8020/OsCurrency/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://www.islandoasis.biz/welcome.aspx
- loginuri
-
- http://islandoasisgrid.biz:8002/
-
- name
- islandoasisgrid.biz:8002
- password
- http://www.islandoasis.biz/Login.aspx
- platform
- OpenSim
- register
- http://www.islandoasis.biz/verification.aspx
- slurl_base
- hop://islandoasisgrid.biz:8002/
-
- lfgrid.com:8002
-
- LastModified
- 2013-03-18T21:51:17.62Z
- about
- http://lfgrid.com/about/
- gatekeeper
- lfgrid.com:8002
- gridname
- Littlefield Grid
- gridnick
- LFgrid
- help
- http://lfgrid.com/help
- helperuri
- http://lfgrid.com/services/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://www.lfgrid.com/splash/index.php
- loginuri
-
- http://lfgrid.com:8002/
-
- name
- lfgrid.com:8002
- password
- http://lfgrid.com:8002/wifi/forgotpassword
- platform
- OpenSim
- register
- http://lfgrid.com:8002/wifi/user/account/
- slurl_base
- hop://lfgrid.com:8002/
-
- login.aviworlds.com:8002
-
- DirectoryFee
- 0
- LastModified
- 2020-06-02T11:41:55.32Z
- SendGridInfoToViewerOnLogin
- true
- about
- http://aviworlds.com
- gatekeeper
- login.aviworlds.com:8002
- gridname
- AviWorlds
- gridnick
- Avi
- help
- http://aviworlds.com
- helperuri
- http://login.aviworlds.com/helper_scripts/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://login.aviworlds.com/splash
- loginuri
-
- http://login.aviworlds.com:8002/
-
- name
- login.aviworlds.com:8002
- password
- http://login.aviworlds.com:8002/wifi/forgotpassword
- platform
- OpenSim
- register
- http://login.aviworlds.com:8002/wifi/user/account/
- search
- http://login.aviworlds.com/ossearch/query.php
- slurl_base
- hop://login.aviworlds.com:8002/
-
- login.digiworldz.com:8002
-
- DirectoryFee
- 0
- LastModified
- 2015-07-24T13:19:44.27Z
- SendGridInfoToViewerOnLogin
- true
- about
- http://digiworldz.com/
- gatekeeper
- login.digiworldz.com:8002
- gridname
- DigiWorldZ Grid
- gridnick
- DWG
- help
- http://digiworldz.com/
- helperuri
- http://money.digiworldz.com/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://splash.digiworldz.com/
- loginuri
-
- http://login.digiworldz.com:8002/
-
- name
- login.digiworldz.com:8002
- password
- http://digiworldz.com/
- platform
- OpenSim
- register
- http://digiworldz.com/
- search
- http://search.digiworldz.com/query.php
- slurl_base
- hop://login.digiworldz.com:8002/
-
- login.francogrid.org:80
-
- LastModified
- 2013-02-14T02:00:46.10Z
- about
- http://francogrid.org/
- gridname
- FrancoGrid
- gridnick
- francogrid
- help
- http://francogrid.org/aide
- helperuri
- http://helper.main.francogrid.org/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://viewer.francogrid.org/
- loginuri
-
- http://login.francogrid.org/
-
- name
- login.francogrid.org:80
- password
- http://francogrid.org/user/password
- platform
- OpenSim
- register
- http://francogrid.org/user/register
- slurl_base
- hop://login.francogrid.org:80/
-
- login.greatcanadiangrid.ca:8002
-
- DEPRECATED
- TRUE
- login_identifier_types
-
- agent
- account
-
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- login.greatcanadiangrid.ca:8002
-
- login.osgrid.org
-
- LastModified
- 2019-04-19T21:15:00Z
- about
- http://www.osgrid.org/
- gatekeeper
- hg.osgrid.org:80
- gridname
- OSGrid
- gridnick
- osgrid
- help
- http://www.osgrid.org/
- helperuri
- http://helper.osgrid.org/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://www.osgrid.org/splash/
- loginuri
-
- http://login.osgrid.org/
-
- name
- login.osgrid.org
- password
- http://www.osgrid.org/
- platform
- register
- http://www.osgrid.org/
- slurl_base
- hop://login.osgrid.org/
- web_profile_url
- http://my.osgrid.org/?name=[AGENT_NAME]
-
- login.ufsgrid.com:8002
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- login_identifier_types
-
- agent
- account
-
- name
- login.ufsgrid.com:8002
-
- login.zetaworlds.com
-
- LastModified
- 2020-06-02T12:39:31.19Z
- about
- https://zetaworlds.com/
- gridname
- ZetaWorlds
- gridnick
- ZetaWorlds
- helperuri
- http://money.zetaworlds.com/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://zetaworlds.com/splash
loginuri
- https://login.zetaworlds.com/
+ http://localhost:9000
name
- login.zetaworlds.com
- password
- https://zetaworlds.com/user/forgot
- platform
- OpenSim
- register
- http://zetaworlds.com/user/register
+ localhost:9000
slurl_base
- hop://login.zetaworlds.com/
-
- login.zonenations.com:8002
-
- LastModified
- 2019-12-04T10:43:24.96Z
- about
- https://www.zonenations.com/
- gatekeeper
- login.zonenations.com:8002
- gridname
- Zone Nations
- gridnick
- ZoneNations
- help
- https://www.zonenations.com/supporto.html
- helperuri
- https://www.zonenations.com/components/com_opensim/
- login_identifier_types
-
- agent
- account
-
- loginpage
- https://www.zonenations.com/index.php?option=com_opensim
- loginuri
-
- http://login.zonenations.com:8002/
-
- name
- login.zonenations.com:8002
- password
- https://www.zonenations.com/password-smarrita.html
- platform
- OpenSim
- register
- https://www.zonenations.com/iscriviti.html
- slurl_base
- hop://login.zonenations.com:8002/
-
- login.main.mobiusgrid.us:8002
-
- LastModified
- 2020-06-02T11:41:00.95Z
- DEPRECATED
- TRUE
- name
- login.main.mobiusgrid.us:8002
-
- main.mobiusgrid.us
-
- LastModified
- 2020-06-02T13:19:55.40Z
- about
- https://mobiusgrid.us/about
- gridname
- Mobius Grid
- gridnick
- Mobius
- help
- https://mobiusgrid.us/help
- login_identifier_types
-
- agent
- account
-
- loginpage
- https://mobiusgrid.us/splash
- loginuri
-
- http://login.main.mobiusgrid.us
-
- name
- main.mobiusgrid.us
- password
- https://mobiusgrid.us/forgot
- platform
- OpenSim
- register
- https://mobiusgrid.us/join
- slurl_base
- hop://main.mobiusgrid.us/
-
- partydestinationgrid.com:8002
-
- LastModified
- 2019-12-04T10:48:17.58Z
- about
- https://partydestinationgrid.com/
- gatekeeper
- partydestinationgrid.com:8002
- gridname
- Party Destination Grid
- gridnick
- partydestinationgrid
- help
- https://partydestinationgrid.com/index.php/help/help
- helperuri
- http://partydestinationgrid.com/components/com_opensim/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://module.partydestinationgrid.com/login
- loginuri
-
- http://partydestinationgrid.com:8002/
-
- name
- partydestinationgrid.com:8002
- platform
- OpenSim
- register
- https://partydestinationgrid.com/index.php/component/users/?view=registration
- slurl_base
- hop://partydestinationgrid.com:8002/
-
- tanglegrid.net:8002
-
- LastModified
- 2019-12-04T10:49:43.20Z
- about
- http://tanglegrid.com/
- gatekeeper
- tanglegrid.net:8002
- gridname
- TanGLe Grid
- gridnick
- TanGLe
- help
- http://tanglegrid.com/contact.php
- helperuri
- http://tanglegrid.net/scripts/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://tanglegrid.net/web_interface/loginscreen.php
- loginuri
-
- http://tanglegrid.net:8002/
-
- name
- tanglegrid.net:8002
- password
- http://www.tanglegrid.net/web_interface/index.php?page=forgotpass
- platform
- OpenSim
- register
- http://www.tanglegrid.net/web_interface/avatar.php
- search
- http://www.tanglegrid.net/helper/query.php
- slurl_base
- hop://tanglegrid.net:8002/
-
- thekazgrid.com:8002
-
- LastModified
- 2019-12-04T10:47:15.79Z
- about
- https://www.thekazgrid.com/index.php/11-about/6-about
- gridname
- TheKaz Grid
- gridnick
- TheKaz
- helperuri
- https://www.thekazgrid.com/currency/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- https://www.thekazgrid.com/index.php?option=com_opensim
- loginuri
-
- http://thekazgrid.com:8002/
-
- name
- thekazgrid.com:8002
- platform
- OpenSim
- register
- https://www.thekazgrid.com/index.php/join
- slurl_base
- hop://thekazgrid.com:8002/
-
- util.aditi.lindenlab.com
+ hop://localhost:9000/
+
+ util.aditi.lindenlab.com
LastModified
2018-09-26T20:15:00Z
@@ -953,7 +43,7 @@
agent
loginpage
- https://phoenixviewer.com/app/loginV3/
+ http://phoenixviewer.com/app/loginV3/
loginuri
https://login.aditi.lindenlab.com/cgi-bin/login.cgi
@@ -986,7 +76,7 @@
agent
loginpage
- https://phoenixviewer.com/app/loginV3/
+ http://phoenixviewer.com/app/loginV3/
loginuri
https://login.agni.lindenlab.com/cgi-bin/login.cgi
@@ -999,156 +89,6 @@
1
web_profile_url
https://my.secondlife.com/
-
- grid.alifevirtual.com:8002
-
- DEPRECATED
- TRUE
- LastModified
- 2020-04-04T10:42:24.54Z
- name
- grid.alifevirtual.com:8002
-
- www.alifevirtual.com:8002
-
- LastModified
- 2020-05-30T09:41:01.73Z
- about
- http://www.alifevirtual.com/
- gridname
- Alife Virtual
- gridnick
- AV
- help
- http://www.alifevirtual.com/
- helperuri
- http://www.alifevirtual.com/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://www.alifevirtual.com/welcome.php
- loginuri
-
- http://www.alifevirtual.com:8002/
-
- name
- www.alifevirtual.com:8002
- password
- http://www.alifevirtual.com/
- platform
- OpenSim
- register
- http://www.alifevirtual.com/
- slurl_base
- hop://www.alifevirtual.com:8002/
-
- grid.avatarconnection.com:8002/
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- grid.avatarconnection.com:8002/
-
- grid.roleplayworlds.net:8002
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- grid.roleplayworlds.net:8002
-
- inworldz.com:8002
-
- LastModified
- 2018-08-23T21:00:00.00Z
- DEPRECATED
- TRUE
- name
- inworldz.com:8002
-
- login.avination.com/
-
- DEPRECATED
- TRUE
- name
- login.avination.com/
- LastModified
- 2018-02-28T15:36:26.43Z
-
- login.danger.osgrid.org
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- login.danger.osgrid.org
-
- reactiongrid.com:8008
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- reactiongrid.com:8008
-
- login.aurorascape.com:8002
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- login.aurorascape.com:8002
-
- vidadupla.com.br:8002
-
- DirectoryFee
- 0
- LastModified
- 2020-11-06T14:42:01.07Z
- SendGridInfoToViewerOnLogin
- true
- about
- http://vidadupla.com.br
- gatekeeper
- vidadupla.com.br:8002
- gridname
- Vida Dupla
- gridnick
- VD
- helperuri
- http://vidadupla.com.br/helper_scripts/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://vidadupla.com.br/splash
- loginuri
-
- http://vidadupla.com.br:8002/
-
- name
- vidadupla.com.br:8002
- password
- http://vidadupla.com.br:8002/wifi/forgotpassword
- platform
- OpenSim
- register
- http://vidadupla.com.br:8002/wifi/user/account/
- search
- http://vidadupla.com.br/ossearch/query.php
- slurl_base
- hop://vidadupla.com.br:8002/
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 9f7336a155..a606cc5f28 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -153,6 +153,17 @@
Value
http://phoenixviewer.com/app/fsdata/grids.xml
+ FSGridBuilderURL
+
+ Comment
+ Fetch an html page of grids from this URL.
+ Persist
+ 1
+ Type
+ String
+ Value
+ https://phoenixviewer.com/app/fsdata/fs_grid_builder.html
+
LastConnectedGrid
Comment
@@ -13750,6 +13761,17 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ FSUseLegacyUnsupportedHardwareChecks
+
+ Comment
+ If enabled, Firestorm will perform utterly pointless checks that probably made sense in 2004.
+ Persist
+ 1
+ Type
+ Boolean
+ Value
+ 0
+
FSUseStandaloneGroupFloater
Comment
diff --git a/indra/newview/fscommon.cpp b/indra/newview/fscommon.cpp
index 4f0d4a2487..cd81ad04e3 100644
--- a/indra/newview/fscommon.cpp
+++ b/indra/newview/fscommon.cpp
@@ -505,7 +505,7 @@ bool FSCommon::isFilterEditorKeyCombo(KEY key, MASK mask)
LLUUID FSCommon::getGroupForRezzing()
{
- LLUUID group_id = gAgent.getGroupID();
+ LLUUID group_id{ gAgent.getGroupID() };
LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
if (parcel && gSavedSettings.getBOOL("RezUnderLandGroup"))
@@ -523,12 +523,12 @@ LLUUID FSCommon::getGroupForRezzing()
return group_id;
}
-void FSCommon::updateUsedEmojis(LLWString text)
+void FSCommon::updateUsedEmojis(LLWStringView text)
{
LLEmojiDictionary* dictionary = LLEmojiDictionary::getInstance();
- bool emojiSent = false;
- for (llwchar& c : text)
+ bool emojiSent{ false };
+ for (const llwchar& c : text)
{
if (dictionary->isEmoji(c))
{
diff --git a/indra/newview/fscommon.h b/indra/newview/fscommon.h
index 2cd77627a9..2e7946b0e5 100644
--- a/indra/newview/fscommon.h
+++ b/indra/newview/fscommon.h
@@ -94,7 +94,7 @@ namespace FSCommon
LLUUID getGroupForRezzing();
- void updateUsedEmojis(LLWString text);
+ void updateUsedEmojis(LLWStringView text);
};
#endif // FS_COMMON_H
diff --git a/indra/newview/fsfloaterwearablefavorites.cpp b/indra/newview/fsfloaterwearablefavorites.cpp
index e0d7c3984a..0e3a79e748 100644
--- a/indra/newview/fsfloaterwearablefavorites.cpp
+++ b/indra/newview/fsfloaterwearablefavorites.cpp
@@ -313,6 +313,7 @@ void FSFloaterWearableFavorites::onFilterEdit(const std::string& search_string)
{
mItemsList->setFilterSubString(search_string, true);
mItemsList->setNoItemsCommentText(getString("empty_list"));
+ mItemsList->rearrange();
}
void FSFloaterWearableFavorites::onOptionsMenuItemClicked(const LLSD& userdata)
diff --git a/indra/newview/fsfloaterwearablefavorites.h b/indra/newview/fsfloaterwearablefavorites.h
index ee13a7e9f5..21431c7635 100644
--- a/indra/newview/fsfloaterwearablefavorites.h
+++ b/indra/newview/fsfloaterwearablefavorites.h
@@ -61,6 +61,11 @@ public:
return mDADSignal.connect(cb);
}
+ void rearrange()
+ {
+ rearrangeItems();
+ }
+
protected:
friend class LLUICtrlFactory;
FSWearableFavoritesItemsList(const Params&);
diff --git a/indra/newview/fsfloaterwhitelisthelper.cpp b/indra/newview/fsfloaterwhitelisthelper.cpp
new file mode 100644
index 0000000000..09b82b068c
--- /dev/null
+++ b/indra/newview/fsfloaterwhitelisthelper.cpp
@@ -0,0 +1,87 @@
+/**
+ * @file fsfloaterwhitelisthelper.cpp
+ * @brief Helper tool implementation to display paths to whitelist in antivirus tools
+ *
+ * $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
+ * Phoenix Firestorm Viewer Source Code
+ * Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
+ * http://www.firestormviewer.org
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "fsfloaterwhitelisthelper.h"
+#include "lltexteditor.h"
+#include "llviewercontrol.h"
+#include "lldir.h"
+
+
+FSFloaterWhiteListHelper::FSFloaterWhiteListHelper(const LLSD& key) : LLFloater(key)
+{
+}
+
+BOOL FSFloaterWhiteListHelper::postBuild()
+{
+ populateWhitelistInfo();
+ return TRUE;
+}
+
+void FSFloaterWhiteListHelper::populateWhitelistInfo()
+{
+// Hopefully we can trash this bit soon in favor of webRTC
+#if LL_WINDOWS
+ // On windows use exe (not work or RO) directory
+ std::string voiceexe_path = gDirUtilp->getExecutableDir();
+ gDirUtilp->append(voiceexe_path, "SLVoice.exe");
+#elif LL_DARWIN
+ // On MAC use resource directory
+ std::string voiceexe_path = gDirUtilp->getAppRODataDir();
+ gDirUtilp->append(voiceexe_path, "SLVoice");
+#else
+ std::string voiceexe_path = gDirUtilp->getExecutableDir();
+ bool usingWine = gSavedSettings.getBOOL("FSLinuxEnableWin64VoiceProxy");
+ if (!usingWine)
+ {
+ gDirUtilp->append(voiceexe_path, "SLVoice"); // native version
+ }
+ else
+ {
+ gDirUtilp->append(voiceexe_path, "win64/SLVoice.exe"); // use bundled win64 version
+ }
+#endif
+
+ const std::string slpluginexe_path = gDirUtilp->getLLPluginLauncher();
+
+ std::string whitelist_folder_info =
+ gDirUtilp->getExecutableDir() + "\n" // Executable Dir
+ + gDirUtilp->getOSUserAppDir() + "\n" // Top-level User Data Dir
+ + gDirUtilp->getCacheDir(); // "Cache Dir
+
+ std::string whitelist_exe_info =
+ gDirUtilp->getExecutableFilename() + "\n" // Viewer Binary
+ + gDirUtilp->getExecutablePathAndName() + "\n" // Viewer Binary full path
+ + gDirUtilp->getBaseFileName(voiceexe_path, false) + "\n" // " Voice Binary"
+ + voiceexe_path + "\n" // slvoice full path
+ + gDirUtilp->getBaseFileName(slpluginexe_path, false) + "\n" // SLPlugin Launcher Binary
+ + slpluginexe_path + "\n"; // SLPlugin Launcher full path
+
+ getChild("whitelist_folders_editor")->setText(whitelist_folder_info);
+ getChild("whitelist_exes_editor")->setText(whitelist_exe_info);
+}
diff --git a/indra/newview/fsfloaterwhitelisthelper.h b/indra/newview/fsfloaterwhitelisthelper.h
new file mode 100644
index 0000000000..6fe4f976e7
--- /dev/null
+++ b/indra/newview/fsfloaterwhitelisthelper.h
@@ -0,0 +1,44 @@
+/**
+ * @file fsfloaterwhitelisthelper.h
+ * @brief Helper tool header file to display paths to whitelist in antivirus tools
+ *
+ * $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
+ * Phoenix Firestorm Viewer Source Code
+ * Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
+ * http://www.firestormviewer.org
+ * $/LicenseInfo$
+ */
+
+#ifndef FSFLOATERWHITELISTHELPER_H
+#define FSFLOATERWHITELISTHELPER_H
+
+#include "llfloater.h"
+
+class FSFloaterWhiteListHelper : public LLFloater
+{
+public:
+ explicit FSFloaterWhiteListHelper(const LLSD& key);
+ ~FSFloaterWhiteListHelper() final = default;
+
+ BOOL postBuild() override final;
+
+private:
+ void populateWhitelistInfo();
+};
+#endif // FSFLOATERWHITELISTHELPER_H
diff --git a/indra/newview/fspanellogin.cpp b/indra/newview/fspanellogin.cpp
index 1e5e8c5019..b645b3430d 100644
--- a/indra/newview/fspanellogin.cpp
+++ b/indra/newview/fspanellogin.cpp
@@ -250,6 +250,12 @@ FSPanelLogin::FSPanelLogin(const LLRect &rect,
LLTextBox* grid_mgr_help_text = getChild("grid_login_text");
grid_mgr_help_text->setClickedCallback(onClickGridMgrHelp, NULL);
+#ifdef OPENSIM
+ LLTextBox* grid_builder_text = getChild("grid_builder_text");
+ grid_builder_text->setClickedCallback(onClickGridBuilder, NULL);
+ grid_builder_text->setVisible(true);
+#endif
+
LLSLURL start_slurl(LLStartUp::getStartSLURL());
// The StartSLURL might have been set either by an explicit command-line
// argument (CmdLineLoginLocation) or by default.
@@ -1356,6 +1362,12 @@ void FSPanelLogin::onClickGridMgrHelp(void*)
}
}
+//static
+void FSPanelLogin::onClickGridBuilder(void*)
+{
+ LLWeb::loadURLInternal(gSavedSettings.getString("FSGridBuilderURL"));
+}
+
void FSPanelLogin::onSelectUser()
{
LL_INFOS("AppInit") << "onSelectUser()" << LL_ENDL;
diff --git a/indra/newview/fspanellogin.h b/indra/newview/fspanellogin.h
index be348ac25c..5963972abd 100644
--- a/indra/newview/fspanellogin.h
+++ b/indra/newview/fspanellogin.h
@@ -111,6 +111,7 @@ private:
static void onClickRemove(void*);
static void onRemoveCallback(const LLSD& notification, const LLSD& response);
static void onClickGridMgrHelp(void*);
+ static void onClickGridBuilder(void*);
static std::string credentialName();
private:
diff --git a/indra/newview/fsradar.cpp b/indra/newview/fsradar.cpp
index 674d2a4339..7da19a4eb2 100644
--- a/indra/newview/fsradar.cpp
+++ b/indra/newview/fsradar.cpp
@@ -90,13 +90,15 @@ public:
//=============================================================================
FSRadar::FSRadar() :
- mRadarAlertRequest(false),
- mRadarFrameCount(0),
- mRadarLastBulkOffsetRequestTime(0),
- mRadarLastRequestTime(0.f),
- mShowUsernamesCallbackConnection(),
- mNameFormatCallbackConnection(),
- mAgeAlertCallbackConnection()
+ mRadarAlertRequest(false),
+ mRadarFrameCount(0),
+ mRadarLastBulkOffsetRequestTime(0),
+ mRadarLastRequestTime(0.f),
+ mShowUsernamesCallbackConnection(),
+ mNameFormatCallbackConnection(),
+ mAgeAlertCallbackConnection(),
+ mRegionCapabilitiesReceivedCallbackConnection(),
+ mRegionChangedCallbackConnection()
{
// Use the callback from LLAvatarNameCache here or we might update the names too early!
LLAvatarNameCache::getInstance()->addUseDisplayNamesCallback(boost::bind(&FSRadar::updateNames, this));
@@ -104,10 +106,18 @@ FSRadar::FSRadar() :
mNameFormatCallbackConnection = gSavedSettings.getControl("RadarNameFormat")->getSignal()->connect(boost::bind(&FSRadar::updateNames, this));
mAgeAlertCallbackConnection = gSavedSettings.getControl("RadarAvatarAgeAlertValue")->getSignal()->connect(boost::bind(&FSRadar::updateAgeAlertCheck, this));
+
+ mRegionChangedCallbackConnection = gAgent.addRegionChangedCallback([this]() { onRegionChanged(); });
}
FSRadar::~FSRadar()
{
+ gAgent.removeRegionChangedCallback(mRegionChangedCallbackConnection);
+ if (mRegionCapabilitiesReceivedCallbackConnection.connected())
+ {
+ mRegionCapabilitiesReceivedCallbackConnection.disconnect();
+ }
+
if (mShowUsernamesCallbackConnection.connected())
{
mShowUsernamesCallbackConnection.disconnect();
@@ -1040,8 +1050,35 @@ void FSRadar::updateAgeAlertCheck()
void FSRadar::updateNotes(const LLUUID& avatar_id, std::string_view notes)
{
- if (auto entry = getEntry(avatar_id); entry)
+ if (auto entry = getEntry(avatar_id))
{
entry->setNotes(notes);
}
}
+
+void FSRadar::onRegionChanged()
+{
+ if (mRegionCapabilitiesReceivedCallbackConnection.connected())
+ {
+ mRegionCapabilitiesReceivedCallbackConnection.disconnect();
+ }
+
+ if (auto region = gAgent.getRegion())
+ {
+ if (region->capabilitiesReceived())
+ {
+ for (auto& [id, entry] : mEntryList)
+ entry->requestProperties();
+ }
+ else
+ {
+ mRegionCapabilitiesReceivedCallbackConnection = region->setCapabilitiesReceivedCallback(
+ [this](const LLUUID&, LLViewerRegion*)
+ {
+ mRegionCapabilitiesReceivedCallbackConnection.disconnect();
+ for (auto& [id, entry] : mEntryList)
+ entry->requestProperties();
+ });
+ }
+ }
+}
diff --git a/indra/newview/fsradar.h b/indra/newview/fsradar.h
index 35286c1e31..a3069839db 100644
--- a/indra/newview/fsradar.h
+++ b/indra/newview/fsradar.h
@@ -119,6 +119,8 @@ private:
void radarAlertMsg(const LLUUID& agent_id, const LLAvatarName& av_name, std::string_view postMsg);
void updateAgeAlertCheck();
+ void onRegionChanged();
+
std::unique_ptr mRadarListUpdater;
struct RadarFields
@@ -150,6 +152,9 @@ private:
boost::signals2::connection mShowUsernamesCallbackConnection;
boost::signals2::connection mNameFormatCallbackConnection;
boost::signals2::connection mAgeAlertCallbackConnection;
+
+ boost::signals2::connection mRegionCapabilitiesReceivedCallbackConnection;
+ boost::signals2::connection mRegionChangedCallbackConnection;
};
#endif // FS_RADAR_H
diff --git a/indra/newview/fsradarentry.cpp b/indra/newview/fsradarentry.cpp
index 5bcd028769..d4fe667f8e 100644
--- a/indra/newview/fsradarentry.cpp
+++ b/indra/newview/fsradarentry.cpp
@@ -55,85 +55,10 @@ FSRadarEntry::FSRadarEntry(const LLUUID& avid)
mNotes(LLStringUtil::null),
mAlertAge(false),
mAgeAlertPerformed(false),
- mAvatarNameCallbackConnection(),
- mRegionCapabilitiesReceivedCallbackConnection(),
- mRegionChangedCallbackConnection()
+ mPropertiesRequested(false),
+ mAvatarNameCallbackConnection()
{
- if (mID.notNull())
- {
- // NOTE: typically we request these once on creation to avoid excess traffic/processing.
- //This means updates to these properties won't typically be seen while target is in nearby range.
- LLAvatarPropertiesProcessor* processor = LLAvatarPropertiesProcessor::getInstance();
- processor->addObserver(mID, this);
-
- if (auto region = gAgent.getRegion(); region)
- {
- if (region->capabilitiesReceived())
- {
- if (LLGridManager::instance().isInSecondLife() || region->isCapabilityAvailable(CAPNAME))
- {
- processor->sendAvatarPropertiesRequest(mID);
- }
- else
- {
- processor->sendAvatarLegacyPropertiesRequest(mID);
- processor->sendAvatarNotesRequest(mID);
- }
- }
- else
- {
- auto capsReceivedCb = [this](const LLUUID&, LLViewerRegion* reg)
- {
- if (mRegionCapabilitiesReceivedCallbackConnection.connected())
- {
- mRegionCapabilitiesReceivedCallbackConnection.disconnect();
- }
- gAgent.removeRegionChangedCallback(mRegionChangedCallbackConnection);
- if (LLGridManager::instance().isInSecondLife() || (reg && reg->isCapabilityAvailable(CAPNAME)))
- {
- LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(mID);
- }
- else
- {
- LLAvatarPropertiesProcessor::getInstance()->sendAvatarLegacyPropertiesRequest(mID);
- LLAvatarPropertiesProcessor::getInstance()->sendAvatarNotesRequest(mID);
- }
- };
-
- mRegionChangedCallbackConnection = gAgent.addRegionChangedCallback([this, capsReceivedCb]()
- {
- if (mRegionCapabilitiesReceivedCallbackConnection.connected())
- {
- mRegionCapabilitiesReceivedCallbackConnection.disconnect();
- }
-
- if (auto newregion = gAgent.getRegion(); newregion)
- {
- if (newregion->capabilitiesReceived())
- {
- gAgent.removeRegionChangedCallback(mRegionChangedCallbackConnection);
- if (LLGridManager::instance().isInSecondLife() || newregion->isCapabilityAvailable(CAPNAME))
- {
- LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(mID);
- }
- else
- {
- LLAvatarPropertiesProcessor::getInstance()->sendAvatarLegacyPropertiesRequest(mID);
- LLAvatarPropertiesProcessor::getInstance()->sendAvatarNotesRequest(mID);
- }
- }
- else
- {
- mRegionCapabilitiesReceivedCallbackConnection = newregion->setCapabilitiesReceivedCallback(capsReceivedCb);
- }
- }
- });
-
- mRegionCapabilitiesReceivedCallbackConnection = region->setCapabilitiesReceivedCallback(capsReceivedCb);
- }
- }
- }
-
+ requestProperties();
updateName();
}
@@ -147,11 +72,34 @@ FSRadarEntry::~FSRadarEntry()
{
mAvatarNameCallbackConnection.disconnect();
}
- if (mRegionCapabilitiesReceivedCallbackConnection.connected())
+}
+
+void FSRadarEntry::requestProperties()
+{
+ if (!mPropertiesRequested && mID.notNull())
{
- mRegionCapabilitiesReceivedCallbackConnection.disconnect();
+ // NOTE: typically we request these once on creation to avoid excess traffic/processing.
+ //This means updates to these properties won't typically be seen while target is in nearby range.
+ LLAvatarPropertiesProcessor* processor = LLAvatarPropertiesProcessor::getInstance();
+ processor->addObserver(mID, this);
+
+ if (auto region = gAgent.getRegion())
+ {
+ if (region->capabilitiesReceived())
+ {
+ if (LLGridManager::instance().isInSecondLife() || region->isCapabilityAvailable(CAPNAME))
+ {
+ processor->sendAvatarPropertiesRequest(mID);
+ }
+ else
+ {
+ processor->sendAvatarLegacyPropertiesRequest(mID);
+ processor->sendAvatarNotesRequest(mID);
+ }
+ mPropertiesRequested = true;
+ }
+ }
}
- gAgent.removeRegionChangedCallback(mRegionChangedCallbackConnection);
}
void FSRadarEntry::updateName()
diff --git a/indra/newview/fsradarentry.h b/indra/newview/fsradarentry.h
index 7c801d4b35..0cd9937a4d 100644
--- a/indra/newview/fsradarentry.h
+++ b/indra/newview/fsradarentry.h
@@ -68,6 +68,7 @@ public:
private:
void updateName();
void onAvatarNameCache(const LLUUID& av_id, const LLAvatarName& av_name);
+ void requestProperties();
void processProperties(void* data, EAvatarProcessorType type);
LLUUID mID;
@@ -87,10 +88,9 @@ private:
bool mIgnore;
bool mAlertAge;
bool mAgeAlertPerformed;
+ bool mPropertiesRequested;
LLAvatarNameCache::callback_connection_t mAvatarNameCallbackConnection;
- boost::signals2::connection mRegionCapabilitiesReceivedCallbackConnection;
- boost::signals2::connection mRegionChangedCallbackConnection;
};
#endif // FS_RADARENTRY_H
diff --git a/indra/newview/fsworldmapmessage.cpp b/indra/newview/fsworldmapmessage.cpp
new file mode 100644
index 0000000000..9d53bbf74c
--- /dev/null
+++ b/indra/newview/fsworldmapmessage.cpp
@@ -0,0 +1,214 @@
+/**
+ * @file fsworldmapmessage.cpp
+ * @brief FS specific extensions to world map handling for OpenSim
+ *
+ * $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
+ * Phoenix Firestorm Viewer Source Code
+ * Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
+ * http://www.firestormviewer.org
+ * $/LicenseInfo$
+ *
+ */
+// potential workaround for hop://grid:port/Partial/x/y/z resolution
+// 2024.04.30 humbletim
+
+// notes:
+// - exact MapNameRequests are sent flagless here (not using LAYER_FLAG)
+// - this is to avoid triggering OpenSim code paths that modify result names
+// - only affects LLWorldMapMessage->sendNamedRegionRequest(name, callback, ...)
+// - in particular where a grid hosts overlapping names, hop Region matching may work better
+
+#include "llviewerprecompiledheaders.h"
+
+#ifdef OPENSIM
+#include "fsworldmapmessage.h"
+
+#include "llagent.h"
+#include "llworldmap.h" // grid_to_region_handle
+#include "fsgridhandler.h"
+#include "llworldmapmessage.h"
+#include "message.h"
+#include
+
+#define htxhop_log(format, ...) LL_DEBUGS("GridManager") << llformat(format, __VA_ARGS__) << LL_ENDL;
+
+namespace hypergrid
+{
+ static inline std::string extract_region(const std::string& s)
+ {
+ static auto const& patterns = {
+ std::regex { R"(/ ([^/:=]+)$)" }, // TODO: figure out where the spec lives for hop "slash space" embedding...
+ std::regex { R"(([^/:=]+)$)" }, // TODO: figure out where the spec lives for hop "grid:port:region" embedding...
+ };
+ std::smatch match_results;
+ std::string ls{ s };
+ LLStringUtil::toLower(ls);
+ for (const auto& pattern : patterns)
+ {
+ if (std::regex_search(ls, match_results, pattern))
+ {
+ return match_results[1].str();
+ }
+ }
+ return {};
+ }
+
+ // helper to encapsulate Region Map Block responses
+ struct MapBlock
+ {
+ S32 index{};
+ U16 x_regions{}, y_regions{}, x_size{ REGION_WIDTH_UNITS }, y_size{ REGION_WIDTH_UNITS };
+ std::string name{};
+ U8 accesscode{};
+ U32 region_flags{};
+ LLUUID image_id{};
+
+ inline U32 x_world() const { return (U32)(x_regions)*REGION_WIDTH_UNITS; }
+ inline U32 y_world() const { return (U32)(y_regions)*REGION_WIDTH_UNITS; }
+ inline U64 region_handle() const { return grid_to_region_handle(x_regions, y_regions); }
+
+ // see: LLWorldMapMessage::processMapBlockReply
+ MapBlock(LLMessageSystem* msg, S32 block)
+ : index(block)
+ {
+ msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
+ msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
+ msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
+ msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
+ msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
+ // msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
+ // msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
+ msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
+ // Aurora Sim
+ if (msg->getNumberOfBlocksFast(_PREHASH_Size) > 0)
+ {
+ msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeX, x_size, block);
+ msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeY, y_size, block);
+ }
+ if (x_size == 0 || (x_size % 16) != 0 || (y_size % 16) != 0)
+ {
+ x_size = 256;
+ y_size = 256;
+ }
+ // Aurora Sim
+ }
+ };
+
+ constexpr U32 EXACT_FLAG = 0x00000000;
+ constexpr U32 LAYER_FLAG = 0x00000002;
+
+ // see: LLWorldMapMessage::sendNamedRegionRequest
+ static void sendMapNameRequest(const std::string& region_name, U32 flags)
+ {
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_MapNameRequest);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgentID);
+ msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
+ msg->addU32Fast(_PREHASH_Flags, flags);
+ msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
+ msg->addBOOLFast(_PREHASH_Godlike, false); // Filled in on sim
+ msg->nextBlockFast(_PREHASH_NameData);
+ msg->addStringFast(_PREHASH_Name, region_name);
+ gAgent.sendReliableMessage();
+ }
+
+ struct AdoptedRegionNameQuery
+ {
+ std::string key{};
+ std::string region_name{};
+ hypergrid::url_callback_t arbitrary_callback;
+ std::string arbitrary_slurl{};
+ bool arbitrary_teleport{ false };
+ };
+
+ // map extracted region names => pending query entries
+ static std::map region_name_queries;
+}
+
+bool hypergrid::sendExactNamedRegionRequest(const std::string& region_name, const url_callback_t& callback, const std::string& callback_url, bool teleport)
+{
+ if (!LLGridManager::instance().isInOpenSim() || !callback)
+ {
+ return false;
+ }
+
+ auto key = extract_region(region_name);
+ if (key.empty())
+ {
+ return false;
+ }
+ region_name_queries.try_emplace(key, AdoptedRegionNameQuery{ key, region_name, callback, callback_url, teleport });
+ htxhop_log("Send Region Name '%s' (key: %s)", region_name.c_str(), key.c_str());
+ sendMapNameRequest(region_name, EXACT_FLAG);
+ return true;
+}
+
+bool hypergrid::processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_flags)
+{
+ if (!LLGridManager::instance().isInOpenSim() || !msg || agent_flags & LAYER_FLAG)
+ {
+ return false;
+ }
+ // NOTE: we assume only agent_flags have been read from msg so far
+ S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data);
+
+ std::vector blocks;
+ blocks.reserve(num_blocks);
+ for (S32 b = 0; b < num_blocks; b++)
+ {
+ blocks.emplace_back(msg, b);
+ }
+ for (const auto& block : blocks)
+ {
+ htxhop_log("#%02d key='%s' block.name='%s' block.region_handle=%llu", block.index, extract_region(block.name).c_str(), block.name.c_str(), block.region_handle());
+ }
+ // special case: handle singular result w/empty name tho valid region handle AND singular pending query as a match
+ // (might be that a landing area / redirect hop URL is coming back: "^hop://grid:port/$", which extract_region's into "")
+ bool solo_result = blocks.size() == 2 && blocks[0].region_handle() && extract_region(blocks[0].name).empty() && !blocks[1].region_handle();
+ if (solo_result && region_name_queries.size() == 1)
+ {
+ htxhop_log("applying first block as redirect; region_handle: %llu", blocks[0].region_handle());
+ blocks[0].name = region_name_queries.begin()->second.region_name;
+ }
+
+ for (const auto& block : blocks)
+ {
+ auto key = extract_region(block.name);
+ if (key.empty())
+ {
+ continue;
+ }
+
+ auto idx = region_name_queries.find(key);
+ if (idx == region_name_queries.end())
+ {
+ continue;
+ }
+
+ auto pending{ idx->second };
+ htxhop_log("Recv Region Name '%s' (key: %s) block.name='%s' block.region_handle=%llu)", pending.region_name.c_str(),
+ pending.key.c_str(), block.name.c_str(), block.region_handle());
+ region_name_queries.erase(idx);
+ pending.arbitrary_callback(block.region_handle(), pending.arbitrary_slurl, block.image_id, pending.arbitrary_teleport);
+ return true;
+ }
+ return false;
+}
+#endif
diff --git a/indra/newview/fsworldmapmessage.h b/indra/newview/fsworldmapmessage.h
new file mode 100644
index 0000000000..3e4cca01e7
--- /dev/null
+++ b/indra/newview/fsworldmapmessage.h
@@ -0,0 +1,49 @@
+/**
+ * @file fsworldmapmessage.h
+ * @brief FS specific extensions to world map handling for OpenSim
+ *
+ * $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
+ * Phoenix Firestorm Viewer Source Code
+ * Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
+ * http://www.firestormviewer.org
+ * $/LicenseInfo$
+ */
+
+#ifndef FS_WORLDMAPMESSAGE_H
+#define FS_WORLDMAPMESSAGE_H
+
+#ifdef OPENSIM
+
+#include
+#include
+#include
+
+class LLMessageSystem;
+class LLUUID;
+
+namespace hypergrid
+{
+ // Needs to be identical to url_callback_t defined in llworldmapmessage.h
+ using url_callback_t = std::function;
+
+ bool sendExactNamedRegionRequest(const std::string& region_name, const url_callback_t& callback, const std::string& callback_url, bool teleport);
+ bool processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_flags);
+}
+#endif
+#endif // FS_WORLDMAPMESSAGE_H
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 7f4f32196f..d9b510d66e 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1163,7 +1163,7 @@ bool LLAppViewer::init()
}
// alert the user if they are using unsupported hardware
- if(!gSavedSettings.getBOOL("AlertedUnsupportedHardware"))
+ if(gSavedSettings.getBOOL("FSUseLegacyUnsupportedHardwareChecks") && !gSavedSettings.getBOOL("AlertedUnsupportedHardware"))
{
bool unsupported = false;
LLSD args;
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 61bfcc86e8..7dd70c8644 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -3375,7 +3375,7 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root
for (LLInventoryModel::item_array_t::value_type& item : items)
{
- if (get_is_item_worn(item))
+ if (!item->getIsLinkType() && get_is_item_worn(item))
{
has_worn = true;
LLWearableType::EType type = item->getWearableType();
@@ -3395,7 +3395,7 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root
}
}
LLViewerInventoryItem* item = gInventory.getItem(obj_id);
- if (item && get_is_item_worn(item))
+ if (item && !item->getIsLinkType() && get_is_item_worn(item))
{
has_worn = true;
LLWearableType::EType type = item->getWearableType();
diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp
index 6b25857068..b873c6f702 100644
--- a/indra/newview/llinventorygallery.cpp
+++ b/indra/newview/llinventorygallery.cpp
@@ -1988,7 +1988,7 @@ void LLInventoryGallery::deleteSelection()
for (LLInventoryModel::item_array_t::value_type& item : items)
{
- if (get_is_item_worn(item))
+ if (!item->getIsLinkType() && get_is_item_worn(item))
{
has_worn = true;
LLWearableType::EType type = item->getWearableType();
@@ -2009,7 +2009,7 @@ void LLInventoryGallery::deleteSelection()
}
LLViewerInventoryItem* item = gInventory.getItem(id);
- if (item && get_is_item_worn(item))
+ if (item && !item->getIsLinkType() && get_is_item_worn(item))
{
has_worn = true;
LLWearableType::EType type = item->getWearableType();
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index f63ae61e88..6729fa350f 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -232,6 +232,11 @@ BOOL LLPanelGroup::postBuild()
button = getChild("btn_refresh");
button->setClickedCallback(onBtnRefresh, this);
+ // FIRE-33939: Activate button
+ button = getChild("btn_activate");
+ button->setClickedCallback(onBtnActivateClicked, this);
+ //
+
childSetCommitCallback("back",boost::bind(&LLPanelGroup::onBackBtnClick,this),NULL);
LLPanelGroupTab* panel_general = findChild("group_general_tab_panel");
@@ -296,6 +301,7 @@ void LLPanelGroup::reposButtons()
reposButton("btn_cancel");
reposButton("btn_chat");
reposButton("btn_call");
+ reposButton("btn_activate"); // FIRE-33939: Activate button
}
void LLPanelGroup::reshape(S32 width, S32 height, BOOL called_from_parent )
@@ -347,6 +353,15 @@ void LLPanelGroup::onBtnGroupChatClicked(void* user_data)
self->chatGroup();
}
+// FIRE-33939: Activate button
+void LLPanelGroup::onBtnActivateClicked(void* user_data)
+{
+ LLPanelGroup* self = static_cast(user_data);
+ self->activateGroup();
+ self->refreshData();
+}
+//
+
void LLPanelGroup::onBtnJoin()
{
if (LLGroupActions::isInGroup(mID))
@@ -486,6 +501,15 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
if(button_chat)
button_chat->setVisible(!is_null_group_id);
+ // FIRE-33939: Activate button
+ LLButton* button_activate = findChild("btn_activate");
+ if (button_activate)
+ {
+ button_activate->setVisible(!is_null_group_id);
+ button_activate->setEnabled(group_id != gAgent.getGroupID());
+ }
+ //
+
getChild("prepend_founded_by")->setVisible(!is_null_group_id);
// TabContainer switch
@@ -566,6 +590,10 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
button_call->setVisible(false);
if(button_chat)
button_chat->setVisible(false);
+ // FIRE-33939: Activate button
+ if(button_activate)
+ button_activate->setVisible(false);
+ //
}
else
{
@@ -625,6 +653,10 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
button_call->setVisible(is_member);
if(button_chat)
button_chat->setVisible(is_member);
+ // FIRE-33939: Activate button
+ if(button_activate)
+ button_activate->setVisible(is_member);
+ //
}
// TabContainer switch
@@ -710,6 +742,12 @@ void LLPanelGroup::draw()
mRefreshTimer.stop();
childEnable("btn_refresh");
childEnable("groups_accordion");
+ // FIRE-33939: Activate button
+ if (gAgent.getGroupID() != getID())
+ {
+ childEnable("btn_activate");
+ }
+ //
}
LLButton* button_apply = findChild("btn_apply");
@@ -741,6 +779,7 @@ void LLPanelGroup::refreshData()
// 5 second timeout
childDisable("btn_refresh");
childDisable("groups_accordion");
+ childDisable("btn_activate"); // FIRE-33939: Activate button
mRefreshTimer.start();
mRefreshTimer.setTimerExpirySec(5);
@@ -756,6 +795,17 @@ void LLPanelGroup::chatGroup()
LLGroupActions::startIM(getID());
}
+// FIRE-33939: Activate button
+void LLPanelGroup::activateGroup()
+{
+ LLUUID group_id = getID();
+ if (gAgent.getGroupID() != group_id)
+ {
+ LLGroupActions::activate(group_id);
+ }
+}
+//
+
void LLPanelGroup::showNotice(const std::string& subject,
const std::string& message,
const bool& has_inventory,
diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h
index 7e7e45d980..dd4d96c7cf 100644
--- a/indra/newview/llpanelgroup.h
+++ b/indra/newview/llpanelgroup.h
@@ -76,6 +76,7 @@ public:
void refreshData();
void callGroup();
void chatGroup();
+ void activateGroup(); // FIRE-33939: Activate button
virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
@@ -102,6 +103,7 @@ protected:
static void onBtnRefresh(void*);
static void onBtnGroupCallClicked(void*);
static void onBtnGroupChatClicked(void*);
+ static void onBtnActivateClicked(void*); // FIRE-33939: Activate button
void reposButton(const std::string& name);
void reposButtons();
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index ac2459be80..459a33d111 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -627,13 +627,12 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
// [/RLVa:KB]
}
items.push_back(std::string("Task Properties"));
- // Legacy object properties
+ // Improved object properties
//if ((flags & FIRST_SELECTED_ITEM) == 0)
- if (!gSavedSettings.getBOOL("FSUseLegacyObjectProperties") && (flags & FIRST_SELECTED_ITEM) == 0)
+ //{
+ // disabled_items.push_back(std::string("Task Properties"));
+ //}
//
- {
- disabled_items.push_back(std::string("Task Properties"));
- }
// [RLVa:KB] - Checked: 2010-09-28 (RLVa-1.2.1f) | Added: RLVa-1.2.1f
items.push_back(std::string("Task Rename"));
if ( (!isItemRenameable()) || ((flags & FIRST_SELECTED_ITEM) == 0) )
@@ -1007,13 +1006,12 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
}
items.push_back(std::string("Task Properties"));
- // Legacy object properties
+ // Improved object properties
//if ((flags & FIRST_SELECTED_ITEM) == 0)
- if (!gSavedSettings.getBOOL("FSUseLegacyObjectProperties") && (flags & FIRST_SELECTED_ITEM) == 0)
+ //{
+ // disabled_items.push_back(std::string("Task Properties"));
+ //}
//
- {
- disabled_items.push_back(std::string("Task Properties"));
- }
if(isItemRenameable())
{
items.push_back(std::string("Task Rename"));
diff --git a/indra/newview/llperfstats.h b/indra/newview/llperfstats.h
index 0038d160fb..1e99fa343a 100644
--- a/indra/newview/llperfstats.h
+++ b/indra/newview/llperfstats.h
@@ -279,13 +279,16 @@ namespace LLPerfStats
auto ot{upd.objType};
auto& key{upd.objID};
+ auto& avKey{upd.avID};
auto type {upd.statType};
auto val {upd.time};
// markup to support coverage testing on stats collection
#ifdef TRACY_ENABLE
- //LL_PROFILE_ZONE_TEXT(key.toStringFast(obstr), 36);
- //LL_PROFILE_ZONE_TEXT(avKey.toStringFast(avstr), 36);
- //LL_PROFILE_ZONE_NUM(val);
+ static char obstr[36];
+ static char avstr[36];
+ LL_PROFILE_ZONE_TEXT(key.toStringFast(obstr), 36);
+ LL_PROFILE_ZONE_TEXT(avKey.toStringFast(avstr), 36);
+ LL_PROFILE_ZONE_NUM(val);
#endif
//
@@ -295,6 +298,14 @@ namespace LLPerfStats
doUpd(key, ot, type,val);
return;
}
+
+
+ if (ot == ObjType_t::OT_AVATAR)
+ {
+ // LL_INFOS("perfstats") << "Avatar update:" << LL_ENDL;
+ doUpd(avKey, ot, type, val);
+ return;
+ }
}
static inline void doUpd(const LLUUID& key, ObjType_t ot, StatType_t type, uint64_t val)
@@ -429,13 +440,13 @@ namespace LLPerfStats
//
stat.time = LLTrace::BlockTimer::getCPUClockCount64() - start;
// extra profiling coverage tracking
- #ifdef ATTACHMENT_TRACKING
- static char obstr[36];
- static char avstr[36];
- LL_PROFILE_ZONE_NUM(static_cast(stat.objType));
- LL_PROFILE_ZONE_TEXT(stat.avID.toStringFast(avstr), 36);
- LL_PROFILE_ZONE_TEXT(stat.objID.toStringFast(obstr), 36);
- LL_PROFILE_ZONE_NUM(stat.time);
+ #if TRACY_ENABLE && defined(ATTACHMENT_TRACKING)
+ // static char obstr[36];
+ // static char avstr[36];
+ // LL_PROFILE_ZONE_NUM(static_cast(stat.objType));
+ // LL_PROFILE_ZONE_TEXT(stat.avID.toStringFast(avstr), 36);
+ // LL_PROFILE_ZONE_TEXT(stat.objID.toStringFast(obstr), 36);
+ // LL_PROFILE_ZONE_NUM(stat.time);
#endif
//
StatsRecorder::send(std::move(stat));
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index bdbd53b7df..0674ba4f9c 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -229,6 +229,7 @@
#include "particleeditor.h"
#include "quickprefs.h"
#include "vjfloaterlocalmesh.h" // local mesh
+#include "fsfloaterwhitelisthelper.h" // fs whitelist helper
// handle secondlife:///app/openfloater/{NAME} URLs
@@ -649,6 +650,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("sound_explorer", "floater_NACL_explore_sounds.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
LLFloaterReg::add("vram_usage", "floater_fs_vram_usage.xml", static_cast(&LLFloaterReg::build));
LLFloaterReg::add("local_mesh_floater", "floater_vj_local_mesh.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); // local mesh
+ LLFloaterReg::add("fs_whitelist_floater", "floater_whitelist.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); // white list advisor
+
LLFloaterReg::registerControlVariables(); // Make sure visibility and rect controls get preserved when saving
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index e1d59fca20..2374e94cb4 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -9115,13 +9115,10 @@ class LLAttachmentDetach : public view_listener_t
// [RLVa:KB] - Checked: 2010-03-15 (RLVa-1.2.0a) | Modified: RLVa-1.0.5
// NOTE: copy/paste of the code in enable_detach()
- if ((rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_REMOVE)))
+ if ((rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_REMOVE)) &&
+ gRlvAttachmentLocks.isLockedAttachment(objectp->getRootEdit()))
{
- //LLObjectSelectionHandle hSelect = LLSelectMgr::getInstance()->getSelection();
- //RlvSelectHasLockedAttach f;
- //if ((hSelect->isAttachment()) && (hSelect->getFirstRootNode(&f, FALSE) != NULL))
- // return true;
- return !gRlvAttachmentLocks.isLockedAttachment(objectp->getRootEdit()); // Kitty will have to check this...
+ return false;
}
// [/RLVa:KB]
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index a0c585b18b..4c4c37de19 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -834,6 +834,7 @@ void LLViewerRegion::setRegionID(const LLUUID& region_id)
void LLViewerRegion::loadObjectCache()
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
if (mCacheLoaded)
{
return;
@@ -3126,6 +3127,7 @@ void LLViewerRegion::clearVOCacheFromMemory()
void LLViewerRegion::unpackRegionHandshake()
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
LLMessageSystem *msg = gMessageSystem;
U64 region_flags = 0;
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 994b2870ef..f0d51199ab 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -1541,6 +1541,7 @@ BOOL LLVOCache::updateEntry(const HeaderEntryInfo* entry)
bool LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_entry_map_t& cache_entry_map)
//
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
if(!mEnabled)
{
LL_WARNS() << "Not reading cache for handle " << handle << "): Cache is currently disabled." << LL_ENDL;
@@ -1559,6 +1560,7 @@ bool LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
S32 num_entries=0; // FIRE-33808 - Material Override Cache causes long delays
std::string filename;
{
+ LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("VOCache:loadRegionObjectCache");
LLUUID cache_id;
getObjectCacheFilename(handle, filename);
LLAPRFile apr_file(filename, APR_READ|APR_BINARY, mLocalAPRFilePoolp);
@@ -1567,6 +1569,7 @@ bool LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
if(success)
{
+ LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("VOCache:loadCacheForRegion");
if(cache_id != id)
{
LL_INFOS() << "Cache ID doesn't match for this region, discarding"<< LL_ENDL;
@@ -1615,6 +1618,7 @@ bool LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
// void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_gltf_overrides_map_t& cache_extras_entry_map)
void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_gltf_overrides_map_t& cache_extras_entry_map, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map)
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
int loaded= 0;
int discarded = 0;
// get ViewerRegion pointer from handle
@@ -1635,6 +1639,13 @@ void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCac
}
std::string filename(getObjectCacheExtrasFilename(handle));
+ // Material Override Cache caused long delays
+ #ifdef TRACY_ENABLE
+ static char extra_filename[256];
+ strncpy(extra_filename, filename.c_str(), 256);
+ LL_PROFILE_ZONE_TEXT(extra_filename,256);
+ #endif
+ //
llifstream in(filename, std::ios::in | std::ios::binary);
std::string line;
@@ -1714,8 +1725,10 @@ void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCac
LL_DEBUGS("GLTF") << "Beginning reading extras cache for handle " << handle << " from " << getObjectCacheExtrasFilename(handle) << LL_ENDL;
LLSD entry_llsd;
+ LL_PROFILE_ZONE_NUM(num_entries);
for (U32 i = 0; i < num_entries && !in.eof(); i++)
{
+ LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("RegionExtrasReadEntries");
static const U32 max_size = 4096;
bool success = LLSDSerialize::deserialize(entry_llsd, in, max_size);
// check bool(in) this time since eof is not a failure condition here
@@ -1756,6 +1769,7 @@ void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCac
void LLVOCache::purgeEntries(U32 size)
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
// FIRE-33808 - Material Override Cache causes long delays
LL_DEBUGS("VOCache","GLTF") << "Purging " << size << " entries from cache" << LL_ENDL;
while(mHeaderEntryQueue.size() > size)
@@ -1775,6 +1789,7 @@ void LLVOCache::purgeEntries(U32 size)
void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map, BOOL dirty_cache, bool removal_enabled)
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
// FIRE-33808 - Material Override Cache causes long delays
std::string filename;
getObjectCacheFilename(handle, filename);
@@ -1929,19 +1944,20 @@ void LLVOCache::removeGenericExtrasForHandle(U64 handle)
auto* entry = mHandleEntryMap[handle];
if (entry)
{
+ LL_WARNS("GLTF", "VOCache") << "Removing generic extras for handle " << entry->mHandle << "Filename: " << getObjectCacheExtrasFilename(handle) << LL_ENDL;
removeEntry(entry);
}
else
{
//shouldn't happen, but if it does, we should remove the extras file since it's orphaned
- LL_WARNS("GLTF", "VOCache") << "Removing generic extras for handle " << entry->mHandle << "Filename: " << getObjectCacheExtrasFilename(handle) << LL_ENDL;
- LLFile::remove(getObjectCacheExtrasFilename(entry->mHandle));
+ LLFile::remove(getObjectCacheExtrasFilename(handle));
}
}
//
void LLVOCache::writeGenericExtrasToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_gltf_overrides_map_t& cache_extras_entry_map, BOOL dirty_cache, bool removal_enabled)
{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
if(!mEnabled)
{
LL_WARNS() << "Not writing extras cache for handle " << handle << "): Cache is currently disabled." << LL_ENDL;
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
index 0426fb338c..d521f5ded9 100644
--- a/indra/newview/llworldmapmessage.cpp
+++ b/indra/newview/llworldmapmessage.cpp
@@ -36,6 +36,7 @@
// Aurora Sim
#include "llviewernetwork.h"
// Aurora Sim
+#include "fsworldmapmessage.h" // FIRE-31368: [OPENSIM] ... Search returns more than one result
const U32 LAYER_FLAG = 2;
@@ -99,6 +100,14 @@ void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name,
const std::string& callback_url,
bool teleport) // immediately teleport when result returned
{
+ // FIRE-31368: [OPENSIM] ... Search returns more than one result
+#ifdef OPENSIM
+ if (hypergrid::sendExactNamedRegionRequest(region_name, callback, callback_url, teleport))
+ {
+ return;
+ }
+#endif
+ //
//LL_INFOS("WorldMap") << LL_ENDL;
mSLURLRegionName = region_name;
mSLURLRegionHandle = 0;
@@ -160,6 +169,14 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
}
U32 agent_flags;
msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
+ // FIRE-31368: [OPENSIM] ... Search returns more than one result
+#ifdef OPENSIM
+ if (hypergrid::processExactNamedRegionResponse(msg, agent_flags))
+ {
+ return;
+ }
+#endif
+ //
// There's only one flag that we ever use here
if (agent_flags != LAYER_FLAG)
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 8d047c209f..827b64906b 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -8219,6 +8219,12 @@ void LLPipeline::renderDeferredLighting()
const F32 *c = center.getF32ptr();
F32 s = volume->getLightRadius() * 1.5f;
+ // relocated above colour calc for early exit on small lights
+ if (s <= 0.001f)
+ {
+ continue;
+ }
+ //
// send light color to shader in linear space
LLColor3 col = volume->getLightLinearColor() * light_scale;
@@ -8226,12 +8232,12 @@ void LLPipeline::renderDeferredLighting()
{
continue;
}
-
- if (s <= 0.001f)
- {
- continue;
- }
-
+ // relocated above colour calc for early exit on small lights
+ // if (s <= 0.001f)
+ // {
+ // continue;
+ // }
+ //
LLVector4a sa;
sa.splat(s);
if (camera->AABBInFrustumNoFarClip(center, sa) == 0)
diff --git a/indra/newview/skins/ansastorm/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/ansastorm/xui/en/panel_group_info_sidetray.xml
index ae98e142b9..e30d500c06 100644
--- a/indra/newview/skins/ansastorm/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/ansastorm/xui/en/panel_group_info_sidetray.xml
@@ -219,6 +219,26 @@ background_visible="false"
width="23" />
+
+
+
+
+ width="72">
+ width="71" />
+ width="72">
+ width="71" />
+ width="72">
+ width="71" />
diff --git a/indra/newview/skins/default/xui/de/floater_whitelist.xml b/indra/newview/skins/default/xui/de/floater_whitelist.xml
new file mode 100644
index 0000000000..62972ce2a1
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_whitelist.xml
@@ -0,0 +1,17 @@
+
+
+ Anti-Virus- und Anti-Malware-Software sind essenziell für die sichere Nutzung des Internet, können aber eine Vielzahl an Problem für den Viewer erzeugen.
+Um die Beinträchtigung zu minimieren und Stabilität und Performance zu erhöhen, raten wir daher eingehend alle Benutzer Ausnahmen (auch bekannt als Whitelisting) für wichtige Verzeichnisse und Programme einzurichten, die vom Viewer verwendet werden.
+
+Weitere Details hierzu finden Sie unter
+https://wiki.firestormviewer.org/antivirus_whitelisting
+
+
+ Das folgende Textfeld die Verzeichnisse angezeigt, die vom Viewer verwendet werden.
+Bitte fügen Sie diese zu den Verzeichnis-Ausnahmen hinzu.
+
+
+ Das folgende Textfeld zeigt die Namen und vollständigen Pfade der ausführbaren Dateien des Viewers an.
+Bitte fügen Sie diese zu den Ausnahmen für ausführbare Dateien hinzu hinzu.
+
+
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 1964ad640c..625d4c3485 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -283,6 +283,7 @@
+
diff --git a/indra/newview/skins/default/xui/de/panel_fs_login.xml b/indra/newview/skins/default/xui/de/panel_fs_login.xml
index 42d8bdbeee..3f5cb17650 100644
--- a/indra/newview/skins/default/xui/de/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_fs_login.xml
@@ -34,6 +34,9 @@
+
+ + Klicken um Grids hinzuzufügen
+
Gridauswahl:
diff --git a/indra/newview/skins/default/xui/de/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/de/panel_fs_nui_login.xml
index 3c8688ec84..b5e3865d9d 100644
--- a/indra/newview/skins/default/xui/de/panel_fs_nui_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_fs_nui_login.xml
@@ -37,6 +37,9 @@
Grid:
+
+ + Klicken um Grids hinzuzufügen
+
diff --git a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
index d73be4b9b4..a5e3ac68da 100644
--- a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
@@ -45,6 +45,9 @@
+
+
+
diff --git a/indra/newview/skins/default/xui/en/floater_whitelist.xml b/indra/newview/skins/default/xui/en/floater_whitelist.xml
new file mode 100644
index 0000000000..ea9df85c16
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_whitelist.xml
@@ -0,0 +1,74 @@
+
+
+Anti-virus and Anti-malware are an essential part of safe Internet use, but they can cause a variety of issues for the viewer.
+To reduce interference and improve stability and performance, we strongly advise that all users ensure that there are exclusions (known as Whitelisting) for important folders and programs that the viewer uses.
+
+For more detailed information, visit
+https://wiki.firestormviewer.org/antivirus_whitelisting
+
+
+
+To help simplify the task the box below shows the folders the viewer is using.
+Please add these to your AV folder exclusions as shown on the above wiki page.
+
+
+
+The following box is the name and full path of the viewer executables.
+Add these to you AV executable exclusions as shown in the above wiki.
+
+
+
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 1e66bd8eeb..376ae1ac99 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2642,6 +2642,13 @@
parameter="http://community.secondlife.com/t5/Blogs/ct-p/Blogs"/>
-->
+
+
+
diff --git a/indra/newview/skins/default/xui/en/panel_fs_login.xml b/indra/newview/skins/default/xui/en/panel_fs_login.xml
index 05fdee217b..eb071fed6a 100644
--- a/indra/newview/skins/default/xui/en/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_fs_login.xml
@@ -150,25 +150,25 @@
Start at:
+ allow_text_entry="true"
+ control_name="NextLoginLocation"
+ follows="left|bottom"
+ height="22"
+ max_chars="128"
+ top_pad="0"
+ name="start_location_combo"
+ width="165">
+ label="Last location"
+ name="MyLastLocation"
+ value="last" />
+ label="Home"
+ name="MyHome"
+ value="home" />
+ label="<Type region name>"
+ name="Typeregionname" value="" />
+
+ + Click to add more grids
+
+
+ + Click to add more grids
+
-
+
+
+
+
+
+ width="67">
+ width="66" />
+ width="67">
+ width="66" />
+ width="67">
+ width="66" />
diff --git a/indra/newview/skins/default/xui/fr/floater_whitelist.xml b/indra/newview/skins/default/xui/fr/floater_whitelist.xml
new file mode 100644
index 0000000000..43c7cbe09f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_whitelist.xml
@@ -0,0 +1,17 @@
+
+
+Les antivirus et les anti-logiciels malveillants sont un élément essentiel d'une utilisation sûre de l'internet, mais ils peuvent causer toute une série de problèmes à la visionneuse.
+Pour réduire les interférences et améliorer la stabilité et les performances, nous conseillons vivement à tous les utilisateurs de veiller à ce qu'il y ait des exclusions (connues sous le nom de liste blanche) pour les dossiers et les programmes importants que la visionneuse utilise.
+
+Pour plus d'informations, visitez le site
+https://wiki.firestormviewer.org/antivirus_whitelisting
+
+
+Pour vous simplifier la tâche, l'encadré ci-dessous indique les dossiers utilisés par la visionneuse.
+Veuillez les ajouter à vos exclusions de dossiers AV, comme indiqué sur la page wiki ci-dessus.
+
+
+La case suivante indique le nom et le chemin d'accès complet des exécutables de la visionneuse.
+Ajoutez-les à vos exclusions d'exécutables AV comme indiqué dans le wiki ci-dessus.
+
+
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index d71588baaf..c665dcebd1 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -267,8 +267,17 @@
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_fs_login.xml b/indra/newview/skins/default/xui/fr/panel_fs_login.xml
index 73f9e42d81..f3e1c749ac 100644
--- a/indra/newview/skins/default/xui/fr/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_fs_login.xml
@@ -17,6 +17,9 @@
+
+ + Ajouter des grilles
+
Connexion à la Grille :
diff --git a/indra/newview/skins/default/xui/fr/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/fr/panel_fs_nui_login.xml
index fb0ad900ce..f0d8968d49 100644
--- a/indra/newview/skins/default/xui/fr/panel_fs_nui_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_fs_nui_login.xml
@@ -37,6 +37,9 @@
Grille :
+
+ + Ajouter des grilles
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
index 2bb67f774e..21dd703a9f 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
@@ -9,7 +9,10 @@
Quitter
-
+
+
+
+
@@ -24,11 +27,17 @@
-
-
+
+
+
+
+
+
+
+
+
-
diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
index 96b508b01b..309de88273 100644
--- a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
@@ -36,7 +36,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/pl/floater_whitelist.xml b/indra/newview/skins/default/xui/pl/floater_whitelist.xml
new file mode 100644
index 0000000000..3225ede113
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_whitelist.xml
@@ -0,0 +1,17 @@
+
+
+ Antywirusy i oprogramowanie chroniące przed złośliwym oprogramowaniem są istotnym elementem bezpiecznego korzystania z Internetu, ale mogą powodować wiele problemów.
+Aby poprawić stabilność i wydajność zdecydowanie zalecamy, aby wszyscy użytkownicy upewnili się, że dodali do wykluczeń (tzw. białej listy) ważne foldery i programy używane przez przeglądarkę.
+
+Więcej szczegółowych informacji znajdziesz na stronie
+https://wiki.firestormviewer.org/antivirus_whitelisting
+
+
+ Aby uprościć zadanie, w polu poniżej znajdują się foldery używane przez przeglądarkę.
+Dodaj je do wykluczeń antywirusa, jak pokazano na stronie wiki powyżej.
+
+
+ Poniższe pole zawiera nazwy i ścieżki plików wykonywalnych przeglądarki.
+Dodaj je do wykluczeń antywirusa, jak pokazano na stronie wiki powyżej.
+
+
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index 0d62b2bbcf..40a5a646d4 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -298,6 +298,7 @@
-->
+
diff --git a/indra/newview/skins/default/xui/pl/panel_fs_login.xml b/indra/newview/skins/default/xui/pl/panel_fs_login.xml
index ad4302a343..dbb2a84c4f 100644
--- a/indra/newview/skins/default/xui/pl/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/pl/panel_fs_login.xml
@@ -28,6 +28,9 @@
+
+ + Kliknij, by dodać światy
+
Loguj do świata:
diff --git a/indra/newview/skins/default/xui/pl/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/pl/panel_fs_nui_login.xml
index ba215d8ec0..08af7c43a2 100644
--- a/indra/newview/skins/default/xui/pl/panel_fs_nui_login.xml
+++ b/indra/newview/skins/default/xui/pl/panel_fs_nui_login.xml
@@ -34,6 +34,9 @@
Świat:
+
+ + Kliknij, by dodać światy
+
diff --git a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
index 0024f9fa50..c7db8a20b1 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
@@ -41,11 +41,14 @@
+
+
+
-
+
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
index 2014c1bed1..cad9d4e6da 100644
--- a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
@@ -45,72 +45,72 @@
-
-
- Nazwa:
-
-
-
- Opis:
-
-
-
- Twórca:
-
-
- Właściciel:
-
-
- Grupa:
-
-
-
-
-
- Po kliku:
-
-
-
-
-
-
-
-
-
-
-
-
-
- Możesz modyfikować ten obiekt
+
+
+ Nazwa:
-
- Każdy:
+
+
+ Opis:
-
-
-
+
+
+ Twórca:
+
+
+ Właściciel:
+
+
Grupa:
-
-
- Nast. właściciel:
+
+
+
+
+ Po kliku:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Możesz modyfikować ten obiekt
+
+
+ Każdy:
+
+
+
+
+ Grupa:
+
+
+
+ Nast. właściciel:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Atrybuty odnajd. ścieżek:
-
-
-
-
-
-
-
-
-
-
-
-
- Atrybuty odnajd. ścieżek:
-
-
diff --git a/indra/newview/skins/default/xui/ru/floater_emoji_picker.xml b/indra/newview/skins/default/xui/ru/floater_emoji_picker.xml
index 56286fbca0..f12f3d2751 100644
--- a/indra/newview/skins/default/xui/ru/floater_emoji_picker.xml
+++ b/indra/newview/skins/default/xui/ru/floater_emoji_picker.xml
@@ -2,5 +2,6 @@
+
Эмодзи не выбраны
diff --git a/indra/newview/skins/default/xui/ru/floater_media_browser.xml b/indra/newview/skins/default/xui/ru/floater_media_browser.xml
index dae566a102..eb0f9c0e25 100644
--- a/indra/newview/skins/default/xui/ru/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/ru/floater_media_browser.xml
@@ -11,7 +11,7 @@
-
+
@@ -19,11 +19,18 @@
-
+
+
+Похоже, что плагин для веб-браузера открывается не сразу.
+Если плагин не загружается, пожалуйста, посетите сайт:
+
+https://wiki.firestormviewer.org/fs_media
+
+для информации о возможных действиях по устранению этой проблемы.
+
-
diff --git a/indra/newview/skins/default/xui/ru/floater_preview_gesture.xml b/indra/newview/skins/default/xui/ru/floater_preview_gesture.xml
index fde2cea00e..e2ac451300 100644
--- a/indra/newview/skins/default/xui/ru/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/ru/floater_preview_gesture.xml
@@ -62,12 +62,13 @@
-
-
+
+
+
Все шаги выполняются одновременно, если только вы не добавите шаги ожидания.
-
+
diff --git a/indra/newview/skins/default/xui/ru/floater_whitelist.xml b/indra/newview/skins/default/xui/ru/floater_whitelist.xml
new file mode 100644
index 0000000000..f202a6b919
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_whitelist.xml
@@ -0,0 +1,17 @@
+
+
+Антивирус и защита от вредоносных программ являются неотъемлемой частью безопасного использования Интернета, но они могут вызвать целый ряд проблем у пользователя.
+Чтобы уменьшить помехи и повысить стабильность и производительность, мы настоятельно рекомендуем всем пользователям убедиться в наличии исключений (известных как Белый список) для важных папок и программ, которые использует программа просмотра.
+
+Для получения более подробной информации посетите веб-сайт
+https://wiki.firestormviewer.org/antivirus_whitelisting
+
+
+Чтобы упростить задачу, в поле ниже указаны папки, которые использует программа просмотра.
+Пожалуйста добавьте их в список исключений антивируса для папок, как показано на вики-странице выше.
+
+
+В следующем поле указаны название и полный путь к исполняемым файлам программы просмотра.
+Добавьте их в список исключений антивируса для файлов, как показано на вики-странице выше.
+
+
diff --git a/indra/newview/skins/default/xui/ru/menu_inventory.xml b/indra/newview/skins/default/xui/ru/menu_inventory.xml
index 2eda6a3162..f318d3abd3 100644
--- a/indra/newview/skins/default/xui/ru/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ru/menu_inventory.xml
@@ -18,6 +18,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml b/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml
index 3c7683dbe8..7d3b953db7 100644
--- a/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/ru/menu_outfit_tab.xml b/indra/newview/skins/default/xui/ru/menu_outfit_tab.xml
index 7af60b5901..5c117d95fb 100644
--- a/indra/newview/skins/default/xui/ru/menu_outfit_tab.xml
+++ b/indra/newview/skins/default/xui/ru/menu_outfit_tab.xml
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 151e3a7ce9..26796ab91f 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -37,7 +37,7 @@
-
+
+
+ + Нажмите чтобы добавить больше сеток
+
Подключиться к сетке:
diff --git a/indra/newview/skins/default/xui/ru/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/ru/panel_fs_nui_login.xml
index 4d1ae4bc90..b64cdf63c9 100644
--- a/indra/newview/skins/default/xui/ru/panel_fs_nui_login.xml
+++ b/indra/newview/skins/default/xui/ru/panel_fs_nui_login.xml
@@ -33,6 +33,7 @@
Сеть:
+ + Нажмите чтобы добавить больше сеток
Режим:
diff --git a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml
index 73675bd355..a404787736 100644
--- a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml
@@ -9,9 +9,10 @@
Присоединиться (L$[AMOUNT])
-
- Бесплатно
-
+ Бесплатно
+ Член
+ Вступить
+ Покинуть
diff --git a/indra/newview/skins/default/xui/ru/panel_group_list_item.xml b/indra/newview/skins/default/xui/ru/panel_group_list_item.xml
index 7327582c0c..7355b56513 100644
--- a/indra/newview/skins/default/xui/ru/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_list_item.xml
@@ -1,6 +1,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/panel_group_list_item_short.xml b/indra/newview/skins/default/xui/ru/panel_group_list_item_short.xml
index bd4851f724..2dbb10f283 100644
--- a/indra/newview/skins/default/xui/ru/panel_group_list_item_short.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_list_item_short.xml
@@ -1,6 +1,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/panel_profile_secondlife.xml b/indra/newview/skins/default/xui/ru/panel_profile_secondlife.xml
index 30db74528b..53e4a4e2a0 100644
--- a/indra/newview/skins/default/xui/ru/panel_profile_secondlife.xml
+++ b/indra/newview/skins/default/xui/ru/panel_profile_secondlife.xml
@@ -68,6 +68,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
index 00603547da..7475a8033a 100644
--- a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
@@ -83,8 +83,8 @@
-
+
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index f9fe87dcbb..97b0cecaef 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -1444,6 +1444,20 @@ https://www.firestormviewer.org/support за помощь в решении эт
Исполняемые файлы программы
+
+ Недопустимая числовая строка: "[STR]"
+ Недопустимый начальный символ: '[CH]' (не должно быть минусом)
+ Недопустимый начальный символ: '[CH]' (не должно быть ни минуса, ни нуля)
+ Недопустимый символ [NR]: '[CH]' (должна быть только цифра)
+ Недопустимый символ [NR]: '[CH]' (должна быть только цифра или десятичная точка)
+ Недопустимый символ [NR]: '[CH]' (должна быть только цифра или буквенно-цифровой символ ASCII)
+ Недопустимый символ [NR]: '[CH]' (должна быть только цифра или буквенно-цифровой символ ASCII или пробел)
+ Недопустимый символ [NR]: '[CH]' (должна быть только цифра или буквенно-цифровой символ ASCII или пунктуация)
+ Недопустимый символ [NR]: '[CH]' (должна быть только цифра или буквенно-цифровой символ ASCII или пунктуация без пробела)
+ Недопустимый символ [NR]: '[CH]' (должна быть только цифра без пробела)
+ Недопустимый символ [NR]: '[CH]' (должен быть только символ ASCII)
+ Недопустимый символ [NR]: '[CH]' (должен быть только символ ASCII или новая строка)
+
Пауза скрипта на [SLEEP_TIME] секунд.
@@ -5297,9 +5311,12 @@ https://www.firestormviewer.org/support за помощь в решении эт
танец8
-
+
[day,datetime,utc].[mthnum,datetime,utc].[year,datetime,utc]
+
+ [day,datetime,utc].[mthnum,datetime,utc]
+
[day,datetime,slt].[mthnum,datetime,slt].[year,datetime,slt]
@@ -5417,7 +5434,8 @@ https://www.firestormviewer.org/support за помощь в решении эт
Для этого комплекта одежды нет вещей
- Выберите редактор, используя параметр ExternalEditor.
+ Выберите редактор, установив переменную среды LL_SCRIPT_EDITOR или параметр Внешнего Редактора.
+смотрите https://wiki.secondlife.com/wiki/LSL_Alternate_Editors
Не удается найти указанный внешний редактор.
@@ -6580,6 +6598,9 @@ ID объекта: [INSPECTING_KEY]
сработало возрастное предупреждение. Возраст: [AGE] дней
+
+ н.д.
+
Количество скриптов в регионе возросло с [OLD_VALUE] до [NEW_VALUE] ([DIFFERENCE]).
diff --git a/indra/newview/skins/firestorm/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/firestorm/xui/en/panel_group_info_sidetray.xml
index ae98e142b9..e30d500c06 100644
--- a/indra/newview/skins/firestorm/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/firestorm/xui/en/panel_group_info_sidetray.xml
@@ -219,6 +219,26 @@ background_visible="false"
width="23" />
+
+
+
+
+ width="72">
+ width="71" />
+ width="72">
+ width="71" />
+ width="72">
+ width="71" />
diff --git a/indra/newview/skins/metaharper/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/metaharper/xui/en/panel_group_info_sidetray.xml
index b1c4aa1e80..5904287ef8 100644
--- a/indra/newview/skins/metaharper/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/metaharper/xui/en/panel_group_info_sidetray.xml
@@ -209,6 +209,25 @@ background_visible="true"
orientation="horizontal"
top_delta="2"
width="445">
+
+
+
+
+ width="67">
+ width="66" />
+ width="77">
+ width="76" />
+ width="57">
+ width="56" />
diff --git a/indra/newview/skins/starlight/textures/textures.xml b/indra/newview/skins/starlight/textures/textures.xml
index 52eecf460e..dd8ffeb6f8 100755
--- a/indra/newview/skins/starlight/textures/textures.xml
+++ b/indra/newview/skins/starlight/textures/textures.xml
@@ -868,8 +868,8 @@ with the same filename but different name
-
-
+
+
diff --git a/indra/newview/skins/starlight/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/starlight/xui/en/panel_group_info_sidetray.xml
index acbb324bb1..86e6d66451 100644
--- a/indra/newview/skins/starlight/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/starlight/xui/en/panel_group_info_sidetray.xml
@@ -268,7 +268,25 @@ background_visible="true"
orientation="horizontal"
top_delta="0"
width="279">
-
+
+
+
+
+
+ width="72">
+ width="71" />
+ width="72">
+ width="71" />
+ width="72">
+ width="71" />