32 typedef std::function<void(
Job*)> OnCompleteFunction;
34 Job(
const std::string& name,
35 std::shared_ptr<OriginHandler> work,
36 OnCompleteFunction on_complete);
40 const Status& Initialize();
63 const Status& status()
const {
return status_; }
66 const std::string& name()
const {
return name_; }
70 Job& operator=(
const Job&) =
delete;
73 std::shared_ptr<OriginHandler> work_;
74 OnCompleteFunction on_complete_;
75 std::unique_ptr<std::thread> thread_;
87 explicit JobManager(std::unique_ptr<SyncPointQueue> sync_points);
94 void Add(
const std::string& name, std::shared_ptr<OriginHandler> handler);
99 Status InitializeJobs();
104 virtual Status RunJobs();
116 void OnJobComplete(
Job* job);
120 std::unique_ptr<SyncPointQueue> sync_points_;
122 std::vector<std::unique_ptr<Job>> jobs_;
125 std::map<Job*, bool> complete_ ABSL_GUARDED_BY(mutex_);
126 absl::CondVar any_job_complete_ ABSL_GUARDED_BY(mutex_);