summaryrefslogtreecommitdiff
path: root/doc/classes
diff options
context:
space:
mode:
authorreduz <reduzio@gmail.com>2022-07-18 12:09:19 +0200
committerreduz <reduzio@gmail.com>2022-07-22 11:46:48 +0200
commit67a260d63f971a6dca2b8716a220831928661085 (patch)
treeb316d47e6cd8de6a11e412150deadedc950367a0 /doc/classes
parented926c4ec1cfadf7e6891e03073e517407ad8d05 (diff)
Implement a Worker ThreadPool
This PR implements a worked thread pool. It uses a fixed amount of threads in a pool and allows scheduling tasks that can be run on threads (and then waited for). It satisfies the following use cases: * HTML5 thread count is fixed (and similar restrictions are known in consoles) so we need to reuse threads. * Thread spawning is slow in general, so reusing threads is faster anyway. * This implementation supports recursive waiting for tasks, making it less prone to deadlocks if threads from the pool also run tasks. After this is approved and merged, subsequent PRs will be needed to replace the ThreadWorkPool usage by this class.
Diffstat (limited to 'doc/classes')
-rw-r--r--doc/classes/@GlobalScope.xml2
-rw-r--r--doc/classes/ProjectSettings.xml6
-rw-r--r--doc/classes/WorkerThreadPool.xml53
3 files changed, 61 insertions, 0 deletions
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml
index 7acec9e63b..fbeda641ad 100644
--- a/doc/classes/@GlobalScope.xml
+++ b/doc/classes/@GlobalScope.xml
@@ -1222,6 +1222,8 @@
<member name="VisualScriptCustomNodes" type="VisualScriptCustomNodes" setter="" getter="">
The [VisualScriptCustomNodes] singleton.
</member>
+ <member name="WorkerThreadPool" type="WorkerThreadPool" setter="" getter="">
+ </member>
<member name="XRServer" type="XRServer" setter="" getter="">
The [XRServer] singleton.
</member>
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 898d34b385..f7567133cd 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -1986,6 +1986,12 @@
</member>
<member name="rendering/vulkan/staging_buffer/texture_upload_region_size_px" type="int" setter="" getter="" default="64">
</member>
+ <member name="threading/worker_pool/low_priority_thread_ratio" type="float" setter="" getter="" default="0.3">
+ </member>
+ <member name="threading/worker_pool/max_threads" type="int" setter="" getter="" default="-1">
+ </member>
+ <member name="threading/worker_pool/use_system_threads_for_low_priority_tasks" type="bool" setter="" getter="" default="true">
+ </member>
<member name="xr/openxr/default_action_map" type="String" setter="" getter="" default="&quot;res://openxr_action_map.tres&quot;">
Action map configuration to load by default.
</member>
diff --git a/doc/classes/WorkerThreadPool.xml b/doc/classes/WorkerThreadPool.xml
new file mode 100644
index 0000000000..22eabf9012
--- /dev/null
+++ b/doc/classes/WorkerThreadPool.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="WorkerThreadPool" inherits="Object" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <methods>
+ <method name="add_group_task">
+ <return type="int" />
+ <argument index="0" name="action" type="Callable" />
+ <argument index="1" name="elements" type="int" />
+ <argument index="2" name="tasks_needed" type="int" default="-1" />
+ <argument index="3" name="high_priority" type="bool" default="false" />
+ <argument index="4" name="description" type="String" default="&quot;&quot;" />
+ <description>
+ </description>
+ </method>
+ <method name="add_task">
+ <return type="int" />
+ <argument index="0" name="action" type="Callable" />
+ <argument index="1" name="high_priority" type="bool" default="false" />
+ <argument index="2" name="description" type="String" default="&quot;&quot;" />
+ <description>
+ </description>
+ </method>
+ <method name="is_group_task_completed" qualifiers="const">
+ <return type="bool" />
+ <argument index="0" name="group_id" type="int" />
+ <description>
+ </description>
+ </method>
+ <method name="is_task_completed" qualifiers="const">
+ <return type="bool" />
+ <argument index="0" name="task_id" type="int" />
+ <description>
+ </description>
+ </method>
+ <method name="wait_for_group_task_completion">
+ <return type="void" />
+ <argument index="0" name="group_id" type="int" />
+ <description>
+ </description>
+ </method>
+ <method name="wait_for_task_completion">
+ <return type="void" />
+ <argument index="0" name="task_id" type="int" />
+ <description>
+ </description>
+ </method>
+ </methods>
+</class>