mirror of https://github.com/aseprite/aseprite.git
				
				
				
			Add some simple benchmarks for color blending functions
This commit is contained in:
		
							parent
							
								
									85bd973834
								
							
						
					
					
						commit
						7cbf5fd420
					
				|  | @ -51,3 +51,6 @@ | ||||||
| [submodule "third_party/json11"] | [submodule "third_party/json11"] | ||||||
| 	path = third_party/json11 | 	path = third_party/json11 | ||||||
| 	url = https://github.com/aseprite/json11.git | 	url = https://github.com/aseprite/json11.git | ||||||
|  | [submodule "third_party/benchmark"] | ||||||
|  | 	path = third_party/benchmark | ||||||
|  | 	url = https://github.com/aseprite/benchmark.git | ||||||
|  |  | ||||||
|  | @ -73,7 +73,8 @@ option(ENABLE_MEMLEAK     "Enable memory-leaks detector (only for developers)" o | ||||||
| option(ENABLE_UPDATER     "Enable automatic check for updates" on) | option(ENABLE_UPDATER     "Enable automatic check for updates" on) | ||||||
| option(ENABLE_SCRIPTING   "Compile with scripting support" on) | option(ENABLE_SCRIPTING   "Compile with scripting support" on) | ||||||
| option(ENABLE_WEBSERVER   "Enable support to run a webserver (for HTML5 gamedev)" off) | option(ENABLE_WEBSERVER   "Enable support to run a webserver (for HTML5 gamedev)" off) | ||||||
| option(ENABLE_TESTS       "Enable the unit tests" off) | option(ENABLE_TESTS       "Compile unit tests" off) | ||||||
|  | option(ENABLE_BENCHMARKS  "Compile benchmarks" off) | ||||||
| option(ENABLE_TRIAL_MODE  "Compile the trial version" off) | option(ENABLE_TRIAL_MODE  "Compile the trial version" off) | ||||||
| option(ENABLE_STEAM       "Compile with Steam library" off) | option(ENABLE_STEAM       "Compile with Steam library" off) | ||||||
| option(FULLSCREEN_PLATFORM "Enable fullscreen by default" off) | option(FULLSCREEN_PLATFORM "Enable fullscreen by default" off) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | # Copyright (C) 2017  David Capello | ||||||
|  | # Find benchmarks | ||||||
|  | 
 | ||||||
|  | function(find_benchmarks dir dependencies) | ||||||
|  |   file(GLOB benchmarks ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/*_benchmark.cpp) | ||||||
|  |   list(REMOVE_AT ARGV 0) | ||||||
|  | 
 | ||||||
|  |   foreach(benchmarksourcefile ${benchmarks}) | ||||||
|  |     get_filename_component(benchmarkname ${benchmarksourcefile} NAME_WE) | ||||||
|  | 
 | ||||||
|  |     add_executable(${benchmarkname} ${benchmarksourcefile}) | ||||||
|  | 
 | ||||||
|  |     if(MSVC) | ||||||
|  |       # Fix problem compiling gen from a Visual Studio solution | ||||||
|  |       set_target_properties(${benchmarkname} | ||||||
|  |         PROPERTIES LINK_FLAGS -ENTRY:"mainCRTStartup") | ||||||
|  |     endif() | ||||||
|  | 
 | ||||||
|  |     target_link_libraries(${benchmarkname} benchmark ${ARGV} ${PLATFORM_LIBS}) | ||||||
|  | 
 | ||||||
|  |     if(extra_definitions) | ||||||
|  |       set_target_properties(${benchmarkname} | ||||||
|  |         PROPERTIES COMPILE_FLAGS ${extra_definitions}) | ||||||
|  |     endif() | ||||||
|  |   endforeach() | ||||||
|  | endfunction() | ||||||
|  | @ -189,7 +189,6 @@ install(DIRECTORY ../data | ||||||
| 
 | 
 | ||||||
| if(ENABLE_TESTS) | if(ENABLE_TESTS) | ||||||
|   include(FindTests) |   include(FindTests) | ||||||
| 
 |  | ||||||
|   find_tests(gfx gfx-lib) |   find_tests(gfx gfx-lib) | ||||||
|   find_tests(doc doc-lib) |   find_tests(doc doc-lib) | ||||||
|   find_tests(render render-lib) |   find_tests(render render-lib) | ||||||
|  | @ -199,3 +198,8 @@ if(ENABLE_TESTS) | ||||||
|   find_tests(app app-lib) |   find_tests(app app-lib) | ||||||
|   find_tests(. app-lib) |   find_tests(. app-lib) | ||||||
| endif() | endif() | ||||||
|  | 
 | ||||||
|  | if(ENABLE_BENCHMARKS) | ||||||
|  |   include(FindBenchmarks) | ||||||
|  |   find_benchmarks(doc doc-lib) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | @ -0,0 +1,74 @@ | ||||||
|  | // Aseprite Document Library
 | ||||||
|  | // Copyright (c) 2017 David Capello
 | ||||||
|  | //
 | ||||||
|  | // This file is released under the terms of the MIT license.
 | ||||||
|  | // Read LICENSE.txt for more information.
 | ||||||
|  | 
 | ||||||
|  | #ifdef HAVE_CONFIG_H | ||||||
|  | #include "config.h" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "doc/blend_funcs.h" | ||||||
|  | 
 | ||||||
|  | #include <benchmark/benchmark.h> | ||||||
|  | 
 | ||||||
|  | namespace doc { | ||||||
|  |   color_t rgba_blender_multiply(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_screen(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_overlay(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_darken(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_lighten(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_color_dodge(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_color_burn(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_hard_light(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_soft_light(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_difference(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_exclusion(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_hsl_hue(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_hsl_saturation(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_hsl_color(color_t backdrop, color_t src, int opacity); | ||||||
|  |   color_t rgba_blender_hsl_luminosity(color_t backdrop, color_t src, int opacity); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | using namespace doc; | ||||||
|  | 
 | ||||||
|  | static void CustomArguments(benchmark::internal::Benchmark* b) { | ||||||
|  |   b ->Args({ int(rgba(200, 128, 64, 255)), int(rgba(32, 128, 200, 255)), 255 }) | ||||||
|  |     ->Args({ int(rgba(200, 128, 64, 255)), int(rgba(32, 128, 200, 255)), 128 }) | ||||||
|  |     ->Args({ int(rgba(200, 128, 64, 255)), int(rgba(32, 128, 200, 255)), 0 }) | ||||||
|  |     ->Args({ int(rgba(200, 128, 64, 128)), int(rgba(32, 128, 200, 128)), 255 }) | ||||||
|  |     ->Args({ int(rgba(200, 128, 64, 128)), int(rgba(32, 128, 200, 128)), 128 }) | ||||||
|  |     ->Args({ int(rgba(200, 128, 64, 128)), int(rgba(32, 128, 200, 128)), 0 }) | ||||||
|  |     ->Args({ int(rgba(200, 128, 64, 128)), int(rgba(32, 128, 200, 0)), 255 }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | template<BlendFunc F> | ||||||
|  | void BM_Rgba(benchmark::State& state) { | ||||||
|  |   color_t a = color_t(state.range(0)); | ||||||
|  |   color_t b = color_t(state.range(1)); | ||||||
|  |   int opacity = state.range(2); | ||||||
|  |   BlendFunc func = F; | ||||||
|  |   while (state.KeepRunning()) { | ||||||
|  |     color_t c = func(a, b, opacity); | ||||||
|  |     c = func(c, b, opacity); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_normal)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_multiply)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_screen)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_overlay)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_darken)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_lighten)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_color_dodge)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_color_burn)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_hard_light)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_soft_light)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_difference)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_exclusion)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_hsl_hue)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_hsl_saturation)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_hsl_color)->Apply(CustomArguments); | ||||||
|  | BENCHMARK_TEMPLATE(BM_Rgba, rgba_blender_hsl_luminosity)->Apply(CustomArguments); | ||||||
|  | 
 | ||||||
|  | BENCHMARK_MAIN(); | ||||||
|  | @ -119,3 +119,8 @@ set(ENABLE_CNG OFF CACHE BOOL "Enable the use of CNG(Crypto Next Generation)") | ||||||
| add_subdirectory(libarchive) | add_subdirectory(libarchive) | ||||||
| target_include_directories(archive_static INTERFACE | target_include_directories(archive_static INTERFACE | ||||||
|   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/libarchive/libarchive>) |   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/libarchive/libarchive>) | ||||||
|  | 
 | ||||||
|  | # benchmark | ||||||
|  | if(ENABLE_BENCHMARKS) | ||||||
|  |   add_subdirectory(benchmark) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | Subproject commit 710c2b89d8c6e839e51ac148b4e840ce2c009dbb | ||||||
		Loading…
	
		Reference in New Issue