diff options
-rw-r--r-- | benchmark/api/query.benchmark.cpp | 2 | ||||
-rw-r--r-- | benchmark/api/render.benchmark.cpp | 79 | ||||
-rw-r--r-- | benchmark/fixtures/api/style.json (renamed from benchmark/fixtures/api/query_style.json) | 0 | ||||
-rw-r--r-- | cmake/benchmark-files.cmake | 1 |
4 files changed, 81 insertions, 1 deletions
diff --git a/benchmark/api/query.benchmark.cpp b/benchmark/api/query.benchmark.cpp index 05732e0e9a..763349c07a 100644 --- a/benchmark/api/query.benchmark.cpp +++ b/benchmark/api/query.benchmark.cpp @@ -24,7 +24,7 @@ public: NetworkStatus::Set(NetworkStatus::Status::Offline); fileSource.setAccessToken("foobar"); - map.getStyle().loadJSON(util::read_file("benchmark/fixtures/api/query_style.json")); + 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<style::Image>("test-icon", decodeImage(util::read_file("benchmark/fixtures/api/default_marker.png")), 1.0)); diff --git a/benchmark/api/render.benchmark.cpp b/benchmark/api/render.benchmark.cpp new file mode 100644 index 0000000000..8c71c1a9bf --- /dev/null +++ b/benchmark/api/render.benchmark.cpp @@ -0,0 +1,79 @@ +#include <benchmark/benchmark.h> + +#include <mbgl/benchmark/util.hpp> +#include <mbgl/map/map.hpp> +#include <mbgl/map/backend_scope.hpp> +#include <mbgl/gl/headless_backend.hpp> +#include <mbgl/gl/offscreen_view.hpp> +#include <mbgl/util/default_thread_pool.hpp> +#include <mbgl/style/style.hpp> +#include <mbgl/style/image.hpp> +#include <mbgl/storage/default_file_source.hpp> +#include <mbgl/storage/network_status.hpp> +#include <mbgl/util/image.hpp> +#include <mbgl/util/io.hpp> +#include <mbgl/util/run_loop.hpp> + +using namespace mbgl; + +namespace { + +class RenderBenchmark { +public: + RenderBenchmark() { + NetworkStatus::Set(NetworkStatus::Status::Offline); + fileSource.setAccessToken("foobar"); + } + + util::RunLoop loop; + HeadlessBackend backend; + BackendScope scope { backend }; + OffscreenView view { backend.getContext(), { 1000, 1000 } }; + DefaultFileSource fileSource { "benchmark/fixtures/api/cache.db", "." }; + ThreadPool threadPool { 4 }; +}; + +static void prepare(Map& map, optional<std::string> json = {}) { + map.getStyle().loadJSON(json ? *json : util::read_file("benchmark/fixtures/api/style.json")); + map.setLatLngZoom({ 40.726989, -73.992857 }, 15); // Manhattan + map.getStyle().addImage(std::make_unique<style::Image>("test-icon", + decodeImage(util::read_file("benchmark/fixtures/api/default_marker.png")), 1.0)); +} + +} // end namespace + +static void API_renderStill_reuse_map(::benchmark::State& state) { + RenderBenchmark bench; + Map map { bench.backend, bench.view.getSize(), 1, bench.fileSource, bench.threadPool, MapMode::Still }; + prepare(map); + + while (state.KeepRunning()) { + mbgl::benchmark::render(map, bench.view); + } +} + +static void API_renderStill_reuse_map_switch_styles(::benchmark::State& state) { + RenderBenchmark bench; + Map map { bench.backend, bench.view.getSize(), 1, bench.fileSource, bench.threadPool, MapMode::Still }; + + while (state.KeepRunning()) { + prepare(map, { "{}" }); + mbgl::benchmark::render(map, bench.view); + prepare(map); + mbgl::benchmark::render(map, bench.view); + } +} + +static void API_renderStill_recreate_map(::benchmark::State& state) { + RenderBenchmark bench; + + while (state.KeepRunning()) { + Map map { bench.backend, bench.view.getSize(), 1, bench.fileSource, bench.threadPool, MapMode::Still }; + prepare(map); + mbgl::benchmark::render(map, bench.view); + } +} + +BENCHMARK(API_renderStill_reuse_map); +BENCHMARK(API_renderStill_reuse_map_switch_styles); +BENCHMARK(API_renderStill_recreate_map); diff --git a/benchmark/fixtures/api/query_style.json b/benchmark/fixtures/api/style.json index cf88aeb6ed..cf88aeb6ed 100644 --- a/benchmark/fixtures/api/query_style.json +++ b/benchmark/fixtures/api/style.json diff --git a/cmake/benchmark-files.cmake b/cmake/benchmark-files.cmake index 3736df11f6..35931a6b52 100644 --- a/cmake/benchmark-files.cmake +++ b/cmake/benchmark-files.cmake @@ -3,6 +3,7 @@ set(MBGL_BENCHMARK_FILES # api benchmark/api/query.benchmark.cpp + benchmark/api/render.benchmark.cpp # include/mbgl benchmark/include/mbgl/benchmark.hpp |