* A bit of Generic DOM tidying/fixup
- Refactor out a test fixture for all DOM tests / benchmarks
- Optimize `GetType` implementation to not use `AZStd::variant::visit` (benchmark included to A/B the implementations)
- Tag a few more mutating Value functions with "Mutable" to avoid astonishing copy-on-writes
Benchmark results for GetType implementation:
```
DomValueBenchmark/AzDomValueGetType_UsingVariantIndex 18.2 ns 18.0 ns 40727273 items_per_second=443.667M/s
DomValueBenchmark/AzDomValueGetType_UsingVariantVisit 32.2 ns 32.2 ns 21333333 items_per_second=248.242M/s
```
Signed-off-by: Nicholas Van Sickle <nvsickle@amazon.com>
* Templates/Restricted upgrade/fixes:
Fixed template storage format: templates now only store true relative paths and no longer save "origin" paths and "optional" has been removed, it was never used.
Upgraded all templates to new standard
Template system now correctly handles child objects: Child objects no longer have to specify restricted they inherit from parent
Restricted now operates at the object level and makes no assumptions about parent
Restricted templates can now be combined and seperated on creation
ly_get_list_relative_filename has been deprecated for o3de_pal_dir
All Gems/Projects/Templates updated to use new code
Signed-off-by: byrcolin <byrcolin@amazon.com>
* Updated the Maestro MovieSystem and LyShine AnimationSystem to register
Anim Nodes and Anim Params into a member variable map
Previously the registration was occuring in a global variable map inside
of Movie.cpp and UiAnimationSystem.cpp
Rolled back the changes to update the CUiAnimNode and CAnimParamType to
use the stateless allocator in their m_name string member.
This was only needed because those types were used in global memory.
Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
* Updated the AZStd::hash specializations for basic_string and
basic_fixed_string to be transparent.
This allows hashing of types that aren't basic_string or
basic_fixed_string using the hash specializations for those types
without needing to create an instance of those types.
Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
* Adding call to disable saving of the UserSettings.xml in the DisplaySettingsPythonBindingsFixture to avoid race condition running the test in parallel
Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
* [Terrain] First pass of the ProcessList and ProcessRegion APIs for retrieving surface data
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Add a couple of more tests. The expected values were plugged in based on the values generated by the brute force approach.
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Move some declarations out of loops since they can be reused.
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Update all the per position callbacks to pass SurfacePoint refs. Construct only one SurfacePoint object outside the loop which can be reused.
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Update tests to use the new per position callbacks
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Add ProcessRegion functions to the terrain benchmark.
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Change C style static casts to aznumeric_cast. Add maybe_unused to unused params in benchmarks.
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Update the ProcessList API functions to use array_view instead of a vector. This includes some additional changes to satisfy build dependencies.
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Add ProcessList API functions to benchmarks
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Update the ProcessList API functions to take Vector2 as input positions
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Revert changes to AtomCore library split. Add partial implementation of span(mostly just copied over from array_view) to AzCore std containers.
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Adding some const/non-const overloads that were missing in span
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Move input position list generation to a function
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Bring back Vector3 version of ProcessList functions. Rename Vector2 version to follow similar pattern as the Get functions.
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Split span.h into .h/.inl files
Signed-off-by: amzn-sj <srikkant@amazon.com>
* Add [mayby_unused] for unused parameters to fix build errors
Signed-off-by: amzn-sj <srikkant@amazon.com>
* AZStd::basic_string improvements
The AZStd::basic_string class has a better implementation of the Short
String Optimization, which increases the amount of characters that can
be stored in a `basic_string<char>` from 15 characters to 22
characters(not-including null-terminating characters). For a
`basic_string<wchar_t>` on Windows the amount of characters that can be
stored increases from 7 to 10. Using `basic_string<wchar_t>` on Unix
platforms SSO character amount from 3 to 4 characters.
An additional benefit is that the size of the AZStd::basic_string class
has been reduced from 40 bytes to 32 bytes when using the
AZStd::allocator.
When using a stateless allocator with no non static data members such as
AZStd::stateless_allocator, the size of the AZStd::basic_string is 24
bytes.
Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
* Corrected comments and updated type alias to usings for AZStd::basic_string
Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
* Added Benchmarks for the basic_string and basic_fixed_string class
The benchmarks currently measure the speed of the `assign` overloads.
A benchmark has also been added to compare the speed swapping two
`basic_string` instances by 3 memcpy vs 3 pointer swap operations
Speed up string operation when in the iterator overload cases of the
`assign`, `append`, `insert` and `replace` function.
The code was always performing the logic to copy over a string that is
overlapping, without actually checking if the string was overlapping in
the first place.
Added an `az_builtin_is_constant_evaluated` macro that allows use of the
C++20 `std::is_constant_evaluated` feature to determine if an operation
is being performed at compile time vs run time.
That macro is being used to speed up the char_trait operations at run
time, by using the faster standard library functions.
For example char_traits::move now uses "memmove" at runtime, instead of
a for loop.
Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
* Simplified string logic in AWSMetricsServiceApiTest.
Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
The test didnt have to be a death test. Also handled the situation better in the code to be able to continue in that scenario (useful for release configurations)"
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>
* Added new helper functions to get the shortest equivalent of the rotation. In case the w component of the quaternion is negative the rotation is > 180° and taking the longer path. The quaternion will be inverted in that case to take the shortest path of rotation.
* Added unit test.
* Renamed the angle parameter of the CreateRotationX/Y/Z() functions into angleInRadians.
Signed-off-by: Benjamin Jillich <jillich@amazon.com>
Sleeping in tests and attempting to rely on fine-grained measurements to
check code validity is intrinsically brittle. Wall-clock time is
unreliable in an environment where tests are run under a hypervisor that
may choose to suspend your VM at any point, or in situations where the
OS cannot schedule your thread in time. The correct way to reintroduce
these tests in the future is provide an override for the timestamp
queries that can be injected in the test environment to control the wall
time deterministically.
Signed-off-by: Jeremy Ong <jcong@amazon.com>
In some cases, the interface being queried may be persistently nullptr
(e.g. a gem isn't active, or a feature was disabled by a cvar). In this
case, querying the interface would always enter the writer-lock branch
with existing code because nullptr was synonmous with "we haven't
queried for this variable yet."
This PR adds an additional state variable that is set when s_instance is
assigned to, so that after the variable is queried and found to be null,
future queries can enter the read-lock branch.
Signed-off-by: Jeremy Ong <jcong@amazon.com>