summaryrefslogtreecommitdiff
path: root/indra/newview/llappviewer.cpp
AgeCommit message (Collapse)Author
2021-11-12SL-16220: Merge branch 'origin/DRTVWR-546' into glthreadNat Goodspeed
2021-11-12SL-15993 Disabling transparent water should not disable advanced lightingAndrey Kleshchev
2021-11-04SL-16202: Use large WorkQueue size limits for mainloop and General.Nat Goodspeed
Give ThreadPool and WorkQueue the ability to override default ThreadSafeSchedule capacity. Instantiate "mainloop" WorkQueue and "General" ThreadPool with very large capacity because we never want to have to block trying to push to either.
2021-11-04SL-16202: Streamline WorkQueues in LLImageGLThread.Nat Goodspeed
Use the new WorkQueue::postIfOpen() method in LLImageGLThread::post(). That makes the LLImageGLThread method a trivial wrapper, which can accept templated work items and pass them through to the WorkQueue method, eliminating double indirection due to multiple layers of std::function. Eliminate LLImageGLThread's WorkQueue intended for work on the main queue. Since the main loop already has a WorkQueue of its own, post work directly to that WorkQueue instead of using a separate WorkQueue misleadingly embedded in LLImageGLThread. Instead of looking up the main thread's WorkQueue every time, capture a pointer in LLImageGL's constructor. We no longer need a fallback queue for when the main thread's WorkQueue is full. We no longer need the main loop to poll LLImageGL to service the local main-thread-targeted WorkQueue, or to copy work from the fallback queue to the main queue. That eliminates LLImageGLThread::postCallback(), mCallbackQueue, mPendingCallbackQ, executeCallbacks() -- and even LLImageGL::updateClass() and LLAppViewer's call to it. Change LLViewerFetchedTexture::scheduleCreateTexture() to post work to the main thread's WorkQueue instead of calling LLImageGLThread::postCallback().
2021-11-04SL-16202: Merge branch 'sl-16220' into glthreadNat Goodspeed
2021-10-28SL-16148 SL-16244 SL-16270 SL-16253 Remove most BlockTimers, remove ↵Dave Parks
LLMemTracked, introduce alignas, hook most/all reamining allocs, disable synchronous occlusion, and convert frequently accessed LLSingletons to LLSimpleton
2021-10-25SL-16246 protect null deferenceDave Houlton
2021-10-22mergeBrad Payne (Vir Linden)
2021-10-22SL-16220: Merge branch 'master' into sl-16220Nat Goodspeed
2021-10-22SL-16220: Add LL::ThreadPool class and a "General" instance.Nat Goodspeed
ThreadPool bundles a WorkQueue with the specified number of worker threads to service it. Each ThreadPool has a name that can be used to locate its WorkQueue. Each worker thread calls WorkQueue::runUntilClose(). ThreadPool listens on the "LLApp" LLEventPump for shutdown notification. On receiving that, it closes its WorkQueue and then join()s each of its worker threads for orderly shutdown. Add a settings.xml entry "ThreadPoolSizes", the first LLSD-valued settings entry to expect a map: pool name->size. The expectation is that usually code instantiating a particular ThreadPool will have a default size in mind, but it should check "ThreadPoolSizes" for a user override. Make idle_startup()'s STATE_SEED_CAP_GRANTED state instantiate a "General" ThreadPool. This is function-static for lazy initialization. Eliminate LLMainLoopRepeater, which is completely unreferenced. Any potential future use cases are better addressed by posting to the main loop's WorkQueue. Eliminate llappviewer.cpp's private LLDeferredTaskList class, which implemented LLAppViewer::addOnIdleCallback(). Make addOnIdleCallback() post work to the main loop's WorkQueue instead.
2021-10-20SL-16220: Add a WorkQueue to be serviced by mainloop.Nat Goodspeed
Make LLAppViewer::idle() call LL::WorkQueue::runFor() to dequeue and run some or all of the pending responses from worker threads. Add a MainWorkTime setting to specify the time slice the main loop may devote each frame to servicing such responses.
2021-10-13Merge branch 'master' v6.4.24 into DRTVWR-546Dave Houlton
2021-10-11SL-16099 Multi-threaded OpenGL usage on Windows, enable Core Profile and ↵Dave Parks
VAOs by default.
2021-10-07SL-16024: Merge branch 'DRTVWR-546' into SL-16024-to-546Nat Goodspeed
2021-10-07SL-16024: Return shared_ptr from LLInstanceTracker::getInstance().Nat Goodspeed
It feels wrong to return a dumb LLInstanceTracker subclass* from getInstance() when we use std::shared_ptr and std::weak_ptr internally. But tweak consumers to use 'auto' or LLInstanceTracker::ptr_t in case we later revisit this decision. We did add a couple get() calls where it's important to obtain a dumb pointer.
2021-10-06SL-16138 remove checks for now-mandatory capabilitiesDave Houlton
2021-09-29SL-15999 - force multiple viewers support for noninteractive modeBrad Payne (Vir Linden)
2021-09-29Merge branch 'SL-15999' of ssh://bitbucket.org/lindenlab/viewer into SL-15999Brad Payne (Vir Linden)
2021-09-29SL-15999 - noninteractive sessions should quit cleanly when they get a close ↵Brad Payne (Vir Linden)
message. Removed some possible crashes
2021-09-29SL-16034 Disable all displays and UI in noninteractive modeMnikolenko Productengine
2021-09-28SL-15999 - noninteractive sessions disable loggingBrad Payne (Vir Linden)
2021-09-28SL-15999 - draw no objects when noninteractiveBrad Payne (Vir Linden)
2021-09-28SL-15999 - noninteractive mode: create minimal objects,load no texturesBrad Payne (Vir Linden)
2021-09-27SL-16093 Don't force the console window to be open on developer builds ↵Dave Parks
because it causes frame stalls while logging.
2021-09-27SL-15999 - noninteractive: debugging run issues, suppress AFK/Away poseBrad Payne (Vir Linden)
2021-09-22Merge remote-tracking branch 'remotes/origin/DRTVWR-541' into DRTVWR-546Runitai Linden
2021-09-22SL-16014: Add Tracy markup to doFrame()Ptolemy
2021-09-22SL-16014: Add Tracy logging to doFrame()Ptolemy
2021-09-21SL-15999 - try to force non-interactive agents to always start out standingBrad Payne (Vir Linden)
2021-09-20SL-16043 Fix DisableVerticalSync, default DisableVerticalSync to off, remove ↵Dave Parks
broken frame limiter code (use vsync if you want to limit framerate).
2021-09-20SL-15999 - support for temporarily changing other settings while ↵Brad Payne (Vir Linden)
noninteractive, including a fix for unwanted SLURL redirects
2021-09-20SL-15999 - track --noninteractive state with gNonInteractive flagBrad Payne (Vir Linden)
2021-09-16SL-15999 - throttle frame rate even more when noninteractiveBrad Payne (Vir Linden)
2021-09-03SL-15709: Add Tracy support to viewerPtolemy
2021-09-03DRTVWR-528 remove wrapper code for RAD telemetry libraryDave Houlton
2021-09-03SL-15902 Cleanup gSecAPIHandlerMnikolenko ProductEngine
2021-08-12Merge branch 'master' into DRTVWR-520-apple-notarizationAndrey Lihatskiy
# Conflicts: # autobuild.xml # build.sh # indra/CMakeLists.txt # indra/newview/CMakeLists.txt # indra/newview/llappviewermacosx.cpp # indra/newview/llappviewerwin32.h # indra/newview/viewer_manifest.py # indra/win_crash_logger/llcrashloggerwindows.cpp
2021-06-25Merge branch 'master' into DRTVWR-520-apple-notarizationAndrey Lihatskiy
2021-06-25Merge branch 'master' into DRTVWR-516-maintAndrey Lihatskiy
# Conflicts: # indra/newview/app_settings/settings.xml # indra/newview/llvoicevivox.cpp
2021-06-07Merge branch 'master' into DRTVWR-520-apple-notarizationAndrey Lihatskiy
2021-06-07Merge branch 'master' into DRTVWR-518-uiAndrey Lihatskiy
2021-06-07Merge branch 'master' into DRTVWR-516-maintAndrey Lihatskiy
2021-05-21Merge branch 'sl-10297' into DRTVWR-516-maintAndrey Lihatskiy
2021-05-12SL-10297: Clean up a few merge glitches.Nat Goodspeed
2021-05-12SL-10297: Merge branch 'sl-10297-oz' into sl-10297.Nat Goodspeed
Bring in Oz's tweaks to the way BugSplat is engaged and tested, plus a few other miscellaneous goodies.
2021-05-11SL-10297: Move LL_ERRS crash location into the LL_ERRS macro itself.Nat Goodspeed
Introduce Oz's LLERROR_CRASH macro analogous to the old LLError::crashAndLoop() function. Change LL_ENDL macro so that, after calling flush(), if the CallSite is for LEVEL_ERROR, we invoke LLERROR_CRASH right there. Change the meaning of LLError::FatalFunction. It used to be responsible for the actual crash (hence crashAndLoop()). Now, instead, its role is to disrupt control flow in some other way if you DON'T want to crash: throw an exception, or call exit() or some such. Any FatalFunction that returns normally will fall into the new crash in LL_ENDL. Accordingly, the new default FatalFunction is a no-op lambda. This eliminates the need to test for empty (not set) FatalFunction in Log::flush(). Remove LLError::crashAndLoop() because the official LL_ERRS crash is now in LL_ENDL. One of the two common use cases for setFatalFunction() used to be to intercept control in the last moments before crashing -- not to crash or to avoid crashing, but to capture the LL_ERRS message in some way. Especially when that's temporary, though (e.g. LLLeap), saving and restoring the previous FatalFunction only works when the lifespans of the relevant objects are strictly LIFO. Either way, that's a misuse of FatalFunction. Fortunately the Recorder mechanism exactly addresses that case. Introduce a GenericRecorder template subclass, with LLError::addGenericRecorder(callable) that accepts a callable with suitable (level, message) signature, instantiates a GenericRecorder, adds it to the logging machinery and returns the RecorderPtr for possible later use with removeRecorder(). Change llappviewer.cpp's errorCallback() to an addGenericRecorder() callable. Its role was simply to update gDebugInfo["FatalMessage"] with the LL_ERRS message, then call writeDebugInfo(), before calling crashAndLoop() to finish crashing. Remove the crashAndLoop() call, retaining the gDebugInfo logic. Pass errorCallback() to LLError::addGenericRecorder() instead of setFatalFunction(). Oddly, errorCallback()'s crashAndLoop() call was conditional on a compile-time SHADER_CRASH_NONFATAL symbol. The new mechanism provides no way to support SHADER_CRASH_NONFATAL -- it is a Bad Idea to return normally from any LL_ERRS invocation! Rename LLLeapImpl::fatalFunction() to onError(). Instead of passing it to LLError::setFatalFunction(), pass it to addGenericRecorder(). Capture the returned RecorderPtr in mRecorder, replacing mPrevFatalFunction. Then ~LLLeapImpl() calls removeRecorder(mRecorder) instead of restoring mPrevFatalFunction (which, as noted above, was order-sensitive). Of course, every enabled Recorder is called with every log message. onError() and errorCallback() must specifically test for calls with LEVEL_ERROR. LLSingletonBase::logerrs() used to call LLError::getFatalFunction(), check the return and call it if non-empty, else call LLError::crashAndLoop(). Replace all that with LLERROR_CRASH. Remove from llappviewer.cpp the watchdog_llerrs_callback() and watchdog_killer_callback() functions. watchdog_killer_callback(), passed to Watchdog::init(), used to setFatalFunction(watchdog_llerrs_callback) and then invoke LL_ERRS() -- which seems a bit roundabout. watchdog_llerrs_callback(), in turn, replicated much of the logic in the primary errorCallback() function before replicating the crash from llwatchdog.cpp's default_killer_callback(). Instead, pass LLWatchdog::init() a lambda that invokes the LL_ERRS() message formerly found in watchdog_killer_callback(). It no longer needs to override FatalFunction with watchdog_llerrs_callback() because errorCallback() will still be called as a Recorder, obviating watchdog_llerrs_callback()'s first half; and LL_ENDL will handle the crash, obviating the second half. Remove from llappviewer.cpp the static fast_exit() function, which was simply an alias for _exit() acceptable to boost::bind(). Use a lambda directly calling _exit() instead of using boost::bind() at all. In the CaptureLog class in llcommon/tests/wrapllerrs.h, instead of statically referencing the wouldHaveCrashed() function from test.cpp, simply save and restore the current FatalFunction across the LLError::saveAndResetSettings() call. llerror_test.cpp calls setFatalFunction(fatalCall), where fatalCall() was a function that simply set a fatalWasCalled bool rather than actually crashing in any way. Of course, that implementation would now lead to crashing the test program. Make fatalCall() throw a new FatalWasCalled exception. Introduce a CATCH(LL_ERRS("tag"), "message") macro that expands to: LL_ERRS("tag") << "message" << LL_ENDL; within a try/catch block that catches FatalWasCalled and sets the same bool. Change all existing LL_ERRS() in llerror_test.cpp to corresponding CATCH() calls. In fact there's also an LL_DEBUGS(bad tag) invocation that exercises an LL_ERRS internal to llerror.cpp; wrap that too.
2021-05-06SL-15168 Viewer side functionality for guidebook window openingAndrey Kleshchev
2021-04-30Merge branch 'master' into DRTVWR-520-apple-notarizationAndrey Lihatskiy
2021-04-29Merge master (DRTVWR-515) into DRTVWR-516-maintAndrey Kleshchev
# Conflicts: # autobuild.xml # doc/contributions.txt # indra/llcommon/llcoros.cpp # indra/llmessage/llcoproceduremanager.cpp # indra/newview/llfloaterfixedenvironment.cpp # indra/newview/llfloaterimsessiontab.cpp
2021-04-29Merge master into DV525-merge-6.4.19Dave Houlton