Commit Graph

95 Commits

Author SHA1 Message Date
Jonathan G Rennison
7e89b9789f Linkgraph: Fix divide by 0 error when total linkgraph cost estimate <= 1. 2017-02-13 21:29:58 +00:00
Jonathan G Rennison
117b56caeb Linkgraph: Replace a std::list with a std::vector. 2017-02-08 22:08:39 +00:00
Jonathan G Rennison
c86a027e88 Linkgraph: Use an arena allocator for path objects.
Fixes leaks when job is aborted early.
2017-02-08 22:03:59 +00:00
Jonathan G Rennison
3f2c561867 Linkgraph: Add support for aborting MCF passes early. 2017-02-08 22:00:35 +00:00
Jonathan G Rennison
2080daab8d Linkgraph: Refactoring to avoid manual deletes. 2017-02-08 21:59:41 +00:00
Jonathan G Rennison
28211c21fc Linkgraph: Fix a memory leak when aborting job early. 2017-02-08 02:01:27 +00:00
Jonathan G Rennison
9d5f34fea6 Replace various uses of std::set/map with btree containers. 2017-02-08 00:18:09 +00:00
Jonathan G Rennison
375dbdbfe1 Linkgraph: Allow job threads to be aborted early when clearing schedule. 2016-11-26 00:33:50 +00:00
Jonathan G Rennison
d08d1cbd67 Linkgraph: Avoid attempting to merge/apply job when cleaning schedule.
This can cause crashes when switching savegame.
Move job merge/apply out of destructor into separate function.
2016-11-26 00:15:01 +00:00
Jonathan G Rennison
fa261207ae Link graph GUI: Fix poor contrast in graph legend window cargo labels.
Select foreground colour depending on brightness of background.
2016-11-21 23:08:13 +00:00
Jonathan G Rennison
55057110a5 Linkgraph GUI: Add hover tool-tips to graph legend window. 2016-11-21 22:38:04 +00:00
Jonathan G Rennison
1cede8431f Linkgraph: Support running multiple jobs per spawned thread. 2016-11-01 23:02:15 +00:00
Jonathan G Rennison
84e61b690a 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.
2016-11-01 23:02:15 +00:00
Jonathan G Rennison
b8a89437a1 Enable use of atomic store/load on clang. 2016-09-08 18:40:08 +01:00
Jonathan G Rennison
9ea018abc5 Merge branch 'cargo_type_order' into jgrpp
# Conflicts:
#	src/order_base.h
#	src/order_gui.cpp
#	src/order_type.h
#	src/saveload/extended_ver_sl.cpp
#	src/saveload/extended_ver_sl.h
#	src/vehicle_base.h
2016-09-08 00:12:48 +01:00
Jonathan G Rennison
6031cca2d7 Refactor Link Refresher cargo mask handling.
Add some separate helper functions.
Move cargo checks out of LinkRefresher::Run.
2016-09-06 22:16:29 +01:00
Jonathan G Rennison
e90b266af1 De-duplicate cargo masking boilerplate using C++11. 2016-09-06 22:10:18 +01:00
Jonathan G Rennison
3507b51d9e Initial LinkRefresher support for cargo-specific links. 2016-09-05 00:12:48 +01:00
Jonathan G Rennison
7b56097f50 Merge branch 'master' into jgrpp
# Conflicts:
#	config.lib
#	src/linkgraph/demands.cpp
#	src/linkgraph/mcf.cpp
#	src/linkgraph/refresh.cpp
#	src/linkgraph/refresh.h
#	src/smallmap_gui.cpp
2016-07-24 10:16:55 +01:00
fonsinchen
ff96590312 (svn r27614) -Codechange: Use a fixed array instead of a map for link refresher cargo capacities. (JGR) 2016-07-10 12:17:00 +00:00
fonsinchen
a81b7a24a6 (svn r27613) -Codechange: Use a flat vector instead of a map in FlowEdgeIterator. (JGR) 2016-07-10 12:03:23 +00:00
fonsinchen
6b2eed0a70 (svn r27612) -Codechange: Replace three uses of std::list with std::queue/vector. (JGR) 2016-07-10 11:57:16 +00:00
fonsinchen
8d5566651b (svn r27611) -Codechange: Cache the calculated value of CapacityAnnotation 2016-07-10 11:53:43 +00:00
Jonathan G Rennison
61ff4f5d97 Limit linkgraph recalc interval to minimum of 2 ticks.
The interval could otherwise fall to 1 tick at very high day lengths,
and low number of days interval, with recalc not scaled by day length
enabled.
2016-01-31 12:22:03 +00:00
Jonathan G Rennison
78cf5ca682 Add setting for linkgraph times to be in non daylength scaled days.
Savegame format change for link graph jobs.
Change link graph scheduler to support more than one operation
per day, on _date_fract ticks other than SPAWN_JOIN_TICK.
2016-01-29 00:26:47 +00:00
Jonathan G Rennison
3896952136 Join more than one link graph job at once where possible.
This can occur when the link graph recalculation times are changed.
In particular, if the duration or interval are reduced, the new jobs
will be delayed until the completion of the previous long job,
and then remain backlogged thereafter as jobs are dequeued at the same
rate as they are queued.
2016-01-28 19:32:21 +00:00
Jonathan G Rennison
548ea31e83 Fix compilation on gcc before 4.7 due to use of atomic builtins. 2016-01-07 22:45:11 +00:00
Jonathan G Rennison
58b6bf16c3 Linkgraph: Enable MCF custom allocator only for GCC 4.9+
Earlier compilers don't use std::allocator_traits to query allocators.
2015-11-29 19:10:16 +00:00
Jonathan G Rennison
e22e1df939 Store annotation and node ID in set key, to reduce ptr derefs on sort.
Store the set iterator in the node, for faster erasing during forks.

