From 5829c0dbc6e7785cec5af12891ba2ead784d1a69 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Tue, 4 Oct 2016 17:26:08 +0300 Subject: [PATCH] [build] Re-add benchmark tests to the buildsystem Probably lost on the cmake migration --- .travis.yml | 1 + CMakeLists.txt | 5 +++ Makefile | 10 ++++++ .../{filter.cpp => filter.benchmark.cpp} | 0 cmake/benchmark-files.cmake | 15 +++++++++ cmake/benchmark.cmake | 32 +++++++++++++++++++ platform/linux/config.cmake | 18 +++++++++++ scripts/generate-benchmark-files.sh | 20 ++++++++++++ 8 files changed, 101 insertions(+) rename benchmark/parse/{filter.cpp => filter.benchmark.cpp} (100%) create mode 100644 cmake/benchmark-files.cmake create mode 100644 cmake/benchmark.cmake create mode 100755 scripts/generate-benchmark-files.sh diff --git a/.travis.yml b/.travis.yml index 793f0130d..6c749acfd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,6 +45,7 @@ before_script: - cmake --version script: - make linux + - make benchmark - make test - make run-test after_script: diff --git a/CMakeLists.txt b/CMakeLists.txt index 79c85829e..d021c856f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,11 @@ if(COMMAND mbgl_platform_test) include(cmake/test.cmake) endif() +if(COMMAND mbgl_platform_benchmark) + include(cmake/benchmark-files.cmake) + include(cmake/benchmark.cmake) +endif() + if(COMMAND mbgl_platform_glfw) include(cmake/glfw.cmake) endif() diff --git a/Makefile b/Makefile index 0f4cefa4b..6d191d80f 100644 --- a/Makefile +++ b/Makefile @@ -285,6 +285,10 @@ linux: glfw-app render offline test: $(LINUX_BUILD) $(NINJA) $(NINJA_ARGS) -j$(JOBS) -C $(LINUX_OUTPUT_PATH) mbgl-test +.PHONY: benchmark +benchmark: $(LINUX_BUILD) + $(NINJA) $(NINJA_ARGS) -j$(JOBS) -C $(LINUX_OUTPUT_PATH) mbgl-benchmark + ifneq (,$(shell which gdb)) GDB = gdb -batch -return-child-result -ex 'set print thread-events off' -ex 'run' -ex 'thread apply all bt' --args endif @@ -295,6 +299,12 @@ run-test: run-test-* run-test-%: test $(GDB) $(LINUX_OUTPUT_PATH)/mbgl-test --gtest_catch_exceptions=0 --gtest_filter=$* +.PHONY: run-benchmark +run-benchmark: run-benchmark-. + +run-benchmark-%: benchmark + $(GDB) $(LINUX_OUTPUT_PATH)/mbgl-benchmark --benchmark_filter=$* + .PHONY: render render: $(LINUX_BUILD) $(NINJA) $(NINJA_ARGS) -j$(JOBS) -C $(LINUX_OUTPUT_PATH) mbgl-render diff --git a/benchmark/parse/filter.cpp b/benchmark/parse/filter.benchmark.cpp similarity index 100% rename from benchmark/parse/filter.cpp rename to benchmark/parse/filter.benchmark.cpp diff --git a/cmake/benchmark-files.cmake b/cmake/benchmark-files.cmake new file mode 100644 index 000000000..4e3045647 --- /dev/null +++ b/cmake/benchmark-files.cmake @@ -0,0 +1,15 @@ +# Do not edit. Regenerate this with ./scripts/generate-benchmark-files.sh + +set(MBGL_BENCHMARK_FILES + # include/mbgl + benchmark/include/mbgl/benchmark.hpp + + # parse + benchmark/parse/filter.benchmark.cpp + + # src + benchmark/src/main.cpp + + # src/mbgl/benchmark + benchmark/src/mbgl/benchmark/benchmark.cpp +) diff --git a/cmake/benchmark.cmake b/cmake/benchmark.cmake new file mode 100644 index 000000000..79da54459 --- /dev/null +++ b/cmake/benchmark.cmake @@ -0,0 +1,32 @@ +add_executable(mbgl-benchmark + ${MBGL_BENCHMARK_FILES} +) + +target_compile_options(mbgl-benchmark + PRIVATE -fvisibility-inlines-hidden +) + +target_include_directories(mbgl-benchmark + PRIVATE include + PRIVATE src # TODO: eliminate + PRIVATE benchmark/include + PRIVATE benchmark/src + PRIVATE platform/default +) + +if(DEFINED ENV{CI}) + target_compile_definitions(mbgl-benchmark + PRIVATE -DCI_BUILD=1 + ) +endif() + +target_link_libraries(mbgl-benchmark + PRIVATE mbgl-core +) + +target_add_mason_package(mbgl-benchmark PRIVATE benchmark) +target_add_mason_package(mbgl-benchmark PRIVATE rapidjson) + +mbgl_platform_benchmark() + +create_source_groups(mbgl-benchmark) diff --git a/platform/linux/config.cmake b/platform/linux/config.cmake index 24bb5ede0..050a03bcb 100644 --- a/platform/linux/config.cmake +++ b/platform/linux/config.cmake @@ -7,6 +7,7 @@ mason_use(libpng VERSION 1.6.25) mason_use(libjpeg-turbo VERSION 1.5.0) mason_use(webp VERSION 0.5.1) mason_use(gtest VERSION 1.7.0${MASON_CXXABI_SUFFIX}) +mason_use(benchmark VERSION 1.0.0) include(cmake/loop-uv.cmake) @@ -102,6 +103,23 @@ macro(mbgl_platform_test) endmacro() +macro(mbgl_platform_benchmark) + target_sources(mbgl-benchmark + PRIVATE benchmark/src/main.cpp + ) + + set_source_files_properties( + benchmark/src/main.cpp + PROPERTIES + COMPILE_FLAGS -DWORK_DIRECTORY="${CMAKE_SOURCE_DIR}" + ) + + target_link_libraries(mbgl-benchmark + PRIVATE mbgl-loop + ) +endmacro() + + macro(mbgl_platform_node) # Enabling node module by defining this macro endmacro() diff --git a/scripts/generate-benchmark-files.sh b/scripts/generate-benchmark-files.sh new file mode 100755 index 000000000..0fb274cf3 --- /dev/null +++ b/scripts/generate-benchmark-files.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +echo "# Do not edit. Regenerate this with ./scripts/generate-benchmark-files.sh" > cmake/benchmark-files.cmake +echo "" >> cmake/benchmark-files.cmake +echo "set(MBGL_BENCHMARK_FILES" >> cmake/benchmark-files.cmake +PREFIX= +for FILE in $(git ls-files "benchmark/*.hpp" "benchmark/*.cpp" "benchmark/*.h" "benchmark/*.c" | sort) ; do + CURRENT_PREFIX=$(dirname ${FILE#benchmark/}) + if [ "${PREFIX}" != "${CURRENT_PREFIX}" ]; then + if [ ! -z "${PREFIX}" ]; then echo "" >> cmake/benchmark-files.cmake ; fi + echo " # ${CURRENT_PREFIX}" >> cmake/benchmark-files.cmake + PREFIX="${CURRENT_PREFIX}" + fi + echo " ${FILE}" >> cmake/benchmark-files.cmake +done +echo ")" >> cmake/benchmark-files.cmake +git diff cmake/benchmark-files.cmake