Skip to content

Commit 8a82d39

Browse files
Improve map matching benchmark (#6885)
1 parent 89fce28 commit 8a82d39

File tree

1 file changed

+43
-18
lines changed

1 file changed

+43
-18
lines changed

src/benchmarks/match.cpp

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111
#include "osrm/status.hpp"
1212

1313
#include <boost/assert.hpp>
14-
14+
#include <cstdlib>
1515
#include <exception>
1616
#include <iostream>
17+
#include <optional>
18+
#include <stdexcept>
1719
#include <string>
1820
#include <utility>
1921

20-
#include <cstdlib>
21-
2222
int main(int argc, const char *argv[])
2323
try
2424
{
@@ -214,29 +214,54 @@ try
214214
params.coordinates.push_back(
215215
FloatCoordinate{FloatLongitude{7.415342330932617}, FloatLatitude{43.733251335381205}});
216216

217-
TIMER_START(routes);
218-
auto NUM = 100;
219-
for (int i = 0; i < NUM; ++i)
217+
auto run_benchmark = [&](std::optional<double> radiusInMeters)
220218
{
221-
engine::api::ResultT result = json::Object();
222-
const auto rc = osrm.Match(params, result);
223-
auto &json_result = result.get<json::Object>();
224-
if (rc != Status::Ok ||
225-
json_result.values.at("matchings").get<json::Array>().values.size() != 1)
219+
params.radiuses = {};
220+
if (radiusInMeters)
221+
{
222+
for (size_t index = 0; index < params.coordinates.size(); ++index)
223+
{
224+
params.radiuses.emplace_back(*radiusInMeters);
225+
}
226+
}
227+
228+
TIMER_START(routes);
229+
auto NUM = 100;
230+
for (int i = 0; i < NUM; ++i)
226231
{
227-
return EXIT_FAILURE;
232+
engine::api::ResultT result = json::Object();
233+
const auto rc = osrm.Match(params, result);
234+
auto &json_result = result.get<json::Object>();
235+
if (rc != Status::Ok ||
236+
json_result.values.at("matchings").get<json::Array>().values.size() != 1)
237+
{
238+
throw std::runtime_error{"Couldn't match"};
239+
}
228240
}
241+
TIMER_STOP(routes);
242+
if (radiusInMeters)
243+
{
244+
std::cout << "Radius " << *radiusInMeters << "m: " << std::endl;
245+
}
246+
else
247+
{
248+
std::cout << "Default radius: " << std::endl;
249+
}
250+
std::cout << (TIMER_MSEC(routes) / NUM) << "ms/req at " << params.coordinates.size()
251+
<< " coordinate" << std::endl;
252+
std::cout << (TIMER_MSEC(routes) / NUM / params.coordinates.size()) << "ms/coordinate"
253+
<< std::endl;
254+
};
255+
256+
for (auto radius : std::vector<std::optional<double>>{std::nullopt, 5.0, 10.0, 15.0, 30.0})
257+
{
258+
run_benchmark(radius);
229259
}
230-
TIMER_STOP(routes);
231-
std::cout << (TIMER_MSEC(routes) / NUM) << "ms/req at " << params.coordinates.size()
232-
<< " coordinate" << std::endl;
233-
std::cout << (TIMER_MSEC(routes) / NUM / params.coordinates.size()) << "ms/coordinate"
234-
<< std::endl;
235260

236261
return EXIT_SUCCESS;
237262
}
238263
catch (const std::exception &e)
239264
{
240265
std::cerr << "Error: " << e.what() << std::endl;
241266
return EXIT_FAILURE;
242-
}
267+
}

0 commit comments

Comments
 (0)