Commit Graph

1550 Commits (1811cdc447bbf7c6dfd186be8592cbda896f0df4)

Author SHA1 Message Date
Dave Houlton 86e7cc3d35 Merge branch 'master' v6.4.9 into DRTVWR-497 2020-09-22 15:28:13 -06:00
Dave Houlton 6c1a15d936 SL-13565, clean up now-orphaned throttling variable and handling code 2020-08-20 17:08:15 -06:00
Dave Houlton d77b7bdc54 SL-13565, remove SL-10625 throttling erroneously applied to all GPUs
Remove the sleep throttle applied in 10625 to work around an Intel GPU driver
bug. It was erroneously being applied to all GPUs, and also as of Intel driver
26.20.100.7755 (1/9/2020) it appears that the driver bug no longer exists.
2020-08-20 15:08:55 -06:00
Dave Houlton 9f0da75332 Merge branch 'master' 6.4.8 into DRTVWR-497 2020-08-18 11:29:17 -06:00
Dave Houlton 0c0ed56167 Merge branch 'master' 6.4.7 into DRTVWR-497 2020-08-13 11:09:26 -06:00
Andrey Lihatskiy 9406b757a3 Merge branch 'DRTVWR-501-maint' into DRTVWR-503-maint
# Conflicts:
#	indra/cmake/DirectX.cmake
#	indra/newview/llviewerparcelmedia.cpp
#	indra/newview/viewer_manifest.py
2020-08-11 01:34:13 +03:00
Andrey Kleshchev c27e207033 SL-13737 Crash when cleaning up uninitialized ndof device 2020-08-06 17:46:53 +03:00
Andrey Kleshchev 00acc562f9 Revert commit bbb16ff97c.
This fails at teamcity due to missing LLTrans, but builds locally without issues. Reverting to not hold D501
2020-08-05 22:36:00 +03:00
Andrey Kleshchev bbb16ff97c SL-13704 Move link generation into getReleaseNotes() 2020-08-05 20:07:19 +03:00
Andrey Lihatskiy 07c7506b1b Merge branch 'DRTVWR-476' into DRTVWR-501-maint 2020-08-05 09:59:41 +03:00
Andrey Kleshchev 8103d13047 SL-13704 Release notes link not loading in ToolsUpdate2 release 2020-07-30 14:43:27 +03:00
Dave Houlton 64a9ad0f5f Merge branch 'master' v6.4.6 into DRTVWR-497 2020-07-23 12:21:18 -06:00
Andrey Lihatskiy 7bbf3f5f7f Merge branch 'master' into DRTVWR-501-maint
# Conflicts:
#	autobuild.xml
#	indra/newview/llimprocessing.cpp
2020-07-20 22:24:10 +03:00
Nat Goodspeed 77cf4588df DRTVWR-476: Merge branch 'master' of lindenlab/viewer into d476
following release of D512.
2020-06-23 22:03:43 -04:00
Andrey Lihatskiy a9471433eb Merge branch 'master' into DRTVWR-497 2020-06-24 00:10:37 +03:00
Andrey Lihatskiy b8127f80c7 Merge branch 'DRTVWR-501-maint' into DRTVWR-503-maint
# Conflicts:
#	indra/llcommon/llkeybind.cpp
#	indra/llcommon/llkeybind.h
2020-06-24 00:08:35 +03:00
Andrey Lihatskiy 05f3287512 Merge branch 'master' into DRTVWR-501-maint 2020-06-23 23:58:52 +03:00
Andrey Kleshchev f8137f68a0 Reverted SL-6109 keybinding changes
Changes were moved to DRTVWR-514
2020-06-23 16:55:06 +03:00
Andrey Kleshchev 71b66c758e SL-13418 Move and view panel now applies changes on the go 2020-06-16 09:52:20 +03:00
Andrey Kleshchev d07ef7df92 SL-13418 Added converter from old mouse binding settings to new ones 2020-06-15 18:15:43 +03:00
Andrey Lihatskiy aaaf3189c4 Merge branch 'DRTVWR-501-maint' into DRTVWR-503-maint 2020-05-19 22:37:41 +03:00
Callum Prentice 09802fa8ea Tiny text change in the about box - indicates CEF and Chromium are sub-components 2020-05-15 18:35:28 -07:00
Nat Goodspeed 9d5d257cee DRTVWR-476, SL-12204: Fix crash in Marketplace Listings.
The observed crash was due to sharing a stateful global resource (the global
LLMessageSystem instance) between different tasks. Specifically, a coroutine
sets its mMessageReader one way, expecting that value to persist until it's
done with message parsing, but another coroutine sneaks in at a suspension
point and sets it differently.

