#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace mbgl; namespace { static std::string cachePath { "benchmark/fixtures/api/cache.db" }; constexpr double pixelRatio { 1.0 }; constexpr Size size { 1000, 1000 }; class RenderBenchmark { public: RenderBenchmark() { NetworkStatus::Set(NetworkStatus::Status::Offline); } util::RunLoop loop; ThreadPool threadPool { 4 }; }; static void prepare(Map& map, optional json = {}) { map.getStyle().loadJSON(json ? *json : util::read_file("benchmark/fixtures/api/style.json")); map.jumpTo(CameraOptions().withCenter(LatLng { 40.726989, -73.992857 }).withZoom(15.0)); // Manhattan auto image = decodeImage(util::read_file("benchmark/fixtures/api/default_marker.png")); map.getStyle().addImage(std::make_unique("test-icon", std::move(image), 1.0)); } } // end namespace static void API_renderStill_reuse_map(::benchmark::State& state) { RenderBenchmark bench; HeadlessFrontend frontend { size, pixelRatio, bench.threadPool }; Map map { frontend, MapObserver::nullObserver(), bench.threadPool, MapOptions().withMapMode(MapMode::Static).withSize(size).withPixelRatio(pixelRatio), ResourceOptions().withCachePath(cachePath).withAccessToken("foobar") }; prepare(map); while (state.KeepRunning()) { frontend.render(map); } } static void API_renderStill_reuse_map_formatted_labels(::benchmark::State& state) { RenderBenchmark bench; HeadlessFrontend frontend { size, pixelRatio, bench.threadPool }; Map map { frontend, MapObserver::nullObserver(), bench.threadPool, MapOptions().withMapMode(MapMode::Static).withSize(size).withPixelRatio(pixelRatio), ResourceOptions().withCachePath(cachePath).withAccessToken("foobar") }; prepare(map, util::read_file("benchmark/fixtures/api/style_formatted_labels.json")); while (state.KeepRunning()) { frontend.render(map); } } static void API_renderStill_reuse_map_switch_styles(::benchmark::State& state) { RenderBenchmark bench; HeadlessFrontend frontend { size, pixelRatio, bench.threadPool }; Map map { frontend, MapObserver::nullObserver(), bench.threadPool, MapOptions().withMapMode(MapMode::Static).withSize(size).withPixelRatio(pixelRatio), ResourceOptions().withCachePath(cachePath).withAccessToken("foobar") }; while (state.KeepRunning()) { prepare(map, { "{}" }); frontend.render(map); prepare(map); frontend.render(map); } } static void API_renderStill_recreate_map(::benchmark::State& state) { RenderBenchmark bench; while (state.KeepRunning()) { HeadlessFrontend frontend { size, pixelRatio, bench.threadPool }; Map map { frontend, MapObserver::nullObserver(), bench.threadPool, MapOptions().withMapMode(MapMode::Static).withSize(size).withPixelRatio(pixelRatio), ResourceOptions().withCachePath(cachePath).withAccessToken("foobar") }; prepare(map); frontend.render(map); } } BENCHMARK(API_renderStill_reuse_map); BENCHMARK(API_renderStill_reuse_map_formatted_labels); BENCHMARK(API_renderStill_reuse_map_switch_styles); BENCHMARK(API_renderStill_recreate_map);