Lumiera 0.pre.04
»edit your freedom«
Loading...
Searching...
No Matches
job.h
Go to the documentation of this file.
1/*
2 JOB.h - render job closure
3
4 Copyright (C)
5 2012, Hermann Vosseler <Ichthyostega@web.de>
6
7  **Lumiera** is free software; you can redistribute it and/or modify it
8  under the terms of the GNU General Public License as published by the
9  Free Software Foundation; either version 2 of the License, or (at your
10  option) any later version. See the file COPYING for further details.
11
12*/
13
14
42#ifndef VAULT_GEAR_JOB_H
43#define VAULT_GEAR_JOB_H
44
45
46#include "lib/llist.h"
47#include "lib/hash-value.h"
48#include <inttypes.h>
49
50typedef int64_t raw_time_64;
51
52
62
70
78
79
80typedef int64_t FrameCnt;
81
82
83
90struct lumiera_jobClosure { /* placeholder */ };
91typedef struct lumiera_jobClosure* LumieraJobClosure;
92
93
94
105 {
107
108 /* ----- alternative accessors for test code ---- */
110 struct { int32_t a,b;
111 int64_t t;
113 struct {
114 uint64_t w1;
115 uint64_t w2;
117 };
118
119
120
121
134typedef struct lumiera_jobParameter_struct lumiera_jobParameter;
135typedef lumiera_jobParameter* LumieraJobParameter;
136
137
140 {
141 LumieraJobClosure jobClosure;
142 lumiera_jobParameter parameter;
143 };
144typedef struct lumiera_jobDefinition_struct lumiera_jobDefinition;
145typedef lumiera_jobDefinition* LumieraJobDefinition;
146
147
169 {
172
173 lumiera_jobDefinition jobDefinition;
174
175 /* == Job prerequisites == */
179 };
180typedef struct lumiera_jobDescriptor_struct lumiera_jobDescriptor;
181typedef lumiera_jobDescriptor* LumieraJobDescriptor;
182
183
184
185
186
187
188
189
190#ifdef __cplusplus /* ============== C++ Interface ================= */
191
192#include "lib/nocopy.hpp"
193#include "lib/time/timevalue.hpp"
194#include <string>
195
196
197
198namespace vault{
199namespace gear {
200
202 using lib::time::Time;
203 using lib::HashVal;
204
205 typedef lumiera_jobParameter const& JobParameter;
206
207
210 : util::NonCopyable // ....has distinct identity and stable address
211 {
212 public:
213 virtual ~JobFunctor();
214
215 virtual std::string
217 {
218 return "JobFunctor";
219 }
220
221 operator std::string() const
222 {
223 return diagnostic();
224 }
225 };
242 : public lumiera_jobClosure
243 , public JobFunctor
244 {
245 public:
246 virtual ~JobClosure();
247
248
249 virtual void invokeJobOperation (JobParameter parameter) =0;
250
251 virtual JobKind getJobKind() const =0;
252 virtual HashVal hashOfInstance(InvocationInstanceID) const =0;
253 virtual InvocationInstanceID buildInstanceID(HashVal)const =0;
254
256 };
257
258
259
260
274 class Job
275 : public lumiera_jobDefinition
276 {
277
278 public:
279
280 Job (JobClosure& specificJobDefinition
281 ,InvocationInstanceID invoKey
282 ,Time nominalFrameTime)
283 {
284 this->jobClosure = &specificJobDefinition;
285 this->parameter.nominalTime = _raw(nominalFrameTime);
286 this->parameter.invoKey = invoKey;
287 }
288
289 // using standard copy operations
290
291
292 void triggerJob() const;
293
294
295 Time
297 {
298 return Time (TimeValue(parameter.nominalTime));
299 }
300
303 {
304 return this->parameter.invoKey;
305 }
306
307 JobKind getKind() const;
308
309 bool usesClosure (JobClosure const&) const;
310
312 friend lib::HashVal hash_value (Job const&);
313 };
314
315 inline bool
316 operator== (Job const& left, Job const& right)
317 {
318 return hash_value (left) == hash_value (right);
319 }
320
321 inline bool
322 operator!= (Job const& left, Job const& right)
323 {
324 return hash_value (left) != hash_value (right);
325 }
326
327
328
329
330
331}} // namespace vault::gear
332
333
334
335
336extern "C" {
337#endif /* =========================== C Interface ===================== */
338
339
343
346
347int lumiera_invokey_eq (void* l, void* r);
348
349
350#ifdef __cplusplus
351}
352#endif
353#endif /*VAULT_GEAR_JOB_H*/
basic constant internal time value.
Lumiera's internal time value datatype.
Any copy and copy construction prohibited.
Definition nocopy.hpp:38
Interface of the closure for frame rendering jobs.
Definition job.h:244
lib::HashVal hash_value(JobParameter) const
Definition job.cpp:110
virtual JobKind getJobKind() const =0
virtual HashVal hashOfInstance(InvocationInstanceID) const =0
virtual void invokeJobOperation(JobParameter parameter)=0
virtual ~JobClosure()
this is an interface
Definition job.cpp:62
virtual InvocationInstanceID buildInstanceID(HashVal) const =0
virtual std::string diagnostic() const
Definition job.h:216
virtual ~JobFunctor()
this is an interface
Definition job.cpp:61
Individual frame rendering task, forwarding to a closure.
Definition job.h:276
bool usesClosure(JobClosure const &) const
Definition job.cpp:89
friend lib::HashVal hash_value(Job const &)
provide a hash based Job ID
Definition job.cpp:104
Time getNominalTime() const
Definition job.h:296
JobKind getKind() const
find out about the classification of this job.
Definition job.cpp:82
void triggerJob() const
Definition job.cpp:70
InvocationInstanceID getInvocationInstanceID() const
Definition job.h:302
Job(JobClosure &specificJobDefinition, InvocationInstanceID invoKey, Time nominalFrameTime)
Definition job.h:280
Hash value types and utilities.
unsigned char lumiera_uid[16]
storage for a Lumiera unique ID, based on a 128bit random number
Definition hash-value.h:40
JobKind
Definition job.h:64
@ CALC_JOB
calculating frame data, CPU bound
Definition job.h:65
@ TEST_JOB
test and diagnostic and research
Definition job.h:68
@ LOAD_JOB
accessing prerequisites, IO bound
Definition job.h:66
@ META_JOB
render process self organisation
Definition job.h:67
lumiera_jobDefinition * LumieraJobDefinition
Definition job.h:145
int64_t raw_time_64
Definition job.h:50
int64_t FrameCnt
Definition job.h:80
raw_time_64 deadline
given in real wall clock time
Definition job.h:170
lumiera_jobDescriptor * LumieraJobDescriptor
Definition job.h:181
struct InvocationInstanceID::@62 part
JobState
Definition job.h:54
@ RUNNING
job is currently running
Definition job.h:56
@ ABORTED
got aborted
Definition job.h:60
@ WAITING
waiting for some prerequisite
Definition job.h:57
@ DONE
mission accomplished
Definition job.h:55
@ EXPIRED
deadline expired
Definition job.h:59
@ REJECTED
sorry, can't do that Dave
Definition job.h:58
size_t lumiera_job_get_hash(LumieraJobDefinition)
calculate a hash value based on the Job's identity.
Definition job.cpp:144
int lumiera_invokey_eq(void *l, void *r)
Definition job.cpp:154
lumiera_uid luid
Definition job.h:106
InvocationInstanceID invoKey
Definition job.h:129
void lumiera_job_invoke(LumieraJobDefinition)
trigger execution of a specific job, assuming availability of all prerequisites
Definition job.cpp:137
lumiera_jobParameter parameter
the "moving parts" for this individual invocation (Job)
Definition job.h:142
struct InvocationInstanceID::@63 code
lumiera_jobParameter * LumieraJobParameter
Definition job.h:135
LumieraJobClosure jobClosure
type and context of the job, including the actual functor
Definition job.h:141
lumiera_jobDefinition jobDefinition
of interest only to Steam-Layer
Definition job.h:173
raw_time_64 nominalTime
Definition job.h:128
FrameCnt frameNumber
Definition job.h:109
JobPriority
Definition job.h:72
@ ASAP_JOB
job for freewheeling calculation of final results
Definition job.h:75
@ BACKGROUND_JOB
background rendering job
Definition job.h:76
@ TIMEBOUND_JOB
regular job scheduled for time-bound delivery
Definition job.h:73
@ PAUSED_JOB
Definition job.h:74
complete definition of an individual job
Definition job.h:140
Description of a job.
Definition job.h:169
invocation parameter for the individual frame calculation job.
Definition job.h:127
opaque ID attached to each individual job invocation.
Definition job.h:105
Intrusive cyclic double linked list There is only one node type which contains a forward and a backwa...
llist * LList
Definition llist.h:81
size_t HashVal
a STL compatible hash value
Definition hash-value.h:52
lumiera_jobParameter const & JobParameter
Definition job.h:205
bool operator!=(Job const &left, Job const &right)
Definition job.h:322
HashVal hash_value(ManifestationID const &id)
bool operator==(Job const &left, Job const &right)
Definition job.h:316
Vault-Layer implementation namespace root.
Mix-Ins to allow or prohibit various degrees of copying and cloning.
closure representing the execution context of a job.
Definition job.h:90
a family of time value like entities and their relationships.