Loading [MathJax]/extensions/tex2jax.js
Radium Engine
1.5.20
Toggle main menu visibility
Main Page
Related Pages
Namespaces
Namespace List
Namespace Members
All
a
b
c
d
f
g
i
l
m
n
o
p
q
r
s
t
v
z
Functions
a
c
d
f
g
i
l
m
n
o
p
q
r
s
t
v
Variables
Typedefs
Enumerations
Enumerator
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
~
Functions
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
~
Variables
b
d
f
i
m
s
v
w
Typedefs
a
b
c
f
g
i
k
o
r
s
t
v
Enumerations
Enumerator
Related Symbols
Files
File List
File Members
All
Macros
▼
Radium Engine
►
Radium Basics
►
Radium Concepts
►
Developer manual
►
Licenses
Todo List
Deprecated List
►
Namespaces
►
Classes
▼
Files
▼
File List
▼
src
▼
Core
►
Animation
►
Asset
►
Containers
►
Geometry
►
Math
►
Resources
▼
Tasks
Task.hpp
TaskQueue.cpp
TaskQueue.hpp
►
Utils
CoreMacros.hpp
pch.hpp
RaCore.hpp
Types.hpp
►
Engine
►
Gui
►
Headless
►
IO
►
PluginBase
►
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
Loading...
Searching...
No Matches
TaskQueue.hpp
1
#pragma once
2
3
#include <Core/RaCore.hpp>
4
#include <Core/Utils/Index.hpp>
5
#include <Core/Utils/Timer.hpp>
// Ra::Core::TimePoint
6
7
#include <atomic>
8
#include <condition_variable>
9
#include <deque>
10
#include <memory>
11
#include <mutex>
12
#include <shared_mutex>
13
#include <string>
14
#include <thread>
15
#include <vector>
16
17
namespace
Ra
{
18
namespace
Core {
19
class
Task;
20
}
21
}
// namespace Ra
22
23
namespace
Ra
{
24
namespace
Core {
47
class
RA_CORE_API
TaskQueue
48
{
49
public
:
51
using
TaskId
= Utils::Index;
52
54
struct
TimerData
{
55
Utils::TimePoint
start;
56
Utils::TimePoint
end;
57
uint threadId;
58
std::string
taskName;
59
};
54
struct
TimerData
{
…
};
60
61
public
:
64
explicit
TaskQueue
( uint numThreads );
65
67
~TaskQueue
();
68
69
//
70
// Task management
71
//
72
76
TaskId
registerTask(
std::unique_ptr<Task>
task );
77
81
void
removeTask(
TaskId
taskId );
82
83
TaskId
getTaskId(
const
std::string
& taskName )
const
;
84
87
void
addDependency(
TaskId
predecessor,
TaskId
successor );
88
91
bool
addDependency(
const
std::string
& predecessors,
TaskId
successor );
92
bool
addDependency(
TaskId
predecessor,
const
std::string
& successors );
93
96
void
addPendingDependency(
const
std::string
& predecessors,
TaskId
successor );
97
void
addPendingDependency(
TaskId
predecessor,
const
std::string
& successors );
98
99
//
100
// Task queue operations
101
//
102
105
void
startTasks();
106
113
void
runTasksInThisThread();
114
116
void
waitForTasks();
117
119
const
std::vector<TimerData>
& getTimerData();
120
122
void
flushTaskQueue();
123
125
void
printTaskGraph(
std::ostream
& output )
const
;
126
127
private
:
129
void
runThread( uint
id
);
130
133
void
queueTask(
TaskId
task );
134
137
void
detectCycles();
138
140
void
resolveDependencies();
141
142
private
:
144
using
wlock
=
std::unique_lock<std::shared_mutex>
;
146
using
rlock
=
std::shared_lock<std::shared_mutex>
;
147
149
std::vector<std::thread>
m_workerThreads;
150
151
//
152
// mutex protected variables.
153
//
154
156
std::vector<std::unique_ptr<Task>
> m_tasks;
158
std::vector<std::vector<TaskId>
> m_dependencies;
159
161
std::vector<std::pair<TaskId, std::string>
> m_pendingDepsPre;
162
std::vector<std::pair<std::string, TaskId>
> m_pendingDepsSucc;
163
165
std::vector<TimerData>
m_timerData;
166
168
std::vector<uint>
m_remainingDependencies;
170
std::deque<TaskId>
m_taskQueue;
172
uint m_processingTasks;
173
175
std::atomic_bool m_shuttingDown;
177
std::condition_variable_any
m_threadNotifier;
178
std::condition_variable_any
m_waitForTasksNotifier;
179
181
mutable
std::shared_mutex m_mutex;
182
};
47
class
RA_CORE_API
TaskQueue
{
…
};
183
184
}
// namespace Core
185
}
// namespace Ra
std::ostream
std::string
Ra::Core::TaskQueue
This class allows tasks to be registered and then executed in parallel on separate threads.
Definition
TaskQueue.hpp:48
Ra::Core::TaskQueue::TaskId
Utils::Index TaskId
Identifier for a task in the task queue.
Definition
TaskQueue.hpp:51
std::condition_variable_any
std::deque
Ra
hepler function to manage enum as underlying types in VariableSet
Definition
Cage.cpp:3
std::shared_lock
Ra::Core::TaskQueue::TimerData
Record of a task's start and end time.
Definition
TaskQueue.hpp:54
std::chrono::time_point< Clock >
std::unique_lock
std::unique_ptr
std::vector
src
Core
Tasks
TaskQueue.hpp
Generated by
1.12.0