evas: add benchmark for TGV loader and saver.

This commit is contained in:
Cedric BAIL 2014-03-14 18:38:30 +09:00 committed by Cedric BAIL
parent 52a36461b8
commit b56d7bba60
8 changed files with 269 additions and 1 deletions

View File

@ -4080,6 +4080,7 @@ doc/previews/Makefile
src/Makefile
src/benchmarks/eina/Makefile
src/benchmarks/eo/Makefile
src/benchmarks/evas/Makefile
src/examples/eina/Makefile
src/examples/eina_cxx/Makefile
src/examples/eet/Makefile

View File

@ -73,7 +73,8 @@ include Makefile_Eina_Cxx.am
BENCHMARK_SUBDIRS = \
benchmarks/eina \
benchmarks/eo
benchmarks/eo \
benchmarks/evas
DIST_SUBDIRS += $(BENCHMARK_SUBDIRS)
benchmark: all-am

1
src/benchmarks/evas/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/evas_bench

View File

@ -0,0 +1,35 @@
MAINTAINERCLEANFILES = Makefile.in
AM_CPPFLAGS = \
-I$(top_builddir)/src/lib/efl \
-I$(top_srcdir)/src/lib/eina \
-I$(top_builddir)/src/lib/eina \
-I$(top_srcdir)/src/modules/evas/engines/buffer \
-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" \
-DTESTS_SRC_DIR=\"$(abs_top_srcdir)/src/tests/evas\" \
@EVAS_CFLAGS@
EXTRA_PROGRAMS = evas_bench
benchmark: evas_bench
evas_bench_SOURCES = \
evas_bench.c \
evas_bench_loader.c \
evas_bench_saver.c \
evas_bench.h
nodist_EXTRA_evas_bench_SOURCES = dummy.cc
evas_bench_LDADD = \
$(top_builddir)/src/lib/evas/libevas.la \
$(top_builddir)/src/lib/eina/libeina.la \
@EVAS_LDFLAGS@
EXTRA_DIST =
clean-local:
rm -rf *.gcno ..\#..\#src\#*.gcov *.gcda
if ALWAYS_BUILD_EXAMPLES
noinst_PROGRAMS = $(EXTRA_PROGRAMS)
endif

View File

@ -0,0 +1,54 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include "evas_bench.h"
#include "Eina.h"
#include "Evas.h"
typedef struct _Evas_Benchmark_Case Evas_Benchmark_Case;
struct _Evas_Benchmark_Case
{
const char *bench_case;
void (*build)(Eina_Benchmark *bench);
Eina_Bool run_by_default;
};
static const Evas_Benchmark_Case etc[] = {
{ "Loader", evas_bench_loader, EINA_TRUE },
{ "Saver", evas_bench_saver, EINA_TRUE },
{ NULL, NULL, EINA_FALSE }
};
int
main(int argc, char **argv)
{
Eina_Benchmark *test;
unsigned int i;
evas_init();
for (i = 0; etc[i].bench_case; ++i)
{
if (argc == 2 && strcasecmp(etc[i].bench_case, argv[1]))
continue;
test = eina_benchmark_new(etc[i].bench_case, "default");
if (!test)
continue;
etc[i].build(test);
eina_benchmark_run(test);
eina_benchmark_free(test);
}
evas_shutdown();
return 0;
}

View File

@ -0,0 +1,10 @@
#ifndef EVAS_BENCH_H_
#define EVAS_BENCH_H_
#include "eina_benchmark.h"
void evas_bench_loader(Eina_Benchmark *bench);
void evas_bench_saver(Eina_Benchmark *bench);
#endif

View File

