Fix RV pathfinder performance regression caused by map size increase.
The YAPF road vehicle pathfinder previously limited the path length to the map size (previously 2048). The extra large maps path increases this to 1M, nearly 3 orders of magnitude, and this can result in a major performance penalty due to excessively long pathfinder paths. Instead limit the RV pathfinder length to a hard-coded 2048.
This commit is contained in:
@@ -16,6 +16,14 @@
|
|||||||
|
|
||||||
#include "../../safeguards.h"
|
#include "../../safeguards.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This used to be MAX_MAP_SIZE, but is now its own constant.
|
||||||
|
* This is due to the addition of the extra-large maps patch,
|
||||||
|
* which increases MAX_MAP_SIZE by several orders of magnitude.
|
||||||
|
* This is no longer a sensible value for pathfinding as it
|
||||||
|
* leads to major performace issues if a path is not found.
|
||||||
|
*/
|
||||||
|
const uint MAX_RV_PF_TILES = 1 << 11;
|
||||||
|
|
||||||
template <class Types>
|
template <class Types>
|
||||||
class CYapfCostRoadT
|
class CYapfCostRoadT
|
||||||
@@ -152,7 +160,7 @@ public:
|
|||||||
/* move to the next tile */
|
/* move to the next tile */
|
||||||
tile = F.m_new_tile;
|
tile = F.m_new_tile;
|
||||||
trackdir = new_td;
|
trackdir = new_td;
|
||||||
if (tiles > MAX_MAP_SIZE) break;
|
if (tiles > MAX_RV_PF_TILES) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* save end of segment back to the node */
|
/* save end of segment back to the node */
|
||||||
|
Reference in New Issue
Block a user