Introduce LockMessageReader and LockMessageChecker classes, which must be
instantiated by a consumer of the resource. The constructor of each locks a
coroutine-aware mutex, so that for the lifetime of the lock object no other
coroutine can instantiate another.

Refactor the code so that LLMessageSystem::mMessageReader can only be modified
by LockMessageReader, not by direct assignment. mMessageReader is now an
instance of LLMessageReaderPointer, which supports dereferencing and
comparison but not assignment. Only LockMessageReader can change its value.

LockMessageReader addresses the use case in which the specific mMessageReader
value need only persist for the duration of a single method call. Add an
instance in LLMessageHandlerBridge::post().

LockMessageChecker is a subclass of LockMessageReader: both lock the same
mutex. LockMessageChecker addresses the use case in which the specific
mMessageReader value must persist across multiple method calls. Modify the
methods in question to require a LockMessageChecker instance. Provide
LockMessageChecker forwarding methods to facilitate calling the underlying
LLMessageSystem methods via the LockMessageChecker instance.

Add LockMessageChecker instances to LLAppViewer::idleNetwork(), a couple cases
in idle_startup() and LLMessageSystem::establishBidirectionalTrust().
2020-05-14 16:58:33 -04:00
Andrey Kleshchev 9c445f6edc Revert SL-8191 due to it no longer being valid
This reverts commit 4c006e76e3.
Since EEP there are no 'basic shaders' and doing this in llfloatersettingsdebug was wrong either way
2020-05-14 10:56:53 +03:00
Andrey Lihatskiy ebc629ffc4 Merged in SL-12090 (pull request #105)
SL-12090 Initialize the joystick only when required

* SL-12090 Initialize the joystick only when required

Approved-by: Andrey Kleshchev
2020-05-14 07:51:08 +00:00
Andrey Kleshchev 663489493e SL-12970 Fixed char length crash 2020-05-07 21:31:55 +03:00
Nat Goodspeed ca6f092929 DRTVWR-476: Merge branch 'master' of lindenlab/viewer into DRTVWR-476-boost-1.72 2020-05-06 16:06:26 -04:00
Andrey Kleshchev 3053f62483 SL-12527 cursor is not changed to the pointer on the MoTD link when teleporting 2020-05-05 01:32:38 +03:00
Andrey Lihatskiy ec9b989863 Merge branch 'DRTVWR-501-maint' into DRTVWR-503-maint
# Conflicts:
#	indra/newview/llinventorybridge.cpp
#	indra/newview/llinventorypanel.cpp
#	indra/newview/lltexturectrl.cpp
#	indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
#	indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
#	indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
#	indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
#	indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml
#	indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
#	indra/newview/skins/default/xui/ru/floater_texture_ctrl.xml
#	indra/newview/skins/default/xui/tr/floater_texture_ctrl.xml
#	indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml
2020-05-05 00:37:16 +03:00
Andrey Lihatskiy 6bd9fe4233 Merge branch 'master' into DRTVWR-497 2020-05-04 23:36:10 +03:00
Callum Prentice 691a2d996c Merge branch 'master' of https://bitbucket.org/lindenlab/viewer into DRTVWR-512 2020-05-04 10:53:11 -07:00
Callum Prentice 77d2a05921 Pick up first version of new Dullahan build autobuild scripts that builds CEF wrapper first before building Dullahan. Change to version headers meant a change to appviewer.cpp too. 2020-05-03 19:03:22 -07:00
Andrey Lihatskiy b6441bf09b Merge branch 'DRTVWR-500' into DRTVWR-501-maint 2020-04-29 19:34:39 +03:00
Callum Prentice 9c78928311 Initial port of the changes from DRTVWR509 (Adult Swim) minus the volume fall-off settings updates 2020-04-28 10:57:17 -07:00
Andrey Kleshchev 9d26ce372b Fixed merge conflicts 2020-04-20 22:48:03 +03:00
Andrey Lihatskiy c757c29c95 Merge branch 'master' into DRTVWR-500
# Conflicts:
#	indra/newview/pipeline.cpp
2020-04-20 21:23:34 +03:00
Andrey Lihatskiy 7a311fe30e Merge branch 'master' into DRTVWR-497 2020-04-20 21:21:12 +03:00
Andrey Kleshchev 6620211bff SL-12911 Add Debug setting EnvironmentPersistAcrossLogin 2020-03-27 00:24:08 +02:00
Nat Goodspeed 253e360062 DRTVWR-476: Mention LLApp::stepFrame() in LLAppViewer::idle()
which performs "by hand" the same sequence of calls found in stepFrame().

Why not simply call stepFrame()? Hysterical reasons?
2020-03-25 19:00:10 -04:00
Nat Goodspeed 66981fab0b SL-793: Use Boost.Fiber instead of the "dcoroutine" library.
Longtime fans will remember that the "dcoroutine" library is a Google Summer
of Code project by Giovanni P. Deretta. He originally called it
"Boost.Coroutine," and we originally added it to our 3p-boost autobuild
package as such. But when the official Boost.Coroutine library came along
(with a very different API), and we still needed the API of the GSoC project,
we renamed the unofficial one "dcoroutine" to allow coexistence.

The "dcoroutine" library had an internal low-level API more or less analogous
to Boost.Context. We later introduced an implementation of that internal API
based on Boost.Context, a step towards eliminating the GSoC code in favor of
official, supported Boost code.

However, recent versions of Boost.Context no longer support the API on which
we built the shim for "dcoroutine." We started down the path of reimplementing
that shim using the current Boost.Context API -- then realized that it's time
to bite the bullet and replace the "dcoroutine" API with the Boost.Fiber API,
which we've been itching to do for literally years now.

Naturally, most of the heavy lifting is in llcoros.{h,cpp} and
lleventcoro.{h,cpp} -- which is good: the LLCoros layer abstracts away most of
the differences between "dcoroutine" and Boost.Fiber.

The one feature Boost.Fiber does not provide is the ability to forcibly
terminate some other fiber. Accordingly, disable LLCoros::kill() and
LLCoprocedureManager::shutdown(). The only known shutdown() call was in
LLCoprocedurePool's destructor.

We also took the opportunity to remove postAndSuspend2() and its associated
machinery: FutureListener2, LLErrorEvent, errorException(), errorLog(),
LLCoroEventPumps. All that dual-LLEventPump stuff was introduced at a time
when the Responder pattern was king, and we assumed we'd want to listen on one
LLEventPump with the success handler and on another with the error handler. We
have never actually used that in practice. Remove associated tests, of course.

There is one other semantic difference that necessitates patching a number of
tests: with "dcoroutine," fulfilling a future IMMEDIATELY resumes the waiting
coroutine. With Boost.Fiber, fulfilling a future merely marks the fiber as
ready to resume next time the scheduler gets around to it. To observe the test
side effects, we've inserted a number of llcoro::suspend() calls -- also in
the main loop.

For a long time we retained a single unit test exercising the raw "dcoroutine"
API. Remove that.

Eliminate llcoro_get_id.{h,cpp}, which provided llcoro::get_id(), which was a
hack to emulate fiber-local variables. Since Boost.Fiber has an actual API for
that, remove the hack.

In fact, use (new alias) LLCoros::local_ptr for LLSingleton's dependency
tracking in place of llcoro::get_id().

In CMake land, replace BOOST_COROUTINE_LIBRARY with BOOST_FIBER_LIBRARY. We
don't actually use the Boost.Coroutine for anything (though there exist
plausible use cases).
2020-03-25 17:32:45 -04:00
Nat Goodspeed 8961be780d SL-11216: Try to pacify VS 2013. 2020-03-25 16:05:09 -04:00
Nat Goodspeed 15418f991a SL-11216: getViewerInfo() calls LLVersionInfo::getReleaseNotes().
Make LLAppViewer retrieve release notes from LLVersionInfo, rather than
synthesizing the release-notes URL itself based on the viewer version string.
2020-03-25 16:05:09 -04:00
Nat Goodspeed 5a260e0cc3 SL-11216: Convert LLVersionInfo to an LLSingleton.
This changeset is meant to exemplify how to convert a "namespace" class whose
methods are static -- and whose data are module-static -- to an LLSingleton.
LLVersionInfo has no initClass() or cleanupClass() methods, but the general
idea is the same.

