Commit Graph

195 Commits

Author SHA1 Message Date
Jonathan G Rennison 94d629d79b
Change: [Linkgraph] Allow job threads to be aborted early when clearing schedule (#8416)
When link graph jobs are cleared due to abandoning the game or exiting,
flag the job as aborted.
The link graph job running in a separate thread checks the aborted flag
periodically and terminates processing early if set.
This reduces the delay at game abandon or exit if a long-running job
would otherwise still be running.
2020-12-25 00:36:36 +01:00
Jonathan G Rennison 7f0fefddcf Change: [Linkgraph] Only acquire thread join performance measurements on network clients
Network servers and single player clients do not block on thread joins
due to instead pausing shortly before the join is due.
2020-12-22 15:17:57 +01:00
Jonathan G Rennison 0c5dc5d41e Change: [Linkgraph] Pause the game when linkgraph jobs lag (#6470)
Check if the job is still running two date fract ticks before it is due
to join, and if so pause the game until its done.
When loading a game, check if the game would block immediately due to
a job which is scheduled to be joined within two date fract ticks,
and if so pause the game until its done.
This avoids the main thread being blocked on a thread join, which appears
to the user as if the game is unresponsive, as the UI does not repaint
and cannot be interacted with.
Show if pause is due to link graph job in status bar, update network
messages.
This does not apply for network clients.
2020-12-22 15:17:57 +01:00
Patric Stout 56d54cf60e Add: introduce CMake for project management
CMake works on all our supported platforms, like MSVC, Mingw, GCC,
Clang, and many more. It allows for a single way of doing things,
so no longer we need shell scripts and vbs scripts to work on all
our supported platforms.

Additionally, CMake allows to generate project files for like MSVC,
KDevelop, etc.

This heavily reduces the lines of code we need to support multiple
platforms from a project perspective.

Addtiionally, this heavily improves our detection of libraries, etc.
2020-06-05 19:36:05 +02:00
Michael Lutz f2b40f40aa Codechange: Replace SmallPair with std::pair.
std::pair is already the smallest possible pair, and it already handles non-POD types correctly.
2020-05-21 20:02:34 +02:00
Jonathan G Rennison 6e7117e04c Codechange: [Linkgraph] Skip MCF source node Dijkstra when all demand satisfied
MCF Dijkstra iterations are executed for all source nodes in a round-robin order.
Source nodes typically require different numbers of MCF Dijkstra iterations
to satisfy all of their demand.
This change is to avoid performing MCF Dijkstra iterations on source nodes which
have already been fully satisfied.
2020-01-08 22:49:53 +01:00
glx 09fa39c5b5 Codechange: Replace linkgraph related FOR_ALL with range-based for loops 2019-12-21 20:13:03 +01:00
glx ddabfed1cd Codechange: Replace station related FOR_ALL with range-based for loops 2019-12-21 20:13:03 +01:00
S. D. Cloudt 13cc8a0cee Cleanup: Removed SVN headers 2019-11-10 17:59:20 +00:00
JMcKiern 04f659e768 Fix: Some typos found using codespell 2019-09-29 21:27:32 +01:00
Charles Pigott bd87f11355 Codechange: Remove DistributionTypeByte 2019-04-29 17:40:22 +01:00
Henry Wilson 7c8e7c6b6e Codechange: Use null pointer literal instead of the NULL macro 2019-04-10 23:22:20 +02:00
Michael Lutz 05bc2ed7cb Codechange: Replace custom thread code with C++11 thread objects.
We assume a conforming C++11 compiler environment that has a valid <thread>-header.
Failure to run a real thread is handled gracefully.
2019-04-06 11:27:39 +02:00
PeterN 32fda83d39
Fix aa7ca7fe6: Linkgraph node index order must be maintained due to other references. (#7431)
Linkgraph nodes require a specific order that was maintained by swapping just the last
element for the node to be removed. std::vector::erase() changed this to removing the
node is then shuffling the remain items down, which upsets other references to this
indices.

This is fixed by switching back to the original swap & pop method.
2019-03-30 22:19:50 +00:00
glx22 66dd7c3879
Fix: MSVC warnings (#7423) 2019-03-28 00:09:33 +01:00
Henry Wilson c01a2e2a81 Codechange: Removed SmallVector completely 2019-03-26 20:15:57 +00:00
Henry Wilson a0f36a50e6 Codechange: Replaced SmallVector::Append() with std::vector::[push|emplace]_back() 2019-03-26 20:15:57 +00:00
Henry Wilson aa7ca7fe64 Codechange: Replaced SmallVector::Get(n) non-const with std::vector::data() + n 2019-03-26 20:15:57 +00:00
Henry Wilson bad2c2154b Codechange: Replaced SmallVector::Resize() with std::vector::resize() 2019-03-26 20:15:57 +00:00
Henry Wilson a690936ed7 Codechange: Replace SmallVector::Length() with std::vector::size() 2019-03-26 20:15:57 +00:00
peter1138 317f69c152 Codechange: Use override specifier in Window-derived classes. 2019-03-24 16:10:04 +01:00
peter1138 f5f33da126 Codechange: Implement OnTooltip event for custom window tooltips.
This avoids windows from needing to know or care about tooltip delay settings.
2019-03-20 23:00:32 +00:00
PeterN 87ebfe1227
Fix #7004: Mark linkgraph dirty to be rebuilt on next draw call. (#7265)
Previously the linkgraph was rebuilt before the viewport extents were finalized.
2019-02-23 19:19:41 +00:00
Jonathan G Rennison 64f1847bec Codechange: [Linkgraph GUI] Replace line visibility detection algorithm
Use an implementation of the Cohen-Sutherland line-clipping algorithm.
The previous algorithm had an excessive false-positive rate.
Line-rendering is sufficiently expensive that using a line-clipping
algorithm with a much lower false-positive rate is a net performance
benefit.
2019-01-28 19:15:21 +01:00
Charles Pigott f5b1115039 Doc: Lots and lots of doxymentation fixes 2018-10-31 12:35:54 +01:00
Niels Martin Hansen 2a868b9f3b Feature: Framerate display window (#6822)
Frame rate and various game loop/graphics timing measurements and graphs. Accessible via the Help menu, and can print some stats in the console via the fps command.
2018-07-19 21:17:07 +02:00
Jonathan G Rennison dc8fff2c4d Add: Hover tool-tips to cargo dest flow legend window.
This is to improve the usability of the window.
The two-letter abbreviations are not always clear, in particular
when using a large number of cargoes.
The company colours can be ambiguous when there are a large
number of companies.
2018-06-24 20:18:10 +02:00
Jonathan G Rennison 458bc90678 Fix: Poor contrast in cargo dest flow legend window cargo labels.
Select foreground colour depending on the brightness of the background.

Previously all cargo labels were rendered using black text, even
the background cargo colour was dark/black.
As an example: FIRS coal was black text on a black background.
2018-06-24 19:32:04 +02:00
PeterN 4cebebcf68
Change: Add CargoTypes type for cargo masks. (#6790) 2018-05-21 22:08:39 +01:00
frosch 3eae9aba79 (svn r27887) -Cleanup: Remove unused/unimplemented prototype (adf88) 2017-07-11 19:34:21 +00:00
frosch 31f046bd9b (svn r27670) -Add: [FS#6471] Assign descriptive names to (GNU pthread) threads. (JGR) 2016-10-30 17:29:33 +00:00
fonsinchen f769305d7d (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 022b284064 (svn r27613) -Codechange: Use a flat vector instead of a map in FlowEdgeIterator. (JGR) 2016-07-10 12:03:23 +00:00
fonsinchen e2426b22fa (svn r27612) -Codechange: Replace three uses of std::list with std::queue/vector. (JGR) 2016-07-10 11:57:16 +00:00
fonsinchen bcdae9a093 (svn r27611) -Codechange: Cache the calculated value of CapacityAnnotation 2016-07-10 11:53:43 +00:00
frosch 780e595933 (svn r27178) -Fix [FS#5969]: Data race due to lazy initialisation of objects. 2015-03-07 18:27:01 +00:00
rubidium d534c80e94 (svn r27020) -Cleanup: some coding style consistency improvements (mostly spaces) 2014-10-15 18:31:37 +00:00
rubidium fddeeb5e49 (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 9fdb88962f (svn r26891) -Codechange: Add methods to retrieve flows from a FlowStatMap 2014-09-21 16:19:52 +00:00
fonsinchen 831fb254f6 (svn r26889) -Feature: Predict links for station-autorefitting vehicles 2014-09-21 14:22:32 +00:00
fonsinchen 957f5ca117 (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 89c25b955e (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 11d98f043e (svn r26549) -Change: better estimation for link capacities during full load 2014-05-01 14:50:52 +00:00
fonsinchen 56e8ea6dde (svn r26484) -Change: Remove demand calculation based on tiles. 2014-04-23 20:23:22 +00:00
rubidium 0463dbdc9e (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 bef953a32c (svn r26448) -Fix [FS#5970]: Avoid division by 0 when scaling flow values. 2014-04-08 19:28:14 +00:00
fonsinchen 782b9f01cb (svn r26445) -Change [FS#5961]: Draw links to match _settings_game.vehicle.road_side (M3Henry) 2014-04-05 14:28:55 +00:00
fonsinchen afd1263ce1 (svn r26411) -Change [FS#5941]: Use better distance metric for link graph (MildaIV) 2014-03-17 20:33:26 +00:00
fonsinchen 5d3fcce725 (svn r26393) -Fix: Update distances between link graph nodes when station sign is moved 2014-03-06 21:19:41 +00:00
fonsinchen cc77d40336 (svn r26347) -Fix [FS#5898]: Make sure link graph jobs can delete themselves after SLA_NULL. 2014-02-16 18:42:59 +00:00
fonsinchen 2945e76269 (svn r26341) -Fix [FS#5902]: Reroute cargo when automatic distribution is switched off. 2014-02-16 11:17:17 +00:00
fonsinchen e37656f2e5 (svn r26331) -Fix: some inconsistencies regarding link graph (job) IDs. 2014-02-10 20:13:07 +00:00
fonsinchen 91407b924e (svn r26286) -Fix: Thoroughly erase dead flows. 2014-01-29 19:55:29 +00:00
fonsinchen b12bf124c7 (svn r26283) -Fix [FS#5878]: Prevent infinite recursion also in RefreshLinks. 2014-01-28 19:49:43 +00:00
fonsinchen 95354136be (svn r26276) -Fix [FS#5874]: Don't spawn link graph jobs for link graphs with only one node 2014-01-24 21:39:07 +00:00
fonsinchen b158c7d0fa (svn r26266) -Fix [FS#5860]: Update smallmap overlay if player joins different company and make sure company masks are valid 2014-01-19 09:26:56 +00:00
fonsinchen ec492bfb77 (svn r26166) -Fix: Scale flows only after mapping to avoid rounding errors. 2013-12-20 14:57:44 +00:00
fonsinchen 962d6d7e48 (svn r25963) -Fix [FS#5758]: Mixtures of old and new flows could create cycles. 2013-11-10 15:18:49 +00:00
fonsinchen f6fd21e8e6 (svn r25948) -Fix [FS#5796]: Make sure LinkRefresher doesn't delete the LinkGraph DeleteStaleLinks() is examining. 2013-11-07 20:50:03 +00:00
frosch 2a16d139a2 (svn r25934) -Fix [FS#5793]: Do not access items from other pools in pool item destructors during pool cleaning. 2013-10-31 20:31:10 +00:00
fonsinchen 1237e3c48c (svn r25912) -Fix [FS#5676]: Draw 'shared' links (involving neutral stations) as dashed lines and show them in every company's link graph overlay. 2013-10-23 19:42:17 +00:00
fonsinchen b5dd83e84f (svn r25909) -Fix (r25906): That simplification was a bit too much. 2013-10-23 17:11:34 +00:00
fonsinchen 6c4e7ab51d (svn r25908) -Fix: Some documentation for constructors of LinkRefresher::Hop. 2013-10-22 19:25:29 +00:00
fonsinchen fb7ad743d2 (svn r25906) -Fix: Simplify condition logic in link refresher. 2013-10-22 18:46:58 +00:00
fonsinchen a9f6a1eeb7 (svn r25905) -Codechange: A more robust way of detecting loops during order prediction. 2013-10-22 18:46:20 +00:00
fonsinchen d3fa322087 (svn r25904) -Fix: add forgotten files 2013-10-22 18:45:55 +00:00
fonsinchen 2f9c48b859 (svn r25901) -Fix [FS#5675]: Check if any vehicles are still serving a link before deleting it. 2013-10-22 16:19:31 +00:00
fonsinchen 6524849386 (svn r25899) -Change: Restrict flows if links are restricted and don't normally pick them anymore. 2013-10-22 16:13:54 +00:00
fonsinchen 29e987f3fc (svn r25898) -Codechange: Add second timestamp for 'restricted links' to all edges. 2013-10-22 16:13:28 +00:00
fonsinchen b3b460cae2 (svn r25885) -Codechange: Keep paths sorted so that the ones with flow == 0 are in the back and don't have to be iterated over so often. 2013-10-19 17:15:19 +00:00
fonsinchen 5ab204c8a1 (svn r25867) -Fix [FS#5764]: Shift dates on link graphs when using scenario editor date tool. 2013-10-15 17:32:31 +00:00
frosch 27a77d2c09 (svn r25861) -Fix [FS#5760]: Scale linkgraph legend according to text dimensions. 2013-10-13 13:44:58 +00:00
fonsinchen bcbaa92485 (svn r25741) -Fix: shift join dates of link graph jobs when using the date cheat 2013-08-23 18:37:45 +00:00
frosch f89375aa44 (svn r25731) -Fix [FS#5692]: Minor RTL alignment issues. (sbr) 2013-08-18 19:30:25 +00:00
fonsinchen ca1c792144 (svn r25637) -Fix: don't keep minimal routing information if automatic distribution has been disabled 2013-07-30 19:03:56 +00:00
fonsinchen f0119308f6 (svn r25424) -Fix: keep old flows around in an invalidated state to continue routing cargo if necessary 2013-06-17 20:38:11 +00:00
fonsinchen b923eb31a8 (svn r25423) -Fix: integer overflows in MCF solver 2013-06-17 20:37:31 +00:00
fonsinchen d9985c3331 (svn r25422) -Fix: properly initialize base capacity for paths 2013-06-17 20:37:07 +00:00
rubidium b860353a66 (svn r25387) -Fix: "typos" in @file filename 2013-06-09 18:58:36 +00:00
fonsinchen b4ab43be5f (svn r25364) -Add: support for flow stats to linkgraph overlay 2013-06-09 13:07:53 +00:00
fonsinchen 575cabe90a (svn r25357) -Add: flow mapper for link graph 2013-06-09 13:01:23 +00:00
fonsinchen 9824d53d6a (svn r25356) -Add: Multi-Commodity-Flow solver for link graph 2013-06-09 13:00:41 +00:00
fonsinchen 6a46b5262f (svn r25355) -Add: demand handler for link graph 2013-06-09 12:59:51 +00:00
fonsinchen c32eea02dd (svn r25354) -Add: link graph schedule and typedefs for LinkGraph and related classes 2013-06-09 12:58:37 +00:00
fonsinchen 22f56ffdd7 (svn r25353) -Add: link graph job implementation 2013-06-09 12:57:41 +00:00
fonsinchen fdf04f60e0 (svn r25350) -Add: basic definitions for link graph 2013-06-09 12:53:34 +00:00
frosch d79b2b03d0 (svn r25334) -Fix: Position the linkgraph legend window automatically like most windows. 2013-06-08 16:52:33 +00:00
rubidium 0fbc7140c5 (svn r25320) -Fix [FS#5577]: link graph start time was not accounted for when cheating dates 2013-06-04 15:06:22 +00:00
frosch 8157a8afd8 (svn r25290) -Add: Assign string names to notable windows. 2013-05-26 19:25:01 +00:00
frosch 56e4a8c4d6 (svn r25287) -Codechange: Keep a reference to the WindowDesc in the Window after construction. 2013-05-26 19:23:42 +00:00
rubidium ef7befdbd8 (svn r25264) -Feature: linkgraph overlay over main viewport (fonsinchen) 2013-05-19 14:49:25 +00:00
rubidium 50ae992b47 (svn r25263) -Add: legend for linkgraph overlay (fonsinchen) 2013-05-19 14:43:23 +00:00
rubidium 163dfdd34a (svn r25262) -Feature: linkgraph overlay for smallmap 2013-05-19 14:36:35 +00:00
rubidium 5bca50c466 (svn r25261) -Add: abstract implementation of linkgraph overlay for GUI (fonsinchen) 2013-05-19 14:30:40 +00:00
rubidium 06313e4981 (svn r25257) -Add: basic link graph (fonsinchen) 2013-05-19 14:11:20 +00:00