Improve map matching benchmark
This commit is contained in:
parent
89fce286a7
commit
fb14189cbb
@ -12,13 +12,15 @@
|
|||||||
|
|
||||||
#include <boost/assert.hpp>
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
#include <boost/optional/optional.hpp>
|
||||||
|
#include <cstdlib>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <optional>
|
||||||
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include <cstdlib>
|
|
||||||
|
|
||||||
int main(int argc, const char *argv[])
|
int main(int argc, const char *argv[])
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -213,25 +215,54 @@ try
|
|||||||
FloatCoordinate{FloatLongitude{7.415513992309569}, FloatLatitude{43.73347615145474}});
|
FloatCoordinate{FloatLongitude{7.415513992309569}, FloatLatitude{43.73347615145474}});
|
||||||
params.coordinates.push_back(
|
params.coordinates.push_back(
|
||||||
FloatCoordinate{FloatLongitude{7.415342330932617}, FloatLatitude{43.733251335381205}});
|
FloatCoordinate{FloatLongitude{7.415342330932617}, FloatLatitude{43.733251335381205}});
|
||||||
|
for (size_t index = 0; index < params.coordinates.size(); ++index)
|
||||||
TIMER_START(routes);
|
|
||||||
auto NUM = 100;
|
|
||||||
for (int i = 0; i < NUM; ++i)
|
|
||||||
{
|
{
|
||||||
engine::api::ResultT result = json::Object();
|
params.radiuses.emplace_back();
|
||||||
const auto rc = osrm.Match(params, result);
|
|
||||||
auto &json_result = result.get<json::Object>();
|
|
||||||
if (rc != Status::Ok ||
|
|
||||||
json_result.values.at("matchings").get<json::Array>().values.size() != 1)
|
|
||||||
{
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
TIMER_STOP(routes);
|
|
||||||
std::cout << (TIMER_MSEC(routes) / NUM) << "ms/req at " << params.coordinates.size()
|
auto run_benchmark = [&](std::optional<double> radiusInMeters)
|
||||||
<< " coordinate" << std::endl;
|
{
|
||||||
std::cout << (TIMER_MSEC(routes) / NUM / params.coordinates.size()) << "ms/coordinate"
|
if (radiusInMeters)
|
||||||
<< std::endl;
|
{
|
||||||
|
for (auto &radius : params.radiuses)
|
||||||
|
{
|
||||||
|
radius = *radiusInMeters;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TIMER_START(routes);
|
||||||
|
auto NUM = 100;
|
||||||
|
for (int i = 0; i < NUM; ++i)
|
||||||
|
{
|
||||||
|
engine::api::ResultT result = json::Object();
|
||||||
|
const auto rc = osrm.Match(params, result);
|
||||||
|
auto &json_result = result.get<json::Object>();
|
||||||
|
if (rc != Status::Ok ||
|
||||||
|
json_result.values.at("matchings").get<json::Array>().values.size() != 1)
|
||||||
|
{
|
||||||
|
throw std::runtime_error{"Couldn't match"};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TIMER_STOP(routes);
|
||||||
|
if (radiusInMeters)
|
||||||
|
{
|
||||||
|
std::cout << "Radius " << *radiusInMeters << "m: " << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "Default radius: " << std::endl;
|
||||||
|
}
|
||||||
|
std::cout << (TIMER_MSEC(routes) / NUM) << "ms/req at " << params.coordinates.size()
|
||||||
|
<< " coordinate" << std::endl;
|
||||||
|
std::cout << (TIMER_MSEC(routes) / NUM / params.coordinates.size()) << "ms/coordinate"
|
||||||
|
<< std::endl;
|
||||||
|
};
|
||||||
|
|
||||||
|
run_benchmark(std::nullopt);
|
||||||
|
run_benchmark(5.0);
|
||||||
|
run_benchmark(10.0);
|
||||||
|
run_benchmark(15.0);
|
||||||
|
run_benchmark(30.0);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -239,4 +270,4 @@ catch (const std::exception &e)
|
|||||||
{
|
{
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user