Linkgraph: Changes to job scheduling algorithm.

This is to improve responsiveness of link graph updates, whilst
avoiding being blocked waiting for updates to complete.
Previously, large numbers of cheap jobs resulted in poor responsiveness
as it took a long time for jobs to cycle round.

Add 'linkgraph' debug category.
This commit is contained in:
Jonathan G Rennison
2016-10-31 00:21:01 +00:00
parent 7f10d83a4a
commit 84e61b690a
7 changed files with 82 additions and 24 deletions

View File

@@ -28,9 +28,9 @@ INSTANTIATE_POOL_METHODS(LinkGraphJob)
*/
/* static */ Path *Path::invalid_path = new Path(INVALID_NODE, true);
static DateTicks GetLinkGraphJobJoinDateTicks()
static DateTicks GetLinkGraphJobJoinDateTicks(uint duration_multiplier)
{
DateTicks ticks = _settings_game.linkgraph.recalc_time * DAY_TICKS;
DateTicks ticks = _settings_game.linkgraph.recalc_time * DAY_TICKS * duration_multiplier;
if (_settings_game.linkgraph.recalc_not_scaled_by_daylength) {
ticks /= _settings_game.economy.day_length_factor;
}
@@ -43,13 +43,13 @@ static DateTicks GetLinkGraphJobJoinDateTicks()
* original. The job is immediately started.
* @param orig Original LinkGraph to be copied.
*/
LinkGraphJob::LinkGraphJob(const LinkGraph &orig) :
LinkGraphJob::LinkGraphJob(const LinkGraph &orig, uint duration_multiplier) :
/* Copying the link graph here also copies its index member.
* This is on purpose. */
link_graph(orig),
settings(_settings_game.linkgraph),
thread(NULL),
join_date_ticks(GetLinkGraphJobJoinDateTicks()),
join_date_ticks(GetLinkGraphJobJoinDateTicks(duration_multiplier)),
start_date_ticks((_date * DAY_TICKS) + _date_fract),
job_completed(false)
{