forked from enlightenment/efl
evas: add benchmark for TGV loader and saver.
This commit is contained in:
parent
52a36461b8
commit
b56d7bba60
|
@ -4080,6 +4080,7 @@ doc/previews/Makefile
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/benchmarks/eina/Makefile
|
src/benchmarks/eina/Makefile
|
||||||
src/benchmarks/eo/Makefile
|
src/benchmarks/eo/Makefile
|
||||||
|
src/benchmarks/evas/Makefile
|
||||||
src/examples/eina/Makefile
|
src/examples/eina/Makefile
|
||||||
src/examples/eina_cxx/Makefile
|
src/examples/eina_cxx/Makefile
|
||||||
src/examples/eet/Makefile
|
src/examples/eet/Makefile
|
||||||
|
|
|
@ -73,7 +73,8 @@ include Makefile_Eina_Cxx.am
|
||||||
|
|
||||||
BENCHMARK_SUBDIRS = \
|
BENCHMARK_SUBDIRS = \
|
||||||
benchmarks/eina \
|
benchmarks/eina \
|
||||||
benchmarks/eo
|
benchmarks/eo \
|
||||||
|
benchmarks/evas
|
||||||
DIST_SUBDIRS += $(BENCHMARK_SUBDIRS)
|
DIST_SUBDIRS += $(BENCHMARK_SUBDIRS)
|
||||||
|
|
||||||
benchmark: all-am
|
benchmark: all-am
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
/evas_bench
|
|
@ -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
|
|
@ -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;
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue