JobSystemSingleThreaded.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2023 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Jolt/Core/JobSystem.h>
  6. #include <Jolt/Core/FixedSizeFreeList.h>
  7. JPH_NAMESPACE_BEGIN
  8. /// Implementation of a JobSystem without threads, runs jobs as soon as they are added
  9. class JPH_EXPORT JobSystemSingleThreaded final : public JobSystem
  10. {
  11. public:
  12. JPH_OVERRIDE_NEW_DELETE
  13. /// Constructor
  14. JobSystemSingleThreaded() = default;
  15. explicit JobSystemSingleThreaded(uint inMaxJobs) { Init(inMaxJobs); }
  16. /// Initialize the job system
  17. /// @param inMaxJobs Max number of jobs that can be allocated at any time
  18. void Init(uint inMaxJobs);
  19. // See JobSystem
  20. virtual int GetMaxConcurrency() const override { return 1; }
  21. virtual JobHandle CreateJob(const char *inName, ColorArg inColor, const JobFunction &inJobFunction, uint32 inNumDependencies = 0) override;
  22. virtual Barrier * CreateBarrier() override;
  23. virtual void DestroyBarrier(Barrier *inBarrier) override;
  24. virtual void WaitForJobs(Barrier *inBarrier) override;
  25. protected:
  26. // Dummy implementation of Barrier, all jobs are executed immediately
  27. class BarrierImpl : public Barrier
  28. {
  29. public:
  30. JPH_OVERRIDE_NEW_DELETE
  31. // See Barrier
  32. virtual void AddJob(const JobHandle &inJob) override { /* We don't need to track jobs */ }
  33. virtual void AddJobs(const JobHandle *inHandles, uint inNumHandles) override { /* We don't need to track jobs */ }
  34. protected:
  35. /// Called by a Job to mark that it is finished
  36. virtual void OnJobFinished(Job *inJob) override { /* We don't need to track jobs */ }
  37. };
  38. // See JobSystem
  39. virtual void QueueJob(Job *inJob) override;
  40. virtual void QueueJobs(Job **inJobs, uint inNumJobs) override;
  41. virtual void FreeJob(Job *inJob) override;
  42. /// Shared barrier since the barrier implementation does nothing
  43. BarrierImpl mDummyBarrier;
  44. /// Array of jobs (fixed size)
  45. using AvailableJobs = FixedSizeFreeList<Job>;
  46. AvailableJobs mJobs;
  47. };
  48. JPH_NAMESPACE_END