summaryrefslogtreecommitdiff
path: root/indra/llcommon
AgeCommit message (Collapse)Author
2023-11-20llmemory: use getrusage for getCurrentRSS on linuxMiezhiko
2023-11-17SL-20546: Defend llrand's random generator against concurrent accessNat Goodspeed
by making it thread_local.
2023-11-17SL-20546: Avoid promoting F32 to double just to compare bounds.Nat Goodspeed
2023-11-15SL-20546: Even with C++17 CTAD, makeClassicCallback() still useful.Nat Goodspeed
2023-11-15SL-20546: Use narrow() explicit conversion from F64 to F32.Nat Goodspeed
2023-11-15SL-20546: Rely on CTAD for 'narrow' class.Nat Goodspeed
Now that we're building with C++17, we can use Class Template Argument Deduction to infer the type passed to the constructor of the 'narrow' class. We no longer require a narrow_holder class with a narrow() factory function.
2023-11-14DRTVWR-588: Try to fix sporadic llrand test failures.Nat Goodspeed
With GitHub viewer builds, every few weeks we've seen test failures when ll_frand() returns exactly 1.0. This is a problem for a function that's supposed to return [0.0 .. 1.0). Monty suggests that the problem is likely to be conversion of F32 to F64 to pass to fmod(), and then truncation of fmod()'s F64 result back to F32. Moved the clamping code to each size-specific ll_internal_random specialization. Monty also noted that a stateful static random number engine isn't thread-safe. Added a mutex lock.
2023-11-03Fix build error from overly fancy tracy macro usage that nobody else is ↵Brad Linden
using for DRTVWR-559
2023-11-03Fix for SL-19968 objects missing timing bug due to stall during loginBrad Kittenbrink (Brad Linden)
ensure inventory skeleton loading doesn't block the message system from processing packets.
2023-11-02DRTVWR-589: Switch to the lua package built by new 3p-lua repo.Nat Goodspeed
Also ditch crufty CMake logic related to lleventhost, which we haven't used for years.
2023-11-02DRTVWR-589: StringVec's operator<<() overload must precede lltut.h.Nat Goodspeed
If not, the resulting error message is so mysterious that it's worth adding an error check to explain how to avoid it.
2023-10-31DRTVWR-588: Enlarge default coroutine stack size.Nat Goodspeed
On a Windows CI host, we got the dreaded rc 3221225725 aka c00000fd aka stack overflow.
2023-10-31DRTVWR-588: Try to make threadsafequeue timing more robust.Nat Goodspeed
The test was coded to push (what's intended to be) the third entry with timestamp (now + 200ms), then (what's intended to be) the second entry with timestamp (now + 100ms). The trouble is that it was re-querying "now" each time. On a slow CI host, the clock might have advanced by more than 100ms between the first push and the second -- meaning that the second push would actually have a _later_ timestamp, and thus, even with the queue sorting properly, fail the test's order validation. Capture the timestamp once, then add both time deltas to the same time point to get the relative order right regardless of elapsed real time.
2023-10-29DRTVWR-589: Unify hexdump.h headers from different branches.Nat Goodspeed
2023-10-29DRTVWR-589: Merge branch 'main' of viewer-private into DRTVWR-589Nat Goodspeed
2023-10-29DRTVWR-587: Fix LL::apply(function, LLSD array).Nat Goodspeed
We define a specialization of LLSDParam<const char*> to support passing an LLSD object to a const char* function parameter. Needless to remark, passing object.asString().c_str() would be Bad: destroying the temporary std::string returned by asString() would immediately invalidate the pointer returned by its c_str(). But when you pass LLSDParam<const char*>(object) as the parameter, that specialization itself stores the std::string so the c_str() pointer remains valid as long as the LLSDParam object does. Then there's LLSDParam<LLSD>, used when we don't have the parameter type available to select the LLSDParam specialization. LLSDParam<LLSD> defines a templated conversion operator T() that constructs an LLSDParam<T> to provide the actual parameter value. So far, so good. The trouble was with the implementation of LLSDParam<LLSD>: it constructed a _temporary_ LLSDParam<T>, implicitly called its operator T() and immediately destroyed it. Destroying LLSDParam<const char*> destroyed its stored string, thus invalidating the c_str() pointer before the target function was entered. Instead, make LLSDParam<LLSD>::operator T() capture each LLSDParam<T> it constructs, extending its lifespan to the lifespan of the LLSDParam<LLSD> instance. For this, derive each LLSDParam specialization from LLSDParamBase, a trivial base class that simply establishes the virtual destructor. We can then capture any specialization as a pointer to LLSDParamBase. Also restore LazyEventAPI tests on Mac.
2023-10-27DRTVWR-587: Skip Visual Studio LLSDParam<const char*> tests for now.Nat Goodspeed
They do work fine on clang... unblocking the rest of the team during diagnosis.
2023-10-25Merge remote-tracking branch 'origin/main' into DRTVWR-559Brad Linden
2023-10-25Post merge build fixAndrey Kleshchev
2023-10-25Merge branch 'main' into DRTVWR-591-maint-XAndrey Lihatskiy
# Conflicts: # indra/newview/llinventorygallery.cpp
2023-10-25Merge branch 'main' into DRTVWR-588-maint-WAndrey Lihatskiy
# Conflicts: # autobuild.xml
2023-10-25Merge branch 'main' into DRTVWR-587-maint-VAndrey Lihatskiy
# Conflicts: # autobuild.xml # indra/llcommon/tests/llleap_test.cpp # indra/newview/viewer_manifest.py
2023-10-18SL-20463 Rename outfit dialog box accepts emoji charactersAlexander Gavriliuk
2023-10-17SL-20476: Don't let the compiler know we intend to crash.Nat Goodspeed
clang has gotten smart enough to recognize an inline attempt to store to address zero. Fool it by storing to an address passed as a parameter, and pass nullptr from a different source file.
2023-10-12SL-18837: Unify all llrand_test.cpp in-range tests.Nat Goodspeed
The header file documents that no llrand function should ever return a value equal to the passed extent, so the one test in llrand_test.cpp that checked less than or equal to the high end of the range was anomalous. But changing that to an exclusive range means that we no longer need separate exclusive range and inclusive range functions. Replace ensure_in_range_using(), ensure_in_exc_range() and ensure_in_inc_range() with a grand unified (simplified) ensure_in_range() function.
2023-10-11SL-20370 Change PDT to SLT on menu barAlexander Gavriliuk
2023-10-11SL-20370 Change PDT to SLT on menu barAlexander Gavriliuk
2023-10-10Revert "SL-18721 Viewer shutdown order changes"Andrey Kleshchev
This reverts commit edf0874e0656c6f512df50ee52236209531ca329. Reverted since it causes a significant uptick in shutdown freezes. Can't repro those freezes, will seek an alternate solution.
2023-10-08Merge branch main into DRTVWR-489Alexander Gavriliuk
2023-10-05SL-18837: When llrand_test.cpp fails, display the failing value.Nat Goodspeed
It's frustrating and unactionable to have a failing test report merely that the random value was greater than the specified high end. Okay, so what was the value? If it's supposed to be less than the high end, did it happen to be equal? Or was it garbage? We can't reproduce the failure by rerunning! The new ensure_in_exc_range(), ensure_in_inc_range() mechanism is somewhat complex because exactly one test allows equality with the high end of the expected range, where the rest mandate that the function return less than the high end. If that's a bug in the test -- if every llrand function is supposed to return less than the high end -- then we could simplify the test logic.
2023-10-04DRTVWR-589: Add tests for LLSD-to-Lua round-trip conversions.Nat Goodspeed
Add from_lua() function to run a small Lua script that constructs a specified Lua object and posts it back to the test program via a temporary LLEventPump. Call this with a variety of Lua objects, comparing to the expected LLSD. Add round_trip() function to run another small Lua script that listens for incoming LLEventPump events and, for each, posts the received Lua data back to the test program as LLSD. Call this with a variety of LLSD objects, comparing to the expected LLSD. Also collect these objects into an LLSD array and send that for a round trip; also collect into an LLSD map and send that. Sadly, tests currently drive an access violation when trying to convert a nested Lua table to LLSD. Add verbose debug logging to lua_tollsd() to identify the context at which we hit the access violation. Add comments describing further exceptions to LLSD-to-Lua round trip identity. Add lua_what() iostream manipulator to stream whatever we can readily discover about a value at a specified Lua stack index. Add lua_stack() to report the contents of the Lua stack. Since the stack is created anew for every call to a C function, this shouldn't usually be enormous. Add hexdump.h with iostream manipulators to dump a byte range as hex digits, or to produce readable text from a mix of printing and nonprinting ASCII characters.
2023-10-04SL-18837: Merge branch 'main' of secondlife/viewer into actionsNat Goodspeed
2023-10-03SL-17135 Apr process creation crashAndrey Kleshchev
looks like pool regularly gets corrupted, try using separate pool
2023-10-03DRTVWR-589: Merge branch 'main' of viewer-private into DRTVWR-589Nat Goodspeed
2023-10-03Merge branch 'main' into DRTVWR-588-maint-WAndrey Lihatskiy
# Conflicts: # indra/llui/lltooltip.h # indra/newview/llinventoryfunctions.cpp # indra/newview/llvovolume.cpp # indra/newview/skins/default/textures/textures.xml
2023-10-03Merge branch 'main' into DRTVWR-587-maint-VAndrey Lihatskiy
# Conflicts: # indra/newview/llinventorymodel.cpp # indra/newview/llvovolume.cpp
2023-10-03Merge branch 'main' (DRTVWR-567) into DRTVWR-559Andrey Kleshchev
# Conflicts: # indra/newview/CMakeLists.txt # indra/newview/VIEWER_VERSION.txt # indra/newview/llagent.cpp # indra/newview/llfloaternewfeaturenotification.cpp # indra/newview/llinventorybridge.cpp # indra/newview/llinventorymodel.cpp # indra/newview/lloutfitgallery.cpp # indra/newview/llpanelmaininventory.cpp # indra/newview/llpanelmaininventory.h # indra/newview/llsidepaneltaskinfo.cpp # indra/newview/llsidepaneltaskinfo.h # indra/newview/lltexturectrl.cpp # indra/newview/lltexturectrl.h # indra/newview/llviewerinventory.cpp # indra/newview/llviewerobject.cpp # indra/newview/llviewertexturelist.cpp # indra/newview/llviewertexturelist.h # indra/newview/skins/default/xui/en/floater_new_feature_notification.xml # indra/newview/skins/default/xui/en/menu_inventory.xml
2023-10-02DRTVWR-589: Add initial integration test for LLLUAmanager.Nat Goodspeed
The first test runs a Lua script that calls post_on(), listen_events() and await_event() to engage in LLEventPump handshakes with the test program. Make llluamanager.cpp testable by putting LL_TEST conditionals around lots of viewer-internals headers and the lua_function definitions that engage them. Since LuaListener::connect() is called by its constructor, make it a static method that explicitly accepts the lua_State* (instead of finding it as mState). Add that parameter to its two existing calls. Add a debug log message when LuaListener is destroyed. This surfaced the need to pass a no-op deleter when listen_events() constructs a LuaListener::ptr_t. When compiled for LL_TEST, make LuaListener::mReplyPump an LLEventLogProxyFor<LLEventStream> instead of a plain LLEventStream. For debugging purposes, add a type string "LLEventLogProxy" for LLEventPumps::make(). A make() call with this type will return an LLEventLogProxyFor<LLEventStream>.
2023-09-22SL-18837: Bump the granularity of WorkQueue timing tests.Nat Goodspeed
On a low-powered GitHub Mac runner, the system doesn't wake up as soon as it should, and we get spurious "too late" errors. Try a bigger time increment. (cherry picked from commit 045342ba29aae186e13c711bd4dd84377d4a7e43)
2023-09-22DRTVWR-589: Bump the time deltas for ThreadSafeSchedule.Nat Goodspeed
Use whole seconds rather than tenths of seconds, since apparently the TeamCity agent machine is having trouble waking up within tenths of seconds.
2023-09-15SL-17135 Apr process creation crashAndrey Kleshchev
looks like pool regularly gets corrupted, try using separate pool
2023-09-12DRTVWR-588: Move LLSingleton dependency on LLMainThreadTask to .cpp.Nat Goodspeed
Introduce LLSingletonBase::getInstanceForSecondaryThread(), used both by LLSingleton and LLParamSingleton. Because it's a method of the non-template base class, because it's not itself a template method, getInstanceForSecondaryThread()'s definition can live in llsingleton.cpp. This is what calls LLMainThreadTask::dispatch(). To support LLParamSingleton, though, getInstanceForSecondaryThread() must be capable of handling arguments. For that, it accepts a nullary std::function returning the LLSingletonBase* of interest. Packing initParamSingleton() arguments into a nullary std::function to pass to getInstanceForSecondaryThread() sounds like a job for std::bind(). Unfortunately std::bind() has trouble forwarding int and string literals to a function that infers its argument types. To work around that, use boost::call_traits::param_type and a lambda with an explicit tuple.
2023-09-12DRTVWR-588: Reimplement LLMainThreadTask based on WorkQueueNat Goodspeed
instead of on LLEventTimer. LLEventTimer takes cycles from the main loop to run through the collection of pending LLEventTimers, checking each to see if we've reached its timestamp. But LLMainThreadTask does not require delay timing; it wants the main loop to service it ASAP. That's what the "mainloop" WorkQueue is for. But WorkQueue::waitForResult() forbids calls from a thread's default coroutine. While that restriction may still make sense in general, we specifically want to be able to pause LLMainThreadTask's caller, no matter what coroutine it's running on. Introduce WorkQueue::waitForResult_() that bypasses the check.
2023-09-12DRTVWR-588: Fix a couple merge glitches in llsdserialize_test.cpp.Nat Goodspeed
2023-09-11DRTVWR-588: Merge 'DRTVWR-588-maint-W' into DRTVWR-588-cleanup-timersNat Goodspeed
2023-09-08SL-18837: Make llsdserialize_test debug output conditional.Nat Goodspeed
Move hexdump() and hexmix() stream formatters to new hexdump.h for potential use by other tests. In toPythonUsing() helper function, add a temp file to receive Python script debug output, and direct debug output to that file. On test failure, dump the contents of that file to the log. Give NamedTempFile::peep() an optional target std::ostream; refactor implementation as peep_via() that accepts a callable to process each text line. Add operator<<() to stream the contents of a NamedTempFile object to ostream -- but don't use that with LL_DEBUGS(), as it flattens the file contents into a single log line. Instead add peep_log(), which streams each individual text line to LL_DEBUGS().
2023-09-08SL-18837: Add debugging output to llsdserialize_test.cpp.Nat Goodspeed
2023-09-07SL-18837: Fix minor merge glitch.Nat Goodspeed
2023-09-07SL-18837: Merge branch 'main' into actionsNat Goodspeed
2023-09-05Initial prototype of embedded LUAMnikolenko Productengine