perf: rutetjek frem+tilbage går markør->markør og gemmes 5 min (var 30-39 ms pr. kald, genberegnet hver 10 m); bygningsliste 30 s — hak på 44-67 ms (v1.33.4.0)
This commit is contained in:
@@ -11,7 +11,7 @@ ADBuildings.MAX_MARKER_DISTANCE = 40
|
|||||||
-- en separat drop-markør (≠ bygningens læssemarkør) må højst stå så langt fra aflæsningstriggeren
|
-- en separat drop-markør (≠ bygningens læssemarkør) må højst stå så langt fra aflæsningstriggeren
|
||||||
ADBuildings.MAX_DROP_DISTANCE = 25
|
ADBuildings.MAX_DROP_DISTANCE = 25
|
||||||
-- bygninger ændrer sig sjældent; genopbygningen (bygninger x markører) er dyr — 1 s gav et hak hvert sekund
|
-- bygninger ændrer sig sjældent; genopbygningen (bygninger x markører) er dyr — 1 s gav et hak hvert sekund
|
||||||
ADBuildings.CACHE_MS = 10000
|
ADBuildings.CACHE_MS = 30000
|
||||||
|
|
||||||
local cache = {list = nil, farmId = nil, time = -math.huge}
|
local cache = {list = nil, farmId = nil, time = -math.huge}
|
||||||
|
|
||||||
|
|||||||
@@ -219,11 +219,39 @@ function ADWaitPool.hasRouteTo(adEnv, vehicle, wayPointId)
|
|||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Rute mellem to markører: afhænger ikke af vognens position, så svaret gemmes længe (5 min). Profiler
|
||||||
|
-- 26/9: "rutetjek frem+tilbage" tog 30-39 ms pr. kald og blev regnet igen hver gang vognen havde flyttet sig
|
||||||
|
-- 10 m — det gav hak på 44-67 ms hvert minut.
|
||||||
|
ADWaitPool.MARKER_ROUTE_MS = 300000
|
||||||
|
local markerRoutes = {}
|
||||||
|
function ADWaitPool.hasMarkerRoute(adEnv, fromWayPointId, toWayPointId)
|
||||||
|
local graph = adEnv.ADGraphManager
|
||||||
|
if graph.pathFromTo == nil then return true end
|
||||||
|
local key = tostring(fromWayPointId) .. ">" .. tostring(toWayPointId)
|
||||||
|
local now = clockMs()
|
||||||
|
local cached = markerRoutes[key]
|
||||||
|
if cached ~= nil and now ~= nil and now - cached.at < ADWaitPool.MARKER_ROUTE_MS then
|
||||||
|
return cached.result
|
||||||
|
end
|
||||||
|
local result = pathReaches(graph:pathFromTo(fromWayPointId, toWayPointId), toWayPointId)
|
||||||
|
if now ~= nil then markerRoutes[key] = {result = result, at = now + math.random() * ADWaitPool.MARKER_ROUTE_MS * 0.5} end
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
function ADWaitPool.resetMarkerRoutes()
|
||||||
|
markerRoutes = {}
|
||||||
|
end
|
||||||
|
|
||||||
function ADWaitPool.hasRouteBothWays(adEnv, vehicle, toWayPointId, homeWayPointId)
|
function ADWaitPool.hasRouteBothWays(adEnv, vehicle, toWayPointId, homeWayPointId)
|
||||||
local graph = adEnv.ADGraphManager
|
local graph = adEnv.ADGraphManager
|
||||||
if graph.getPathTo == nil or graph.pathFromTo == nil then
|
if graph.getPathTo == nil or graph.pathFromTo == nil then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
-- kendt hjem (kilden): vognen kører hjem -> mål -> hjem; markør til markør, gemt længe
|
||||||
|
if homeWayPointId ~= nil then
|
||||||
|
return ADWaitPool.hasMarkerRoute(adEnv, homeWayPointId, toWayPointId)
|
||||||
|
and ADWaitPool.hasMarkerRoute(adEnv, toWayPointId, homeWayPointId)
|
||||||
|
end
|
||||||
local now = clockMs()
|
local now = clockMs()
|
||||||
local key = now ~= nil and routeKey(vehicle, tostring(toWayPointId) .. ">" .. tostring(homeWayPointId)) or nil
|
local key = now ~= nil and routeKey(vehicle, tostring(toWayPointId) .. ">" .. tostring(homeWayPointId)) or nil
|
||||||
local cached = key ~= nil and routeCache[key] or nil
|
local cached = key ~= nil and routeCache[key] or nil
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<modDesc descVersion="107">
|
<modDesc descVersion="107">
|
||||||
<author>masterdraco</author>
|
<author>masterdraco</author>
|
||||||
<version>1.33.3.0</version>
|
<version>1.33.4.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -137,5 +137,24 @@ do
|
|||||||
netGetTime = nil
|
netGetTime = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- MR: rute markør->markør gemmes (uafhængig af hvor vognen er) — hak 26/9: 30-39 ms pr. rutetjek
|
||||||
|
do
|
||||||
|
local calls = 0
|
||||||
|
local realFromTo = adEnv.ADGraphManager.pathFromTo
|
||||||
|
adEnv.ADGraphManager.pathFromTo = function(self, from, to) calls = calls + 1; return realFromTo(self, from, to) end
|
||||||
|
local savedClock = netGetTime
|
||||||
|
local t = 1000
|
||||||
|
netGetTime = function() return t end
|
||||||
|
ADWaitPool.resetMarkerRoutes()
|
||||||
|
local far = {name = "far", rootNode = {x = 5000, z = 5000}}
|
||||||
|
check("MR første: rute", ADWaitPool.hasRouteBothWays(adEnv, v2, 10, 30), true)
|
||||||
|
local afterFirst = calls
|
||||||
|
t = t + 60000
|
||||||
|
check("MR anden fra en helt anden position: samme svar", ADWaitPool.hasRouteBothWays(adEnv, far, 10, 30), true)
|
||||||
|
check("MR anden gang ingen ny ruteberegning", calls, afterFirst)
|
||||||
|
adEnv.ADGraphManager.pathFromTo = realFromTo
|
||||||
|
netGetTime = savedClock
|
||||||
|
end
|
||||||
|
|
||||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||||
os.exit(failures == 0 and 0 or 1)
|
os.exit(failures == 0 and 0 or 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user