Optimized TaskDrivers so they won't schedule jobs if no one has written to them.
What is the current behaviour?
TaskDrivers always run their jobs even if there is no data to operate on. This leads to a lot of scheduling overhead that adds up.
What is the new behaviour?
TaskDriverManagementSystem forces a sync after consolidation. This is to prevent issues with circular writing patterns such as:
Write Pending
Consolidate to Active (which gets a write handle to Pending again so we can clear it even though we're not actually writing)
Which will cause the Consolidation to happen again next frame for 0 elements.
By forcing the consolidation, we can also check the length to ensure we actually have data when scheduling.
AbstractData exposes a boolean to let callers know if its data could have been invalidated. If so, it's worth scheduling the job. Otherwise, no one has touched it.
AbstractJobConfig will only schedule jobs if the scheduling data has data to work on.
AbstractDataSource will only consolidate data if there has data to work on.
Optimized TaskDrivers so they won't schedule jobs if no one has written to them.
What is the current behaviour?
TaskDrivers always run their jobs even if there is no data to operate on. This leads to a lot of scheduling overhead that adds up.
What is the new behaviour?
TaskDriverManagementSystem
forces a sync after consolidation. This is to prevent issues with circular writing patterns such as:By forcing the consolidation, we can also check the length to ensure we actually have data when scheduling.
AbstractData
exposes a boolean to let callers know if its data could have been invalidated. If so, it's worth scheduling the job. Otherwise, no one has touched it.AbstractJobConfig
will only schedule jobs if the scheduling data has data to work on.AbstractDataSource
will only consolidate data if there has data to work on.What issues does this resolve?
What PRs does this depend on?
259
Does this introduce a breaking change?