Commit Graph

59 Commits

Author SHA1 Message Date
Thaddeus Crews a7b74be08c Tests: Tidy up compiled tests 2026-02-19 19:31:09 -06:00
Thaddeus Crews 5482b9e89e Tests: Convert test headers to compilation files
• Excludes module tests, as they'd be a more involved process
2026-02-19 07:36:26 -06:00
Thaddeus Crews 15558cb886 Merge pull request #108111 from Repiteo/core/sanitizer-restructure
Core: Restructure sanitizers
2026-02-18 12:04:30 -06:00
Lukas Tenbrink c9249346c4 Change HashSet copy constructor from implicit to explicit. 2026-02-16 23:10:33 +01:00
Thaddeus Crews beda8dd027 Core: Restructure sanitizers 2026-01-28 09:13:16 -06:00
Lukas Tenbrink 1825e89787 Change copy constructors of HashMap and AHashMap from implicit to explicit. 2026-01-21 13:01:23 +01:00
Lukas Tenbrink d7f5c13db8 Add Span equality (== and !=) operators.
Exchange duplicate equality iteration implementations across `Vector` and `String` with the `Span` version, for a speed boost.
2025-11-15 14:21:54 +01:00
Thaddeus Crews 4725a4bac9 Merge pull request #104793 from YYF233333/remove_astar_stress_test
Remove stress unit tests
2025-10-30 10:46:02 -05:00
Thaddeus Crews 89ce203427 Merge pull request #106997 from Ivorforce/fixed-move-semantics
Fix `FixedVector` move and copy semantics.
2025-10-10 10:26:06 -05:00
Lukas Tenbrink 1db0a60dc0 Replace std::size usage with std_size to avoid <iterator> include. 2025-10-05 00:26:11 +02:00
Yufeng Ying 0139ea615c Remove stress unit test. 2025-09-23 00:30:16 +08:00
Haoyu Qiu 296aba7dc5 Fix CSV translation not updating after reimport 2025-06-17 17:22:49 +08:00
Lukas Tenbrink 2d0ff9774d Add a smoke test to Span in debug builds to recover from non-empty nullptr Span. 2025-06-12 12:19:21 +02:00
Rémi Verschelde 61639d9574 Merge pull request #106996 from Ivorforce/no-oa-hashmap
Core: Remove `OAHashMap`, in favour of `AHashMap`
2025-06-05 13:12:34 +02:00
aaronp64 6b2674fe18 Reuse and optimize sorting logic for List, SelfList, and HashMap
Added SortList class, and updated List, SelfList, and HashMap sort methods to use it.  Sorting is done with merge sort, with an initial check to optimize for already sorted lists, and sorted lists that were appended to.
2025-06-04 10:18:22 -04:00
Lukas Tenbrink c3476b8205 Fix FixedVector move semantics. 2025-05-31 18:22:16 +02:00
Lukas Tenbrink 963c20565b Remove OAHashMap, in favour of AHashMap.
The two types had (mostly) the same decisions, but `AHashMap` is a faster implementation, and is more consistent with `HashMap`.
2025-05-31 15:50:10 +02:00
Yufeng Ying 3bf400ffae Move bisect to Span and deduplicate code.
Co-authored-by: Lukas Tenbrink <lukas.tenbrink@gmail.com>
2025-05-14 18:19:09 +08:00
Lukas Tenbrink 1b1ab76a14 Add FixedVector template.
This is a high performance `Vector`-like object that can be used if the maximum number of objects is small and known, and the objects are needed only temporarily.
2025-04-30 19:14:08 +02:00
Pāvels Nadtočajevs 501c64a12f Remove auto misuse cases. 2025-04-14 16:54:57 +03:00
Thaddeus Crews fc1dbda769 Merge pull request #105164 from stuartcarnie/apple_pthread
Apple: Add pthread implementation of `Thread` class
2025-04-10 10:18:12 -05:00
Stuart Carnie 8c8d6de3e7 Apple: Add pthread implementation of Thread class
This allows Apple platforms to override the default stack size of
a thread in the WorkerThreadPool, which is 512KiB by default.

This must be increased, as SPIRV-Cross, used by the Metal driver, can
use deeply nested stacks, as can debug builds.
2025-04-10 09:35:40 +10:00
Adam Scott cba1ee1594 Add THREADS_ENABLED check before RID thread tests 2025-04-08 14:06:56 -04:00
Lukas Tenbrink ccdc5862e9 Add LocalVector.erase_unordered, mimicking erase but with remove_at_unordered, to remove duplicate logic.
`erase_unordered` should be preferred over `erase` where order is not important, for its performance benefits.

