2017-01-23 05:21:42 -05:00
|
|
|
-- Enable calling our lua profile code directly from the lua command line,
|
|
|
|
-- which makes it easier to debug.
|
|
|
|
-- We simulate the normal C++ environment by defining the required globals and functions.
|
|
|
|
|
|
|
|
-- See debug_example.lua for an example of how to require and use this file.
|
|
|
|
|
|
|
|
-- for more convenient printing of tables
|
|
|
|
local pprint = require('lib/pprint')
|
|
|
|
|
|
|
|
|
|
|
|
-- globals that are normally set from C++
|
|
|
|
|
|
|
|
-- should match values defined in include/extractor/guidance/road_classification.hpp
|
|
|
|
road_priority_class = {
|
|
|
|
motorway = 0,
|
|
|
|
trunk = 2,
|
|
|
|
primary = 4,
|
|
|
|
secondary = 6,
|
|
|
|
tertiary = 8,
|
|
|
|
main_residential = 10,
|
|
|
|
side_residential = 11,
|
|
|
|
link_road = 14,
|
|
|
|
bike_path = 16,
|
|
|
|
foot_path = 18,
|
|
|
|
connectivity = 31,
|
|
|
|
}
|
|
|
|
|
|
|
|
-- should match values defined in include/extractor/travel_mode.hpp
|
|
|
|
mode = {
|
|
|
|
inaccessible = 0,
|
|
|
|
driving = 1,
|
|
|
|
cycling = 2,
|
|
|
|
walking = 3,
|
|
|
|
ferry = 4,
|
|
|
|
train = 5,
|
|
|
|
pushing_bike = 6,
|
|
|
|
}
|
|
|
|
|
|
|
|
-- Mock C++ helper functions which are called from LUA.
|
|
|
|
-- TODO
|
|
|
|
-- Debugging LUA code that uses these will not work correctly
|
|
|
|
-- unless we reimplement the methods in LUA.
|
|
|
|
|
|
|
|
function durationIsValid(str)
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
|
|
|
function parseDuration(str)
|
|
|
|
return 1
|
|
|
|
end
|
|
|
|
|
|
|
|
function canonicalizeStringList(str)
|
|
|
|
return str
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- debug helper
|
|
|
|
local Debug = {}
|
|
|
|
|
|
|
|
-- helpers for sorting associative array
|
|
|
|
function Debug.get_keys_sorted_by_value(tbl, sortFunction)
|
|
|
|
local keys = {}
|
|
|
|
for key in pairs(tbl) do
|
|
|
|
table.insert(keys, key)
|
|
|
|
end
|
|
|
|
|
|
|
|
table.sort(keys, function(a, b)
|
|
|
|
return sortFunction(tbl[a], tbl[b])
|
|
|
|
end)
|
|
|
|
|
|
|
|
return keys
|
|
|
|
end
|
|
|
|
|
|
|
|
-- helper for printing sorted array
|
|
|
|
function Debug.print_sorted(sorted,associative)
|
|
|
|
for _, key in ipairs(sorted) do
|
|
|
|
print(associative[key], key)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function Debug.report_tag_fetches()
|
|
|
|
print("Tag fetches:")
|
|
|
|
sorted_counts = Debug.get_keys_sorted_by_value(Debug.tags.counts, function(a, b) return a > b end)
|
|
|
|
Debug.print_sorted(sorted_counts, Debug.tags.counts)
|
|
|
|
print(Debug.tags.total, 'total')
|
|
|
|
end
|
|
|
|
|
|
|
|
function Debug.load_profile(profile)
|
2017-05-18 08:27:28 -04:00
|
|
|
Debug.functions = require(profile)
|
|
|
|
Debug.profile = Debug.functions.setup()
|
2017-01-23 05:21:42 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
function Debug.reset_tag_fetch_counts()
|
|
|
|
Debug.tags = {
|
|
|
|
total = 0,
|
|
|
|
counts = {}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
function Debug.register_tag_fetch(k)
|
|
|
|
if Debug.tags.total then
|
|
|
|
Debug.tags.total = Debug.tags.total + 1
|
|
|
|
else
|
|
|
|
Debug['tags']['total'] = 1
|
|
|
|
end
|
|
|
|
|
|
|
|
if Debug['tags']['counts'][k] then
|
|
|
|
Debug['tags']['counts'][k] = Debug['tags']['counts'][k] + 1
|
|
|
|
else
|
|
|
|
Debug['tags']['counts'][k] = 1
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
2017-05-18 08:27:28 -04:00
|
|
|
function Debug.process_way(way,result)
|
2017-01-23 05:21:42 -05:00
|
|
|
|
|
|
|
-- setup result table
|
|
|
|
result.road_classification = {}
|
|
|
|
result.forward_speed = -1
|
|
|
|
result.backward_speed = -1
|
2017-02-04 17:05:00 -05:00
|
|
|
result.duration = 0
|
2017-07-20 05:04:56 -04:00
|
|
|
result.forward_classes = {}
|
|
|
|
result.backward_classes = {}
|
2017-01-23 05:21:42 -05:00
|
|
|
|
|
|
|
-- intercept tag function normally provided via C++
|
|
|
|
function way:get_value_by_key(k)
|
|
|
|
Debug.register_tag_fetch(k)
|
|
|
|
return self[k]
|
|
|
|
end
|
|
|
|
|
|
|
|
-- reset tag counts
|
|
|
|
Debug:reset_tag_fetch_counts()
|
|
|
|
|
2017-05-18 08:27:28 -04:00
|
|
|
-- call the way processsing function
|
|
|
|
Debug.functions.process_way(Debug.profile,way,result)
|
2017-01-23 05:21:42 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
return Debug
|