summaryrefslogtreecommitdiff
path: root/indra/llcommon/llfasttimer.cpp
AgeCommit message (Collapse)Author
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.
2015-11-10remove execute permission from many files that should not have itOz Linden
2014-03-12merge with releaseRichard Linden
2014-02-06added LL_TRACE_ENABLED to allow disabling of lltraceRichard Linden
2014-02-14More memory cleanup of containers after DeletePairedPointer() usage.simon
2013-10-23moved some common functionality from LLTrace::BlockTimerStatHandle to BlockTimerRichard Linden
updates appearance utility dependency
2013-10-18crash fix - bad handling of instancetracker iteratorsRichard Linden
2013-10-17moved root timer to global variableRichard Linden
added flag to LLInstanceTracker to allow multiple values per key made StatType allow multiple values per key to eliminate block timer related crash
2013-10-16moved tree iterators into llfasttimer.hRichard Linden
2013-10-15renamed TimeBlock to BlockTimerStatHandleRichard Linden
2013-10-07renamed TraceType to StatTypeRichard Linden
added more MemTrackable types optimized memory usage of LLTrace some more
2013-09-25better memory usage for LLTrace (tighter packing of recording arrays)Richard Linden
removed complicated and unnecessary fast timer gapless handoff logic (it should be gapless anyway) improved MemTrackable API, better separation of shadow and footprint added memory usage stats to floater_stats.xml
2013-09-07mergeRichard Linden
2013-09-07added memory usage and occlusion events to tracesRichard Linden
renamed "current" to "primary" when referring to accumulators
2013-09-05changed fast timer over to using macroRichard Linden
another attempt to move mem stat into base class
2013-08-27broke out llunit.h into llunittype.h and llunits.h for unit declarationsRichard Linden
changed unit declarations macros to make a lot more sense
2013-08-21SH-4433 WIP Interesting: Statistics > Ping Sim is always 0 msRichard Linden
made getPrimaryAccumulator return a reference since it was an always non-null pointer changed unit conversion to perform lazy division in order to avoid truncation of timer values
2013-08-19BUILDFIX: fixed some units errorsRichard Linden
2013-08-15moved unit types out of LLUnits namespace, since they are prefixedRichard Linden
2013-08-14BUILDFIX: added header for numeric_limits support on gccRichard Linden
added convenience types for units F32Seconds, etc.
2013-08-09second phase summer cleaningRichard Linden
replace llinfos, lldebugs, etc with new LL_INFOS(), LL_DEBUGS(), etc.
2013-08-09SH-4374 FIX Interesting: Statistics Object cache hit rate is always 100%Richard Linden
moved object cache sampling code so that it actually gets executed default values for stats are NaN instead of 0 in many cases
2013-07-31cleanup - renamed valueAs to valueInUnits and made it a symmetrical ↵Richard Linden
getter/setter
2013-07-19BUILDFIX: #include and dependency cleanupRichard Linden
2013-07-18SH-4297 WIP interesting: viewer-interesting starts loading cached scene lateRichard Linden
fixed ostream precision munging in llsys
2013-07-01SH-4294 FIX Interesting: Statistics Texture cache hit rate is always 0%Richard Linden
also, removed LLTrace::init and cleanup removed derived class implementation of memory stat for LLMemTrackable is automatic now
2013-06-30fixed memory leak due to implementation of LLThreadLocalSingletonRichard Linden
removed LLThreadLocalSingleton collapsed all thread recorder classes to single type, LLTrace::ThreadRecorder moved fasttimer stack head to llthreadlocalsingletonpointer via ThreadRecorder
2013-06-28SH-4299 FIX Interesting: High fps shown temporarily off scale in statistics ↵Richard Linden
console added ability to force uniqueness of LLCopyOnWritePointer converted more variables to units added convenience function for unit constants
2013-06-21Automated merge with file:///F:%5Cviewer-bearDave Parks
2013-06-20merge with releaseRichard Linden
2013-06-19SH-4246 FIX interesting: fast timers significantly decreases framerateRichard Linden
moved collapsed flag to fast timer tree node
2013-06-18SH-4246 FIX interesting: fast timers significantly decreases framerateRichard Linden
removed implicit flushes on reads from recorders for better performance made sure stack timers were updated on recorder deactivate faster rendering and better ui for fast timer view
2013-06-17SH-3931 WIP Interesting: Add graphs to visualize scene load metricsRichard Linden
added getAs and setAs to LLUnit to make it clearer how you specify units removed accidental 0-based indexing of periodicRecording history... should now be consistently 1-based, with 0 accessing current active recording removed per frame timer updates of all historical timer bars in fast timer display added missing assignment operator to recordings
2013-06-13SH-3931 WIP Interesting: Add graphs to visualize scene load metricsRichard Linden
changed Units macros and argument order to make it more clear optimized units for integer types fixed merging of periodicrecordings...should eliminate duplicate entries in sceneloadmonitor history
2013-06-05merge with viewer-releaseRichard Linden
2013-05-30SH-3931 WIP Interesting: Add graphs to visualize scene load metricsRichard Linden
reverted SlaveThreadRecorder update gating moved processTimes() outside of Recording, so it is called only once per frame refined sample merge logic so that multi-threaded samples do not stomp on linear history of a stat
2013-05-09Merge downstream code and viewer-betasimon
2013-05-01Merge vwr-dev-matGraham Madarasz
2013-04-30Merge 3.5.1 into MaterialsGraham Madarasz
2013-04-24diff -r 59c7bed66dfd indra/llcommon/lleventapi.hsimon
2013-04-19merge changes for DRTVWR-294Oz Linden
2013-04-11Automated merge with ssh://hg.lindenlab.com/richard/viewer-interesting-metricsRichard Linden
2013-04-10SH-3931 WIP Interesting: Add graphs to visualize scene load metricsRichard Linden
removed PeriodicRecording::getTotalRecording as it was showing up at the top on the profiler renamed getPrevRecordingPeriod, etc. to getPrevRecording
2013-03-29Update Mac and Windows breakpad builds to latestGraham Madarasz
2013-03-25BUILDFIX gcc fixRichard Linden
2013-03-22merge with viewer-releaseRichard Linden
2013-02-13SH-3275 FIX interesting Update viewer metrics system to be more flexibleRichard Linden
fix for inaccurate optimization of full block time calculations
2013-02-10SH-3275 FIX interesting Update viewer metrics system to be more flexibleRichard Linden
streamlined fast timer delta tracking
2013-02-09SH-3275 FIX interesting Update viewer metrics system to be more flexibleRichard Linden
fixed anamolous LLFastTimer timings
2013-02-08Automated merge with ssh://hg.lindenlab.com/richard/viewer-interesting-metricsRichard Linden