summaryrefslogtreecommitdiff
path: root/indra
AgeCommit message (Collapse)Author
2020-03-25DRTVWR-494: Move explanatory comments from LLSingleton to LockStatic.Nat Goodspeed
2020-03-25DRTVWR-494: Add llmake_heap(); update to variadic llmake().Nat Goodspeed
2020-03-25DRTVWR-494: Extract LockStatic as a standalone template class.Nat Goodspeed
The pattern of requiring a lock to permit *any* access to a static instance of something seems generally useful. Break out lockstatic.h; recast LLInstanceTracker to use it. Moving LockStatic to an external template class instead of a nested class in LLInstanceTrackerBase leaves LLInstanceTrackerBase pretty empty. Get rid of it. And *that* means we can move the definition of the StaticData used by each LLInstanceTracker specialization into the class itself, rather than having to define it beforehand in namespace LLInstanceTrackerStuff.
2020-03-25DRTVWR-494: Streamline LLSingleton state machine.Nat Goodspeed
The CONSTRUCTED state was only briefly set between constructSingleton() and finishInitializing(). But as no consumer code is executed between setting CONSTRUCTED and setting INITIALIZING, it was impossible to reach the switch statement in either getInstance() method in state CONSTRUCTED. So there was no point in state CONSTRUCTED. Remove it. With CONSTRUCTED gone, we only ever call finishInitializing() right after constructSingleton(). Merge finishInitializing() into constructSingleton().
2020-03-25DRTVWR-494: Encapsulate redundant VS boilerplate around <mutex>.Nat Goodspeed
2020-03-25DRTVWR-494: Streamline LLEventTimer::updateClass().Nat Goodspeed
No need to capture a separate list of completed LLEventTimer instances to delete after the primary loop, since at this point we're looping over a snapshot and can directly delete each completed timer.
2020-03-25DRTVWR-494: Add on_main_thread(), sibling to assert_main_thread().Nat Goodspeed
2020-03-25DRTVWR-494: Improve thread safety of LLSingleton machinery.Nat Goodspeed
Remove warnings about LLSingleton not being thread-safe because, at this point, we have devoted considerable effort to trying to make it thread-safe. Add LLSingleton<T>::Locker, a nested class which both provides a function- static mutex and a scoped lock that uses it. Instantiating Locker, which has a nullary constructor, replaces the somewhat cumbersome idiom of declaring a std::unique_lock<std::recursive_mutex> lk(getMutex); This eliminates (or rather, absorbs) the typedefs and getMutex() method from LLParamSingleton. Replace explicit std::unique_lock declarations in LLParamSingleton methods with Locker declarations. Remove LLSingleton<T>::SingletonInitializer nested struct. Instead of getInstance() relying on function-static initialization to protect (only) constructSingleton() calls, explicitly use a Locker instance to cover its whole scope, and make the UNINITIALIZED case call constructSingleton(). Rearrange cases so that after constructSingleton(), control falls through to the CONSTRUCTED case and the finishInitializing() call. Use a Locker instance in other public-facing methods too: instanceExists(), wasDeleted(), ~LLSingleton(). Make destructor protected so it can only be called via deleteSingleton() (but must be accessible to subclasses for overrides). Remove LLSingletonBase::get_master() and get_initializing(), which permitted directly manipulating the master list and the initializing stack without any locking mechanism. Replace with get_initializing_size(). Similarly, replace LLSingleton_manage_master::get_initializing() with get_initializing_size(). Use in constructSingleton() in place of get_initializing().size(). Remove LLSingletonBase::capture_dependency()'s list_t parameter, which accepted the list returned by get_initializing(). Encapsulate that retrieval within the scope of the new lock in capture_dependency(). Add LLSingleton_manage_master::capture_dependency(LLSingletonBase*, EInitState) to forward (or not) a call to LLSingletonBase::capture_dependency(). Nullary LLSingleton<T>::capture_dependency() calls new LLSingleton_manage_master method. Equip LLSingletonBase::MasterList with a mutex of its own, separate from the one donated by the LLSingleton machinery, to serialize use of MasterList data members. Introduce MasterList::Lock nested class to lock the MasterList mutex while providing a reference to the MasterList instance. Introduce subclasses LockedMaster, which provides a reference to the actual mMaster master list while holding the MasterList lock; and LockedInitializing, which does the same for the initializing list. Make mMaster and get_initializing_() private so that consuming code can *only* access those lists via LockedInitializing and LockedMaster. Make MasterList::cleanup_initializing_() private, with a LockedInitializing public forwarding method. This avoids another call to MasterList::instance(), and also mandates that the lock is currently held during every call. Similarly, move LLSingletonBase::log_initializing() to a LockedInitializing log() method. (transplanted from dca0f16266c7bddedb51ae7d7dca468ba87060d5)
2020-03-25DRTVWR-494: Quiet VS warnings about its own <mutex> header.Nat Goodspeed
2020-03-25DRTVWR-494: Defend LLInstanceTracker against multi-thread usage.Nat Goodspeed
The previous implementation went to some effort to crash if anyone attempted to create or destroy an LLInstanceTracker subclass instance during traversal. That restriction is manageable within a single thread, but becomes unworkable if it's possible that a given subclass might be used on more than one thread. Remove LLInstanceTracker::instance_iter, beginInstances(), endInstances(), also key_iter, beginKeys() and endKeys(). Instead, introduce key_snapshot() and instance_snapshot(), the only means of iterating over LLInstanceTracker instances. (These are intended to resemble functions, but in fact the current implementation simply presents the classes.) Iterating over a captured snapshot defends against container modifications during traversal. The term 'snapshot' reminds the coder that a new instance created during traversal will not be considered. To defend against instance deletion during traversal, a snapshot stores std::weak_ptrs which it lazily dereferences, skipping on the fly any that have expired. Dereferencing instance_snapshot::iterator gets you a reference rather than a pointer. Because some use cases want to delete all existing instances, add an instance_snapshot::deleteAll() method that extracts the pointer. Those cases used to require explicitly copying instance pointers into a separate container; instance_snapshot() now takes care of that. It remains the caller's responsibility to ensure that all instances of that LLInstanceTracker subclass were allocated on the heap. Replace unkeyed static LLInstanceTracker::getInstance(T*) -- which returned nullptr if that instance had been destroyed -- with new getWeak() method returning std::weak_ptr<T>. Caller must detect expiration of that weak_ptr. Adjust tests accordingly. Use of std::weak_ptr to detect expired instances requires engaging std::shared_ptr in the constructor. We now store shared_ptrs in the static containers (std::map for keyed, std::set for unkeyed). Make LLInstanceTrackerBase a template parameterized on the type of the static data it manages. For that reason, hoist static data class declarations out of the class definitions to an LLInstanceTrackerStuff namespace. Remove the static atomic sIterationNestDepth and its methods incrementDepth(), decrementDepth() and getDepth(), since they were used only to forbid creation and destruction during traversal. Add a std::mutex to static data. Introduce an internal LockStatic class that locks the mutex while providing a pointer to static data, making that the only way to access the static data. The LLINSTANCETRACKER_DTOR_NOEXCEPT macro goes away because we no longer expect ~LLInstanceTracker() to throw an exception in test programs. That affects LLTrace::StatBase as well as LLInstanceTracker itself. Adapt consumers to the new LLInstanceTracker API.
2020-03-25DRTVWR-494: Show copy-paste-friendly env vars and test command.Nat Goodspeed
Moderately often I want to copy the (long) integration test program path from build output and rerun the test program by hand. But typically we need environment variables set as well so it can find its dynamic libraries. This has resulted in my copying parts of several lines of build output, then pasting to a command prompt, then hand-tweaking the pasted text so it makes sense as a command. Streamline run_build_test.py output so less hand-tweaking is needed.
2020-03-24Merge cleanupRunitai Linden
2020-03-24Merge branch 'DRTVWR-440' of bitbucket.org:lindenlab/viewer into ↵Runitai Linden
davep/DRTVWR-440
2020-03-24Fix for bad fullbright shiny shininess values and inconsistency between ↵Runitai Linden
materialF and fullbrightShinyF
2020-03-20WIP - Make EEP match production.Runitai Linden
2020-03-19SL-12607 FMOD LogoAndrey Kleshchev
2020-03-19Merged in SL-11589 (pull request #44)Michael Pohoreski
SL-11589 Approved-by: Dave Houlton <euclid@lindenlab.com>
2020-03-19SL-11445 Fix crash caused by wind cleanupAndrey Kleshchev
2020-03-19Merged master into sl-11445_fmodstudioAndrey Kleshchev
2020-03-19SL-11589 Remove redundant setting vary_texcoord0, cleanup groupingPtolemy
2020-03-19SL-11589 Fix clouds drooping below horizonPtolemy
2020-03-18SL-12574 Cleanup unused final_attenPtolemy
2020-03-18SL-12574 Fix environmentMap being too dark on EEPPtolemy
2020-03-18SL-12574 Add note about duplicated procedurally generated sky texturePtolemy
2020-03-18SL-12865, add bias to alpha mask values to avoid 8-bit acneDave Houlton
2020-03-18Merge master (v 6.3.9) into DRTVWR-440Dave Houlton
2020-03-18Merge branch 'master' into DRTVWR-460Andrey Lihatskiy
2020-03-18Merge branch 'master' into DRTVWR-500Andrey Lihatskiy
2020-03-18Increment viewer version to 6.3.9Nat Goodspeed
following promotion of DRTVWR-481
2020-03-17SL-10449 remove soft gamma adjustment that breaks Mac GLSL compilerDave Houlton
2020-03-17Merged in SL-12574_tweak_brightness (pull request #39)Michael Pohoreski
SL-12574: Tweak sky cubemap to not be as dark to better match Windlight Approved-by: Dave Houlton <euclid@lindenlab.com>
2020-03-17SL-12858 Fixed bad mergeAndrey Kleshchev
2020-03-16SL-12574: Tweak sky cubemap to not be as dark to better match WindlightPtolemy
2020-03-16Add missing fullbrightAtmosTransportFrag stub.Runitai Linden
2020-03-16SL-4495 Add setting to ignore Hover height when setting Camera positionmaxim_productengine
2020-03-13Merged in davep/DRTVWR-440 (pull request #36)Dave Parks
SL-12005 Fix for projectors getting brighter when switching to single light shader.
2020-03-13SL-12005 Fix for projectors getting brighter when switching to single light ↵Runitai Linden
shader.
2020-03-13Merged in SL-12781 (pull request #32)Michael Pohoreski
SL-12781 Approved-by: Dave Houlton <euclid@lindenlab.com>
2020-03-13SL-12784 disambiguate vertex_color.a of 0Dave Houlton
2020-03-13SL-12850 Adhere to coding standardPtolemy
2020-03-13SL-12850 remove debugPtolemy
2020-03-13SL-12850Ptolemy
2020-03-13Merged in davep/DRTVWR-440 (pull request #33)Dave Parks
SL-12233 Fix for disagreement between fullbright implementations with ALM on and off.
2020-03-13SL-12233 Fix for disagreement between fullbright implementations with ALM on ↵Runitai Linden
and off.
2020-03-12SL-12781 Remove expensive and redundant z clear; instead enable/disable z ↵Ptolemy
test for background and model preview
2020-03-12SL-12781 Cleanup: Remove HACK / MAGIC NUMBER effective constant of ↵Ptolemy
mCameraDistance as it is set in setPreviewTarget() via initModelPreview()
2020-03-12SL-12781 Cleanup: Rename non-descript generic var namePtolemy
2020-03-12SL-12781 Cleanup: Update out-of-date color commentPtolemy
2020-03-12SL-12781 Fix Upload 3D Preview not using z-bufferPtolemy
2020-03-12SL-12784 restore vertex color alpha contributionDave Houlton