#include #include #include #include #include #include #include #include #include #include #include #include using namespace mbgl; namespace { class QueryBenchmark { public: QueryBenchmark() { NetworkStatus::Set(NetworkStatus::Status::Offline); fileSource.setAccessToken("foobar"); map.getStyle().loadJSON(util::read_file("benchmark/fixtures/api/style.json")); map.setLatLngZoom({ 40.726989, -73.992857 }, 15); // Manhattan map.getStyle().addImage(std::make_unique("test-icon", decodeImage(util::read_file("benchmark/fixtures/api/default_marker.png")), 1.0)); frontend.render(map); } util::RunLoop loop; DefaultFileSource fileSource{ "benchmark/fixtures/api/cache.db", "." }; ThreadPool threadPool{ 4 }; HeadlessFrontend frontend { { 1000, 1000 }, 1, fileSource, threadPool }; Map map { frontend, MapObserver::nullObserver(), frontend.getSize(), 1, fileSource, threadPool, MapMode::Still }; ScreenBox box{{ 0, 0 }, { 1000, 1000 }}; }; } // end namespace static void API_queryRenderedFeaturesAll(::benchmark::State& state) { QueryBenchmark bench; while (state.KeepRunning()) { bench.frontend.getRenderer()->queryRenderedFeatures(bench.box, {}); } } static void API_queryRenderedFeaturesLayerFromLowDensity(::benchmark::State& state) { QueryBenchmark bench; while (state.KeepRunning()) { bench.frontend.getRenderer()->queryRenderedFeatures(bench.box, {{{ "testlayer" }}, {}}); } } static void API_queryRenderedFeaturesLayerFromHighDensity(::benchmark::State& state) { QueryBenchmark bench; while (state.KeepRunning()) { bench.frontend.getRenderer()->queryRenderedFeatures(bench.box, {{{"road-street" }}, {}}); } } BENCHMARK(API_queryRenderedFeaturesAll); BENCHMARK(API_queryRenderedFeaturesLayerFromLowDensity); BENCHMARK(API_queryRenderedFeaturesLayerFromHighDensity);