From 2c60a9419b8aecf15dc3a17cc3e4f006d55661f7 Mon Sep 17 00:00:00 2001
From: Sergey Kaplun <skaplun@tarantool.org>
Date: Tue, 21 May 2024 14:16:36 +0300
Subject: [PATCH] perf: save perf results for the benchmarks

This patch saves the output of the performance tests in the JSON format
to be processed later. The corresponding directory is added to the
<.gitignore>.

NO_DOC=perf test
NO_CHANGELOG=perf test
NO_TEST=perf test
---
 .gitignore              | 1 +
 perf/CMakeLists.txt     | 5 +++++
 perf/lua/CMakeLists.txt | 2 ++
 3 files changed, 8 insertions(+)

diff --git a/.gitignore b/.gitignore
index 519574edf5..b378257279 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,6 +43,7 @@ extra/Makefile
 extra/*/Makefile
 perf/Makefile
 perf/lua/Makefile
+perf/output/
 test/Makefile
 test/*/Makefile
 test/*/*/Makefile
diff --git a/perf/CMakeLists.txt b/perf/CMakeLists.txt
index 4ae74f4bc2..1a64760e6c 100644
--- a/perf/CMakeLists.txt
+++ b/perf/CMakeLists.txt
@@ -1,5 +1,8 @@
 set(CMAKE_CXX_STANDARD 14)
 
+set(PERF_OUTPUT_DIR ${PROJECT_BINARY_DIR}/perf/output)
+file(MAKE_DIRECTORY ${PERF_OUTPUT_DIR})
+
 add_subdirectory(lua)
 
 find_package(benchmark QUIET)
@@ -40,6 +43,8 @@ function(create_perf_test_target)
   message(STATUS "Creating C performance test ${PERF_TARGET}_perftest")
   add_custom_target(${PERF_TARGET}_perftest
                     COMMAND "$<TARGET_FILE:${PERF_TARGET}.perftest>"
+                            "--benchmark_out_format=json"
+                            "--benchmark_out=${PERF_OUTPUT_DIR}/${PERF_TARGET}.json"
                     DEPENDS ${PERF_TARGET}.perftest
                     COMMENT Running ${PERF_TARGET}_perftest
   )
diff --git a/perf/lua/CMakeLists.txt b/perf/lua/CMakeLists.txt
index 685bec7366..55d523f92e 100644
--- a/perf/lua/CMakeLists.txt
+++ b/perf/lua/CMakeLists.txt
@@ -23,6 +23,8 @@ function(create_perf_lua_test)
                     COMMAND ${CMAKE_COMMAND} -E env
                       LUA_PATH="${LUA_PATH}"
                       ${TARANTOOL_BIN} ${TEST_PATH}
+                        --output="${PERF_OUTPUT_DIR}/${PERF_NAME}.json"
+                        --output_format=json
                     COMMENT Running ${PERF_NAME}_perftest
                     DEPENDS tarantool ${TEST_PATH}
                     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-- 
GitLab