cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b56d7bba605d2bd156f438d6dd2da6818474bde3

commit b56d7bba605d2bd156f438d6dd2da6818474bde3
Author: Cedric BAIL <cedric.b...@samsung.com>
Date:   Fri Mar 14 18:38:30 2014 +0900

    evas: add benchmark for TGV loader and saver.
---
 configure.ac                            |  1 +
 src/Makefile.am                         |  3 +-
 src/benchmarks/evas/.gitignore          |  1 +
 src/benchmarks/evas/Makefile.am         | 35 +++++++++++++
 src/benchmarks/evas/evas_bench.c        | 54 +++++++++++++++++++
 src/benchmarks/evas/evas_bench.h        | 10 ++++
 src/benchmarks/evas/evas_bench_loader.c | 92 +++++++++++++++++++++++++++++++++
 src/benchmarks/evas/evas_bench_saver.c  | 74 ++++++++++++++++++++++++++
 8 files changed, 269 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index a848345..82418f3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
diff --git a/src/Makefile.am b/src/Makefile.am
index f9c2497..58270c7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -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
diff --git a/src/benchmarks/evas/.gitignore b/src/benchmarks/evas/.gitignore
new file mode 100644
index 0000000..aee0b35
--- /dev/null
+++ b/src/benchmarks/evas/.gitignore
@@ -0,0 +1 @@
+/evas_bench
diff --git a/src/benchmarks/evas/Makefile.am b/src/benchmarks/evas/Makefile.am
new file mode 100644
index 0000000..31c9d72
--- /dev/null
+++ b/src/benchmarks/evas/Makefile.am
@@ -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
diff --git a/src/benchmarks/evas/evas_bench.c b/src/benchmarks/evas/evas_bench.c
new file mode 100644
index 0000000..58b806e
--- /dev/null
+++ b/src/benchmarks/evas/evas_bench.c
@@ -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;
+}
diff --git a/src/benchmarks/evas/evas_bench.h b/src/benchmarks/evas/evas_bench.h
new file mode 100644
index 0000000..cf57213
--- /dev/null
+++ b/src/benchmarks/evas/evas_bench.h
@@ -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
+
diff --git a/src/benchmarks/evas/evas_bench_loader.c 
b/src/benchmarks/evas/evas_bench_loader.c
new file mode 100644
index 0000000..77c1684
--- /dev/null
+++ b/src/benchmarks/evas/evas_bench_loader.c
@@ -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);
+}
diff --git a/src/benchmarks/evas/evas_bench_saver.c 
b/src/benchmarks/evas/evas_bench_saver.c
new file mode 100644
index 0000000..c278b84
--- /dev/null
+++ b/src/benchmarks/evas/evas_bench_saver.c
@@ -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);
+}

-- 


Reply via email to