@ -0,0 +1,92 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "Evas.h"
#include "Evas_Engine_Buffer.h"
#include "evas_bench.h"
static const char *
_test_image_get(const char *name)
{
static char filename[PATH_MAX];
snprintf(filename, PATH_MAX, TESTS_SRC_DIR"/images/%s", name);
return filename;
}
static Evas *
_setup_evas()
{
Evas *evas;
Evas_Engine_Info_Buffer *einfo;
evas = evas_new();
evas_output_method_set(evas, evas_render_method_lookup("buffer"));
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(evas);
einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_RGB32;
einfo->info.dest_buffer = malloc(sizeof (char) * 500 * 500 * 4);
einfo->info.dest_buffer_row_bytes = 500 * sizeof (char) * 4;
evas_engine_info_set(evas, (Evas_Engine_Info *)einfo);
evas_output_size_set(evas, 500, 500);
evas_output_viewport_set(evas, 0, 0, 500, 500);
return evas;
}
static void
evas_bench_loader_tgv(int request)
{
Evas *e = _setup_evas();
char *large;
char *small;
char *computer;
Evas_Object *o;
Eina_List *l;
int i;
large = strdup(_test_image_get("Light-50.tgv"));
small = strdup(_test_image_get("Sunrise-100.tgv"));
computer = strdup(_test_image_get("Pic1-50.tgv"));
for (i = 0; i < request; i++)
{
o = evas_object_image_add(e);
evas_object_image_file_set(o, large, NULL);
if (!evas_object_image_data_get(o, 0)) break ;
evas_object_image_file_set(o, small, NULL);
if (!evas_object_image_data_get(o, 0)) break ;
evas_object_image_file_set(o, computer, NULL);
if (!evas_object_image_data_get(o, 0)) break ;
evas_object_del(o);
l = evas_render_updates(e);
evas_render_updates_free(l);
evas_render_idle_flush(e);
evas_render_dump(e);
}
fprintf(stderr, "i: %i (%s, %s, %s)\n",
i, large, small, computer);
free(large);
free(small);
free(computer);
evas_free(e);
}
void evas_bench_loader(Eina_Benchmark *bench)
{
eina_benchmark_register(bench, "tgv-loader", EINA_BENCHMARK(evas_bench_loader_tgv), 20, 2000, 100);
}

View File

@ -0,0 +1,74 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <fcntl.h>
#include <unistd.h>
#include "Evas.h"
#include "Evas_Engine_Buffer.h"
#include "evas_bench.h"
static const char *
_test_image_get(const char *name)
{
static char filename[PATH_MAX];
snprintf(filename, PATH_MAX, TESTS_SRC_DIR"/images/%s", name);
return filename;
}
static Evas *
_setup_evas()
{
Evas *evas;
Evas_Engine_Info_Buffer *einfo;
evas = evas_new();
evas_output_method_set(evas, evas_render_method_lookup("buffer"));
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(evas);
einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_RGB32;
einfo->info.dest_buffer = malloc(sizeof (char) * 500 * 500 * 4);
einfo->info.dest_buffer_row_bytes = 500 * sizeof (char) * 4;
evas_engine_info_set(evas, (Evas_Engine_Info *)einfo);
evas_output_size_set(evas, 500, 500);
evas_output_viewport_set(evas, 0, 0, 500, 500);
return evas;
}
static void
evas_bench_saver_tgv(int request)
{
Evas *e = _setup_evas();
const char *source;
Eina_Tmpstr *dest;
Evas_Object *o;
int i;
source = _test_image_get("mars_rover_panorama_half-size.jpg");
eina_file_mkstemp("evas_saver_benchXXXXXX", &dest);
o = evas_object_image_add(e);
evas_object_image_file_set(o, source, NULL);
for (i = 0; i < request; i++)
{
evas_object_image_save(o, dest, NULL, "compress=1 quality=50");
}
unlink(dest);
eina_tmpstr_del(dest);
evas_free(e);
}
void evas_bench_saver(Eina_Benchmark *bench)
{
eina_benchmark_register(bench, "tgv-saver", EINA_BENCHMARK(evas_bench_saver_tgv), 20, 2000, 100);
}