* Derive the class from LLSingleton<T>:
  class LLSomeSingleton: public LLSingleton<LLSomeSingleton> { ... };
* Add LLSINGLETON(LLSomeSingleton); in the private section of the class. This
  usage implies a separate LLSomeSingleton::LLSomeSingleton() definition, as
  described in indra/llcommon/llsingleton.h.
* Move module-scope data in the .cpp file to non-static class members. Change
  any sVariableName to mVariableName to avoid being outright misleading.
* Make static class methods non-static. Remove '//static' comments from method
  definitions as needed.
* For LLVersionInfo specifically, the 'const std::string&' return type was
  replaced with 'std::string'. Returning a reference to a static or a member,
  const or otherwise, is an anti-pattern: the interface constrains the
  implementation, prohibiting possibly later returning a temporary (an
  expression).
* For LLVersionInfo specifically, 'const S32' return type was replaced with
  simple 'S32'. 'const' is just noise in that usage.
* Simple member initialization (e.g. the original initializer expressions for
  static variables) can be done with member{ value } initializers (no examples
  here though).
* Delete initClass() method.
* LLSingleton's forté is of course lazy initialization. It might work to
  simply delete any calls to initClass(). But if there are side effects that
  must happen at that moment, replace LLSomeSingleton::initClass() with
  (void)LLSomeSingleton::instance();
* Most initClass() initialization can be done in the constructor, as would
  normally be the case.
* Initialization that might cause a circular LLSingleton reference should be
  moved to initSingleton(). Override 'void initSingleton();' should be private.
* For LLVersionInfo specifically, certain initialization that used to be
  lazily performed was made unconditional, due to its low cost.
* For LLVersionInfo specifically, certain initialization involved calling
  methods that have become non-static. This was moved to initSingleton()
  because, in a constructor body, 'this' does not yet point to the enclosing
  class.
* Delete cleanupClass() method.
* There is already a generic LLSingletonBase::deleteAll() call in
  LLAppViewer::cleanup(). It might work to let this new LLSingleton be cleaned
  up with all the rest. But if there are side effects that must happen at that
  moment, replace LLSomeSingleton::cleanupClass() with
  LLSomeSingleton::deleteSingleton(). That said, much of the benefit of
  converting to LLSingleton is deleteAll()'s guarantee that cross-LLSingleton
  dependencies will be properly honored: we're trying to migrate the code base
  away from the present fragile manual cleanup sequence.
* Most cleanupClass() cleanup can be done in the destructor, as would normally
  be the case.
* Cleanup that might throw an exception should be moved to cleanupSingleton().
  Override 'void cleanupSingleton();' should be private.
* Within LLSomeSingleton methods, remove any existing
  LLSomeSingleton::methodName() qualification: simple methodName() is better.
* In the rest of the code base, convert most LLSomeSingleton::methodName()
  references to LLSomeSingleton::instance().methodName(). (Prefer instance() to
  getInstance() because a reference does not admit the possibility of NULL.)
* Of course, LLSomeSingleton::ENUM_VALUE can remain unchanged.

In general, for many successive references to an LLSingleton instance, it
can be useful to capture the instance() as in:

auto& versionInfo{LLVersionInfo::instance()};
// ... versionInfo.getVersion() ...

We did not do that here only to simplify the code review.

The STRINGIZE(expression) macro encapsulates:
std::ostringstream out;
out << expression;
return out.str();
We used that in a couple places.

For LLVersionInfo specifically, lllogininstance_test.cpp used to dummy out a
couple specific static methods. It's harder to dummy out
LLSingleton::instance() references, so we add the real class to that test.
2020-03-25 16:01:31 -04:00
Nat Goodspeed 47ec6ab3be SL-11216: Remove LLSingletonBase::cleanupAll().
Remove call from LLAppViewer::cleanup().

Instead, make each LLSingleton<T>::deleteSingleton() call cleanupSingleton()
just before destroying the instance. Since deleteSingleton() is not a
destructor, it's fine to call cleanupSingleton() from there; and since
deleteAll() calls deleteSingleton() on every remaining instance, the former
cleanupAll() functionality has been subsumed into deleteAll().

Since cleanupSingleton() is now called at exactly one point in the instance's
lifetime, we no longer need a bool indicating whether it has been called.

The previous protocol of calling cleanupAll() before deleteAll() implemented a
two-phase cleanup strategy for the application. That is no longer needed.
Moreover, the cleanupAll() / deleteAll() sequence created a time window during
which individual LLSingleton<T> instances weren't usable (to the extent that
their cleanupSingleton() methods released essential resources) but still
existed -- so a getInstance() call would return the crippled instance rather
than recreating it.

Remove cleanupAll() calls from tests; adjust to new order of expected side
effects: instead of A::cleanupSingleton(), B::cleanupSingleton(), ~A(), ~B(),
now we get A::cleanupSingleton(), ~A(), B::cleanupSingleton(), ~B().
2020-03-25 16:01:31 -04:00
Nat Goodspeed 9d5b897600 DRTVWR-494: Defend LLInstanceTracker against multi-thread usage.
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-25 15:28:17 -04:00
Dave Houlton 7d94bcf729 DRTVWR-440 Add compile switch SHADER_CRASH_NONFATAL to prevent app exit on shader failure 2020-03-10 12:01:24 -06:00
maxim_productengine 5122260515 SL-12660 Hide top level domain name 2020-02-10 17:59:24 +02:00
Andrey Lihatskiy fa39ff67f0 Merge branch 'master' into DRTVWR-497 2020-02-06 21:31:34 +02:00
Mnikolenko Productengine 0f948988b8 SL-12660 Hide top level domain name and IP address for simulators 2020-02-05 18:39:02 +02:00
Andrey Lihatskiy e0727702ea Merge branch 'DRTVWR-501' into trunk 2020-02-03 15:18:34 +02:00