diff --git a/legacy/eina/src/tests/Makefile.am b/legacy/eina/src/tests/Makefile.am index 65708ba15f..748538e9e5 100644 --- a/legacy/eina/src/tests/Makefile.am +++ b/legacy/eina/src/tests/Makefile.am @@ -88,6 +88,7 @@ eina_bench_sort.c \ eina_bench_hash.c \ eina_bench_stringshare.c \ eina_bench_convert.c \ +eina_bench_mempool.c \ eina_bench_stringshare_e17.c \ eina_bench_array.c diff --git a/legacy/eina/src/tests/eina_bench.c b/legacy/eina/src/tests/eina_bench.c index 4f231a6c76..93b17d402d 100644 --- a/legacy/eina/src/tests/eina_bench.c +++ b/legacy/eina/src/tests/eina_bench.c @@ -36,6 +36,7 @@ static const Eina_Benchmark_Case etc[] = { { "Stringshare", eina_bench_stringshare }, { "Convert", eina_bench_convert }, { "Sort", eina_bench_sort }, + { "Mempool", eina_bench_mempool }, { NULL, NULL } }; @@ -67,6 +68,8 @@ main(int argc, char **argv) if (argc != 2) return -1; + _mempool_init(); + eina_benchmark_init(); for (i = 0; etc[i].bench_case != NULL; ++i) @@ -92,15 +95,10 @@ main(int argc, char **argv) eina_benchmark_free(test); } - _mempool_init(); - eina_bench_e17(); - eina_mempool_shutdown(); - eina_benchmark_shutdown(); _mempool_shutdown(); - return 0; } diff --git a/legacy/eina/src/tests/eina_bench.h b/legacy/eina/src/tests/eina_bench.h index 685fb2cb0a..f4b7a3ae9d 100644 --- a/legacy/eina/src/tests/eina_bench.h +++ b/legacy/eina/src/tests/eina_bench.h @@ -26,6 +26,7 @@ void eina_bench_array(Eina_Benchmark *bench); void eina_bench_stringshare(Eina_Benchmark *bench); void eina_bench_convert(Eina_Benchmark *bench); void eina_bench_sort(Eina_Benchmark *bench); +void eina_bench_mempool(Eina_Benchmark *bench); /* Specific benchmark. */ void eina_bench_e17(void); diff --git a/legacy/eina/src/tests/eina_bench_mempool.c b/legacy/eina/src/tests/eina_bench_mempool.c new file mode 100644 index 0000000000..eb290f8f2d --- /dev/null +++ b/legacy/eina/src/tests/eina_bench_mempool.c @@ -0,0 +1,116 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "eina_bench.h" +#include "eina_array.h" +#include "eina_mempool.h" + +static void +_eina_mempool_bench(Eina_Mempool *mp, int request) +{ + Eina_Array *array; + int i; + int j; + + eina_array_init(); + array = eina_array_new(32); + + for (i = 0; i < 100; ++i) + { + for (j = 0; j < request; ++j) + { + eina_array_push(array, eina_mempool_alloc(mp, sizeof (int))); + } + + for (j = 0; j < request; ++j) + { + eina_mempool_free(mp, eina_array_pop(array)); + } + } + + eina_array_free(array); + eina_array_shutdown(); +} + +static void +eina_mempool_chained_mempool(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_new("chained_mempool", "test", NULL, sizeof (int), 256); + _eina_mempool_bench(mp, request); + eina_mempool_delete(mp); +} + +static void +eina_mempool_pass_through(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_new("pass_through", "test", NULL, sizeof (int), 8, 0); + _eina_mempool_bench(mp, request); + eina_mempool_delete(mp); +} + +static void +eina_mempool_fixed_bitmap(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_new("fixed_bitmap", "test", NULL, sizeof (int)); + _eina_mempool_bench(mp, request); + eina_mempool_delete(mp); +} + +#ifdef EINA_EMEMOA_SUPPORT +static void +eina_mempool_ememoa_fixed(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_new("ememoa_fixed", "test", NULL, sizeof (int), 8, 0); + _eina_mempool_bench(mp, request); + eina_mempool_delete(mp); +} + +static void +eina_mempool_ememoa_unknown(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_new("ememoa_unknown", "test", NULL, 0, 2, sizeof (int), 8, sizeof (int) * 2, 8); + _eina_mempool_bench(mp, request); + eina_mempool_delete(mp); +} +#endif + +void +eina_bench_mempool(Eina_Benchmark *bench) +{ +/* eina_benchmark_register(bench, "chained mempool", EINA_BENCHMARK(eina_mempool_chained_mempool), 10, 100, 10); */ + eina_benchmark_register(bench, "pass through", EINA_BENCHMARK(eina_mempool_pass_through), 10, 10000, 100); + eina_benchmark_register(bench, "fixed bitmap", EINA_BENCHMARK(eina_mempool_fixed_bitmap), 10, 10000, 100); +#ifdef EINA_EMEMOA_SUPPORT + eina_benchmark_register(bench, "ememoa fixed", EINA_BENCHMARK(eina_mempool_ememoa_fixed), 10, 10000, 100); + eina_benchmark_register(bench, "ememoa unknown", EINA_BENCHMARK(eina_mempool_ememoa_unknown), 10, 10000, 100); +#endif +}