| 533 | } |
| 534 | |
| 535 | skr::task::event_t sugoi::scheduler_t::schedule_job(sugoi_query_t* query, sugoi_schedule_callback_t callback, void* u, sugoi_system_lifetime_callback_t init, sugoi_system_lifetime_callback_t teardown, sugoi_resource_operation_t* resources) |
| 536 | { |
| 537 | skr::task::event_t result; |
| 538 | auto deps = update_dependencies(query, result, resources); |
| 539 | { |
| 540 | SkrZoneScopedN("AllocateCounter"); |
| 541 | allCounter.add(1); |
| 542 | query->storage->counter.add(1); |
| 543 | } |
| 544 | skr::task::schedule([deps = std::move(deps), this, query, callback, u, init, teardown]() |
| 545 | { |
| 546 | for(auto dep : deps) |
| 547 | if(auto d = dep.lock()) |
| 548 | d.wait(false); |
| 549 | SKR_DEFER({ |
| 550 | allCounter.decrement(); |
| 551 | query->storage->counter.decrement(); |
| 552 | }); |
| 553 | if(init) |
| 554 | init(u, 0); |
| 555 | callback(u, query); |
| 556 | if(teardown) |
| 557 | teardown(u, 0); |
| 558 | }, &result); |
| 559 | return result; |
| 560 | } |
| 561 | |
| 562 | skr::stl_vector<skr::task::weak_event_t> sugoi::scheduler_t::update_dependencies(sugoi_query_t* query, const skr::task::event_t& counter, sugoi_resource_operation_t* resources) |
| 563 | { |