- JobSystem abstraction over the existing ThreadPool worker pool; the factory in JobSystem.cpp is the single backend switch point (TBB later). - Job carries a dependency count and completion callback so a render graph can be wired on top without rewriting the scheduler. - parallel_for(first, last, body, chunk) with static partitioning, auto chunk sizing, and a join handle; task_group provides fork/join with help-execution so workers can wait without deadlocking. - Per-frame arena (beginFrame/endFrame) for frame-scoped jobs: no per-frame new/delete; frame jobs are recycled by the arena. - Thread module exposes a shared engine JobSystem (getJobSystem). - VoxelWorld::remeshDirty now uses parallel_for instead of raw std::thread. - 24 new zeroerr tests in test/thread.cpp; verified with a standalone MSVC harness (24 cases x 30 runs, no flakes).
20 lines
528 B
C++
20 lines
528 B
C++
#include "thread/JobSystem.h"
|
|
|
|
#include "thread/JobSystemThreadPool.h"
|
|
|
|
namespace eve {
|
|
namespace thread {
|
|
|
|
/**
|
|
* Backend switch point: the engine's scheduler is selected here. The default
|
|
* implementation schedules on top of the existing ThreadPool worker pool. A
|
|
* TBB backend only needs to implement the JobSystem/Job/TaskGroup interfaces
|
|
* and be returned from this factory.
|
|
*/
|
|
JobSystem *createJobSystem(int workerCount) {
|
|
return new JobSystemThreadPool(workerCount);
|
|
}
|
|
|
|
} // namespace thread
|
|
} // namespace eve
|