You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
7.1 KiB

include(GoogleTest)
include(functions/copy_files)
add_library(libdevilutionx_so SHARED)
set_target_properties(libdevilutionx_so PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
target_link_dependencies(libdevilutionx_so PUBLIC libdevilutionx)
set_target_properties(libdevilutionx_so PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
add_library(test_main OBJECT test/main.cpp)
target_link_dependencies(test_main PUBLIC libdevilutionx_so GTest::gtest GTest::gmock)
set(tests
animationinfo_test
appfat_test
automap_test
cursor_test
dead_test
diablo_test
drlg_common_test
drlg_l1_test
drlg_l2_test
drlg_l3_test
drlg_l4_test
effects_test
inv_test
items_test
math_test
missiles_test
multi_logging_test
pack_test
player_test
quests_test
scrollrt_test
stores_test
tile_properties_test
timedemo_test
townerdat_test
writehero_test
vendor_test
)
set(standalone_tests
codec_test
crawl_test
data_file_test
file_util_test
format_int_test
ini_test
palette_blending_test
parse_int_test
path_test
vision_test
random_test
rectangle_test
static_vector_test
str_cat_test
utf8_test
)
if(NOT USE_SDL1)
list(APPEND standalone_tests text_render_integration_test)
endif()
set(benchmarks
clx_render_benchmark
Add dun_render_benchmark Results from a single run (a bit noisy) on my machine: ``` tools/build_and_run_benchmark.py dun_render_benchmark ``` ``` ------------------------------------------------------------------------------------------------------------------------ Benchmark Time CPU Iterations UserCounters... ------------------------------------------------------------------------------------------------------------------------ DunRenderBenchmark/LeftTriangle_Solid_FullyLit 98297 ns 98282 ns 8840 items_per_second=15.1096M/s DunRenderBenchmark/LeftTriangle_Solid_FullyDark 124727 ns 124701 ns 6973 items_per_second=11.9085M/s DunRenderBenchmark/LeftTriangle_Solid_PartiallyLit 514869 ns 514747 ns 1700 items_per_second=2.88491M/s DunRenderBenchmark/LeftTriangle_Transparent_FullyLit 520312 ns 520216 ns 1682 items_per_second=2.85458M/s DunRenderBenchmark/LeftTriangle_Transparent_FullyDark 524440 ns 524331 ns 1664 items_per_second=2.83218M/s DunRenderBenchmark/LeftTriangle_Transparent_PartiallyLit 532300 ns 532162 ns 1647 items_per_second=2.7905M/s DunRenderBenchmark/RightTriangle_Solid_FullyLit 92387 ns 92363 ns 8840 items_per_second=16.7275M/s DunRenderBenchmark/RightTriangle_Solid_FullyDark 85680 ns 85662 ns 9884 items_per_second=18.0361M/s DunRenderBenchmark/RightTriangle_Solid_PartiallyLit 538347 ns 538250 ns 1626 items_per_second=2.87041M/s DunRenderBenchmark/RightTriangle_Transparent_FullyLit 548800 ns 548760 ns 1598 items_per_second=2.81544M/s DunRenderBenchmark/RightTriangle_Transparent_FullyDark 540450 ns 540369 ns 1620 items_per_second=2.85916M/s DunRenderBenchmark/RightTriangle_Transparent_PartiallyLit 555061 ns 555003 ns 1575 items_per_second=2.78377M/s DunRenderBenchmark/TransparentSquare_Solid_FullyLit 700849 ns 700751 ns 1320 items_per_second=3.68176M/s DunRenderBenchmark/TransparentSquare_Solid_FullyDark 664927 ns 664872 ns 1389 items_per_second=3.88045M/s DunRenderBenchmark/TransparentSquare_Solid_PartiallyLit 1131702 ns 1131559 ns 822 items_per_second=2.28004M/s DunRenderBenchmark/TransparentSquare_Transparent_FullyLit 1022384 ns 1022267 ns 916 items_per_second=2.5238M/s DunRenderBenchmark/TransparentSquare_Transparent_FullyDark 1023193 ns 1023057 ns 900 items_per_second=2.52185M/s DunRenderBenchmark/TransparentSquare_Transparent_PartiallyLit 1033573 ns 1033496 ns 895 items_per_second=2.49638M/s DunRenderBenchmark/Square_Solid_FullyLit 53532 ns 53524 ns 10000 items_per_second=30.8272M/s DunRenderBenchmark/Square_Solid_FullyDark 41993 ns 41987 ns 19794 items_per_second=47.1573M/s DunRenderBenchmark/Square_Solid_PartiallyLit 842772 ns 842615 ns 1108 items_per_second=1.56655M/s DunRenderBenchmark/Square_Transparent_FullyLit 834105 ns 834026 ns 1119 items_per_second=1.58269M/s DunRenderBenchmark/Square_Transparent_FullyDark 831912 ns 831823 ns 1122 items_per_second=1.58688M/s DunRenderBenchmark/Square_Transparent_PartiallyLit 924638 ns 924536 ns 1010 items_per_second=1.42774M/s DunRenderBenchmark/LeftTrapezoid_Solid_FullyLit 33728 ns 33725 ns 24962 items_per_second=18.8583M/s DunRenderBenchmark/LeftTrapezoid_Solid_FullyDark 31088 ns 31085 ns 27444 items_per_second=20.4601M/s DunRenderBenchmark/LeftTrapezoid_Solid_PartiallyLit 268792 ns 268768 ns 3254 items_per_second=1.97196M/s DunRenderBenchmark/LeftTrapezoid_Transparent_FullyLit 277990 ns 277965 ns 3140 items_per_second=1.90672M/s DunRenderBenchmark/LeftTrapezoid_Transparent_FullyDark 268952 ns 268912 ns 3250 items_per_second=1.9709M/s DunRenderBenchmark/LeftTrapezoid_Transparent_PartiallyLit 288869 ns 288826 ns 3056 items_per_second=1.83501M/s DunRenderBenchmark/RightTrapezoid_Solid_FullyLit 29581 ns 29576 ns 28347 items_per_second=21.0984M/s DunRenderBenchmark/RightTrapezoid_Solid_FullyDark 25315 ns 25312 ns 32250 items_per_second=24.6523M/s DunRenderBenchmark/RightTrapezoid_Solid_PartiallyLit 259977 ns 259960 ns 3312 items_per_second=2.0003M/s DunRenderBenchmark/RightTrapezoid_Transparent_FullyLit 263079 ns 263056 ns 3322 items_per_second=1.97677M/s DunRenderBenchmark/RightTrapezoid_Transparent_FullyDark 259849 ns 259824 ns 3364 items_per_second=2.00136M/s DunRenderBenchmark/RightTrapezoid_Transparent_PartiallyLit 279623 ns 279594 ns 3127 items_per_second=1.85984M/s ```
2 years ago
crawl_benchmark
dun_render_benchmark
light_render_benchmark
palette_blending_benchmark
path_benchmark
)
include(test/Fixtures.cmake)
foreach(test_target ${tests} ${standalone_tests} ${benchmarks})
add_executable(${test_target} "test/${test_target}.cpp")
set_target_properties(${test_target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
if(GPERF)
target_link_libraries(${test_target} PUBLIC ${GPERFTOOLS_LIBRARIES})
endif()
endforeach()
foreach(test_target ${tests} ${standalone_tests})
gtest_discover_tests(${test_target})
endforeach()
foreach(test_target ${tests})
target_link_libraries(${test_target} PRIVATE test_main)
endforeach()
foreach(test_target ${standalone_tests})
target_link_libraries(${test_target} PRIVATE GTest::gtest_main)
target_include_directories(${test_target} PRIVATE "${PROJECT_SOURCE_DIR}/Source")
endforeach()
foreach(target ${benchmarks})
target_link_libraries(${target} PRIVATE benchmark::benchmark benchmark::benchmark_main)
target_include_directories(${target} PRIVATE "${PROJECT_SOURCE_DIR}/Source")
endforeach()
add_library(app_fatal_for_testing OBJECT test/app_fatal_for_testing.cpp)
target_sources(app_fatal_for_testing INTERFACE $<TARGET_OBJECTS:app_fatal_for_testing>)
add_library(language_for_testing OBJECT test/language_for_testing.cpp)
target_sources(language_for_testing INTERFACE $<TARGET_OBJECTS:language_for_testing>)
target_link_dependencies(codec_test PRIVATE libdevilutionx_codec app_fatal_for_testing)
target_link_dependencies(clx_render_benchmark
PRIVATE
DevilutionX::SDL
tl
app_fatal_for_testing
language_for_testing
libdevilutionx_clx_render
libdevilutionx_load_clx
libdevilutionx_log
libdevilutionx_surface
)
target_link_dependencies(crawl_test PRIVATE libdevilutionx_crawl)
target_link_dependencies(crawl_benchmark PRIVATE libdevilutionx_crawl)
target_link_dependencies(data_file_test PRIVATE libdevilutionx_txtdata app_fatal_for_testing language_for_testing)
target_link_dependencies(dun_render_benchmark PRIVATE libdevilutionx_so)
target_link_dependencies(file_util_test PRIVATE libdevilutionx_file_util app_fatal_for_testing)
target_link_dependencies(format_int_test PRIVATE libdevilutionx_format_int language_for_testing)
target_link_dependencies(ini_test PRIVATE libdevilutionx_ini app_fatal_for_testing)
target_link_dependencies(light_render_benchmark PRIVATE libdevilutionx_light_render DevilutionX::SDL libdevilutionx_surface libdevilutionx_paths app_fatal_for_testing)
target_link_dependencies(palette_blending_test PRIVATE libdevilutionx_palette_blending DevilutionX::SDL libdevilutionx_strings GTest::gmock app_fatal_for_testing)
Palette KD-tree: Fix compilation speed Tricks the compiler into skipping expensive `uninit var analysis` (`-Wmaybe-uninitialized`) by using a struct with state rather than separate variables for `best` / `bestDiff`. This has no performance impact. Also optimizes lookup a bit further and moves some code that does not need to be inlined to the cpp file. ``` Benchmark Time CPU Time Old Time New CPU Old CPU New ----------------------------------------------------------------------------------------------------------------------------------- BM_GenerateBlendedLookupTable_pvalue 0.0002 0.0002 U Test, Repetitions: 10 vs 10 BM_GenerateBlendedLookupTable_mean +0.0237 +0.0237 2092090 2141601 2091732 2141291 BM_GenerateBlendedLookupTable_median +0.0237 +0.0237 2092104 2141662 2091669 2141319 BM_GenerateBlendedLookupTable_stddev -0.6414 -0.5834 664 238 538 224 BM_GenerateBlendedLookupTable_cv -0.6497 -0.5930 0 0 0 0 BM_BuildTree_pvalue 0.0002 0.0002 U Test, Repetitions: 10 vs 10 BM_BuildTree_mean +0.0410 +0.0410 4495 4679 4494 4678 BM_BuildTree_median +0.0403 +0.0402 4494 4675 4493 4674 BM_BuildTree_stddev +0.9515 +0.9359 7 14 7 14 BM_BuildTree_cv +0.8746 +0.8596 0 0 0 0 BM_FindNearestNeighbor_pvalue 0.0002 0.0002 U Test, Repetitions: 10 vs 10 BM_FindNearestNeighbor_mean -0.0399 -0.0398 1964257108 1885966812 1963954917 1885694336 BM_FindNearestNeighbor_median -0.0397 -0.0396 1963969748 1886074435 1963650984 1885803182 BM_FindNearestNeighbor_stddev -0.3380 -0.3443 1217360 805946 1225442 803469 BM_FindNearestNeighbor_cv -0.3105 -0.3171 0 0 0 0 OVERALL_GEOMEAN +0.0077 +0.0077 0 0 0 0 ```
7 months ago
target_link_dependencies(palette_blending_benchmark
PRIVATE
DevilutionX::SDL
libdevilutionx_palette_blending
libdevilutionx_palette_kd_tree
app_fatal_for_testing
)
target_link_dependencies(parse_int_test PRIVATE libdevilutionx_parse_int)
target_link_dependencies(path_test PRIVATE libdevilutionx_pathfinding libdevilutionx_direction app_fatal_for_testing)
target_link_dependencies(vision_test PRIVATE libdevilutionx_vision)
target_link_dependencies(path_benchmark PRIVATE libdevilutionx_pathfinding app_fatal_for_testing)
target_link_dependencies(random_test PRIVATE libdevilutionx_random)
target_link_dependencies(static_vector_test PRIVATE libdevilutionx_random app_fatal_for_testing)
target_link_dependencies(str_cat_test PRIVATE libdevilutionx_strings)
if(DEVILUTIONX_SCREENSHOT_FORMAT STREQUAL DEVILUTIONX_SCREENSHOT_FORMAT_PNG AND NOT USE_SDL1)
target_link_dependencies(text_render_integration_test
PRIVATE
DevilutionX::SDL
GTest::gmock
GTest::gtest
fmt::fmt
tl
app_fatal_for_testing
language_for_testing
libdevilutionx_primitive_render
libdevilutionx_strings
libdevilutionx_surface
libdevilutionx_surface_to_png
libdevilutionx_text_render
)
copy_files(
FILES
basic-colors.png
basic.png
horizontal_overflow.png
horizontal_overflow-colors.png
kerning_fit_spacing-colors.png
kerning_fit_spacing.png
kerning_fit_spacing__align_center-colors.png
kerning_fit_spacing__align_center.png
kerning_fit_spacing__align_center__newlines.png
kerning_fit_spacing__align_center__newlines_in_fmt-colors.png
kerning_fit_spacing__align_center__newlines_in_value-colors.png
kerning_fit_spacing__align_right-colors.png
kerning_fit_spacing__align_right.png
vertical_overflow.png
vertical_overflow-colors.png
cursor-start.png
cursor-middle.png
cursor-end.png
multiline_cursor-end_first_line.png
multiline_cursor-start_second_line.png
multiline_cursor-middle_second_line.png
multiline_cursor-end_second_line.png
highlight-partial.png
highlight-full.png
multiline_highlight.png
SRC_PREFIX test/fixtures/text_render_integration_test/
OUTPUT_DIR "${DEVILUTIONX_TEST_FIXTURES_OUTPUT_DIRECTORY}/text_render_integration_test"
OUTPUT_VARIABLE _text_render_integration_test_fixtures
)
add_custom_target(text_render_integration_test_resources
DEPENDS
"${DEVILUTIONX_ASSETS_OUTPUT_DIRECTORY}/fonts/12-00.clx"
"${DEVILUTIONX_ASSETS_OUTPUT_DIRECTORY}/fonts/goldui.trn"
"${DEVILUTIONX_ASSETS_OUTPUT_DIRECTORY}/fonts/golduis.trn"
"${DEVILUTIONX_ASSETS_OUTPUT_DIRECTORY}/fonts/grayuis.trn"
"${DEVILUTIONX_ASSETS_OUTPUT_DIRECTORY}/fonts/grayui.trn"
"${DEVILUTIONX_ASSETS_OUTPUT_DIRECTORY}/ui_art/diablo.pal"
${_text_render_integration_test_fixtures}
)
add_dependencies(text_render_integration_test text_render_integration_test_resources)
endif()
target_link_dependencies(utf8_test PRIVATE libdevilutionx_utf8)
target_include_directories(writehero_test PRIVATE 3rdParty/PicoSHA2)