Use a custom pool allocator to store set nodes contiguously.
2015-11-27 01:02:55 +00:00
Jonathan G Rennison
4534812b4f Use a fixed array instead of a map for link refresher cargo capacities. 2015-11-26 18:59:31 +00:00
Jonathan G Rennison
0fb79a8f15 Use a flat vector instead of a map in FlowEdgeIterator.
This reduced the cost of Dijkstra<CapacityAnnotation> by approx. 25%,
in a test profiling.
2015-11-26 18:23:10 +00:00
Jonathan G Rennison
a3768d3a29 Label threads with a descriptive name where supported (pthreads). 2015-11-26 17:48:47 +00:00
Jonathan G Rennison
3a28be7841 Linkgraph: Replace three uses of std::list with std::deque/vector. 2015-11-26 01:02:52 +00:00
Jonathan G Rennison
564744d427 Cache the calculated value of CapacityAnnotation.
This is because CapacityAnnotation::Comparator::operator()
was appearing at the top of profiler output due to regenerating
the annotation value on every comparison when performing a set operation.
2015-11-25 23:05:55 +00:00
Jonathan G Rennison
c6854afcef Pause the game instead of blocking when link graph jobs lag.
Check if the job is still running one date fract tick before it
is due to join and if so pause the game until its done.
This avoids the main thread being blocked on a thread join.
Show if pause is due to link graph job in status bar, update network
messages.
This does not apply for network clients.
2015-09-03 18:36:30 +01:00
frosch
a14b836bf2 (svn r27178) -Fix [FS#5969]: Data race due to lazy initialisation of objects. 2015-03-07 18:27:01 +00:00
rubidium
0c2f4bdc2b (svn r27020) -Cleanup: some coding style consistency improvements (mostly spaces) 2014-10-15 18:31:37 +00:00
rubidium
26574124b1 (svn r27002) -Fix-ish: replace some non-ASCII characters with ASCII characters, e.g. @þaram to @param 2014-10-12 18:26:54 +00:00
fonsinchen
78df68e695 (svn r26891) -Codechange: Add methods to retrieve flows from a FlowStatMap 2014-09-21 16:19:52 +00:00
fonsinchen
ce9d75f517 (svn r26889) -Feature: Predict links for station-autorefitting vehicles 2014-09-21 14:22:32 +00:00
fonsinchen
ef2caa02b2 (svn r26646) -Fix [FS#6041]: Save locations instead of distances in link graphs to reduce size. 2014-06-14 13:35:39 +00:00
rubidium
fb9dbf30fa (svn r26580) -Codechange: s/GES_PICKUP/GES_RATING/ (it has nothing to do with actual pickup), s/acceptance_pickup/status/ (the enum isn't called GoodEntryStatus for a reason; it's not only acceptance and pickup anymore) 2014-05-11 18:02:11 +00:00
fonsinchen
b8381b6b25 (svn r26549) -Change: better estimation for link capacities during full load 2014-05-01 14:50:52 +00:00
fonsinchen
547e8233be (svn r26484) -Change: Remove demand calculation based on tiles. 2014-04-23 20:23:22 +00:00
rubidium
2be4215f43 (svn r26482) -Codechange: add an include that allows us to undefine/redefine "unsafe" functions to prevent them from being used, and thus having to care about certain aspects of their return values 2014-04-23 20:13:33 +00:00
fonsinchen
8395c08738 (svn r26448) -Fix [FS#5970]: Avoid division by 0 when scaling flow values. 2014-04-08 19:28:14 +00:00
fonsinchen
d6097956a5 (svn r26445) -Change [FS#5961]: Draw links to match _settings_game.vehicle.road_side (M3Henry) 2014-04-05 14:28:55 +00:00
fonsinchen
e4385f1423 (svn r26411) -Change [FS#5941]: Use better distance metric for link graph (MildaIV) 2014-03-17 20:33:26 +00:00
fonsinchen
3570104d24 (svn r26393) -Fix: Update distances between link graph nodes when station sign is moved 2014-03-06 21:19:41 +00:00
fonsinchen
ebcba0c0e3 (svn r26347) -Fix [FS#5898]: Make sure link graph jobs can delete themselves after SLA_NULL. 2014-02-16 18:42:59 +00:00