Co-authored-by: smix8 <smix8@users.noreply.github.com>
2025-03-31 13:31:53 +02:00
Lukas Tenbrink 78221946cc Add C array constructor to Span. [skip ci] 2025-03-12 16:48:16 +01:00
Lukas Tenbrink 55a7de93c7 Add iteration to Span. 2025-03-11 23:46:25 +01:00
Lukas Tenbrink 605b62cd29 Add Span struct (replacing StrRange). Spans represent read-only access to a contiguous array, resembling std::span. 2025-03-09 18:19:51 +01:00
Thaddeus Crews 324512e11c Style: Replace header guards with #pragma once 2025-03-07 17:33:47 -06:00
Pablo Andres Fuente 5775d29ad8 Fix SCRIPT ERROR/ERROR/WARNING on test output
Also "fixing" some GDScript completion tests which
where named wrongly.
2025-03-06 13:44:48 +01:00
Pāvels Nadtočajevs 7f7f12dad3 [Tests] Add Packed*Array to_byte_array variant call tests. 2025-02-08 17:40:50 +02:00
Rémi Verschelde 1aaf20b1f1 Merge pull request #98488 from RandomShaper/lockless_rid_fetch_pro
Fix `RID_Owner` synchronization
2025-01-06 08:38:14 +01:00
Pedro J. Estébanez de7e4efef8 Fix RID_Owner synchronization 2025-01-03 17:05:36 +01:00
Rémi Verschelde dd7d36e803 Merge pull request #100770 from hpvb/command-queue-mt
Core: Refactor CommandQueueMT to use vararg templates for performance and maintainability
2025-01-03 00:49:02 +01:00
HP van Braam cccd2432c3 Refactor CommandQueueMT to use vararg templates
In order to make CommandQueueMT more maintainable this PR changes the
previous macro hell with variadic templates instead. This makes the
class far more explicit and will allow us to more easily change the way
the class functions in the future.

Furthermore this refactoring has allowed for some optimizations. In
particular by using std::forward to delay the decision of decaying the
type to as late as possible we are able to move the data from the
callsite into our Command buffer and later move it to the call.

In practice what this means is that compared to the old version instead
of copying values 3 times, we can now get away with 1 copy, and 1 move
for lvalues, and just 2 moves for rvalues. This saves quite a few
operations in a hot codepath.

We also now test to make sure that the amount of copies and moves are
what we expect. This way we can spot performance regressions in this
code easily.

Somewhat unscientifically, running TPS-demo by pressing enter and not
touching the controls average mspf, repeatable across many runs:

before: 6.467
after : 6.202
2025-01-02 15:35:08 +01:00
Lukas Tenbrink 25cd923ea1 Destruct CowData more graciously by avoiding accidentally exposing a half-destructed buffer. This can avoid problems if any of the destructed objects tries to access the data while it's being destructed. 2024-12-21 20:01:03 +01:00
Thaddeus Crews 361e3b4fe8 Core: Expand std::initializer_list support 2024-12-18 18:46:59 -06:00
nazarii 76208f7155 Implement array based hash map 2024-10-24 21:34:12 +03:00
A Thousand Ships 86de59d60a [Core] Add LocalVector::has for convenience 2024-05-06 18:03:37 +02:00
Rémi Verschelde c951421c99 Merge pull request #90268 from RandomShaper/wtp_servers
Use WorkerThreadPool for Server threads (enhanced)
2024-04-15 10:12:00 +02:00
Rémi Verschelde 83b916bb00 Fix a doc and a test issue not caught by CI 2024-04-10 18:49:02 +02:00
Pedro J. Estébanez 1b104ffcd8 WorkerThreadPool: Support daemon-like tasks (via yield semantics) 2024-04-10 18:47:42 +02:00
nazarii 0c8e1c69f8 Add unit tests for OAHashMap 2024-04-10 07:51:06 +03:00
myaaaaaaaaa 6b0f253a45 Fix PagedArray.merge_unordered() dropping pages 2023-02-16 19:58:27 -05:00
Rémi Verschelde d95794ec8a One Copyright Update to rule them all
As many open source projects have started doing it, we're removing the
current year from the copyright notice, so that we don't need to bump
it every year.

It seems like only the first year of publication is technically
relevant for copyright notices, and even that seems to be something
that many companies stopped listing altogether (in a version controlled
codebase, the commits are a much better source of date of publication
than a hardcoded copyright statement).

We also now list Godot Engine contributors first as we're collectively
the current maintainers of the project, and we clarify that the
"exclusive" copyright of the co-founders covers the timespan before
opensourcing (their further contributions are included as part of Godot
Engine contributors).

Also fixed "cf." Frenchism - it's meant as "refer to / see".
2023-01-05 13:25:55 +01:00
Rémi Verschelde 54418ea659 Remove NO_THREADS fallback code, Godot 4 requires thread support
This also removes `OS::can_use_threads` from the public API since it's always
true.
2022-10-03 11:23:26 +02:00
Rémi Verschelde 62423b691e Tests: Silence some intentional errors
Also fix printing messages in ClassDB test.
2022-08-04 22:03:44 +02:00
Sean Kim 4706b975b6 Add unit tests for RID class. 2022-08-04 12:05:25 +02:00
Rémi Verschelde 90019676b0 Code quality: Fix header guards consistency
Adds `header_guards.sh` bash script, used in CI to validate future
changes. Can be run locally to fix invalid header guards.
2022-07-25 11:17:40 +02:00
reduz 45af29da80 Add a new HashSet template
* Intended to replace RBSet in most cases.
* Optimized for iteration speed
2022-05-20 22:40:38 +02:00
reduz 8b7c7f5a75 Add a new HashMap implementation
Adds a new, cleaned up, HashMap implementation.

* Uses Robin Hood Hashing (https://en.wikipedia.org/wiki/Hash_table#Robin_Hood_hashing).
* Keeps elements in a double linked list for simpler, ordered, iteration.
* Allows keeping iterators for later use in removal (Unlike Map<>, it does not do much
  for performance vs keeping the key, but helps replace old code).
* Uses a more modern C++ iterator API, deprecates the old one.
* Supports custom allocator (in case there is a wish to use a paged one).

This class aims to unify all the associative template usage and replace it by this one:
* Map<> (whereas key order does not matter, which is 99% of cases)
* HashMap<>
* OrderedHashMap<>
* OAHashMap<>
2022-05-12 11:21:29 +02:00