jackdanielz pushed a commit to branch master.

http://git.enlightenment.org/tools/exactness.git/commit/?id=0eb607e7dfe56fb6b77ba98034898037c19c643c

commit 0eb607e7dfe56fb6b77ba98034898037c19c643c
Author: Daniel Zaoui <daniel.za...@samsung.com>
Date:   Sun Oct 9 10:15:37 2016 +0300

    Separate code related to recording and to playing hooks.
    
    Hooks mixed in a same file leads to less readability.
---
 src/bin/Makefile.am            |   2 +-
 src/bin/run_test.c             |   8 +-
 src/lib/Makefile.am            |  23 +-
 src/lib/tsuite_common.c        |  83 ++++++
 src/lib/tsuite_file_data.c     |   4 +-
 src/lib/tsuite_file_data.h     |   2 +-
 src/lib/tsuite_hook_player.c   | 546 +++++++++++++++++++++++++++++++++++++++
 src/lib/tsuite_hook_recorder.c | 574 ++---------------------------------------
 8 files changed, 670 insertions(+), 572 deletions(-)

diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index 35ae159..3998cc8 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -15,7 +15,7 @@ exactness_LDADD = \
                    @EFL_LIBS@
 
 exactness_helper_LDADD = \
-                   @EFL_LIBS@ ../lib/libexactness.la
+                   @EFL_LIBS@ ../lib/libexactness_player.la
 
 exactness_CFLAGS = \
                     @EFL_CFLAGS@ \
diff --git a/src/bin/run_test.c b/src/bin/run_test.c
index e4fb79e..1a3d6a6 100644
--- a/src/bin/run_test.c
+++ b/src/bin/run_test.c
@@ -9,8 +9,6 @@
 #include "exactness_config.h"
 #include "exactness_private.h"
 
-#define LIBEXACTNESS_PATH PACKAGE_LIBDIR "/exactness/libexactness.so"
-
 #define CONFIG "ELM_SCALE=1 ELM_FINGER_SIZE=10"
 
 typedef enum
@@ -55,12 +53,12 @@ _run_command_prepare(const List_Entry *ent, Run_Mode mode, 
char *buf)
            {
               eina_strbuf_append_printf(sbuf, "TSUITE_DEST_DIR='%s' ",
                     exactness_config.dest_dir);
-              eina_strbuf_append(sbuf, "TSUITE_RECORDING='rec' ");
               break;
            }
      }
-   eina_strbuf_append_printf(sbuf, "LD_PRELOAD='%s' %s %s %s",
-         LIBEXACTNESS_PATH, CONFIG, exactness_config.wrap_command, 
ent->command);
+   eina_strbuf_append_printf(sbuf, 
"LD_PRELOAD='%s/exactness/libexactness_%s.so' %s %s %s",
+         PACKAGE_LIBDIR, mode == RUN_RECORD ? "recorder" : "player",
+         CONFIG, exactness_config.wrap_command, ent->command);
    strncpy(buf, eina_strbuf_string_get(sbuf), SCHEDULER_CMD_SIZE-1);
    eina_strbuf_free(sbuf);
 }
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index dfe6efd..65c9b88 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -12,13 +12,24 @@ EXTRA_DIST = \
             exactness_private.h
 
 pkgdir = $(libdir)/exactness
-pkg_LTLIBRARIES = libexactness.la
+pkg_LTLIBRARIES = libexactness_recorder.la libexactness_player.la
 
-libexactness_la_SOURCES = \
+libexactness_recorder_la_SOURCES = \
                          tsuite_hook_recorder.c \
+                         tsuite_common.c \
                          tsuite_file_data.c
 
-libexactness_la_LDFLAGS = -avoid-version -rdynamic
-libexactness_la_DEPENDENCIES = $(top_builddir)/config.h
-libexactness_la_LIBADD = @EFL_LIBS@
-libexactness_la_CFLAGS = @EFL_CFLAGS@
+libexactness_recorder_la_LDFLAGS = -avoid-version -rdynamic
+libexactness_recorder_la_DEPENDENCIES = $(top_builddir)/config.h
+libexactness_recorder_la_LIBADD = @EFL_LIBS@
+libexactness_recorder_la_CFLAGS = @EFL_CFLAGS@
+
+libexactness_player_la_SOURCES = \
+                         tsuite_hook_player.c \
+                         tsuite_common.c \
+                         tsuite_file_data.c
+
+libexactness_player_la_LDFLAGS = -avoid-version -rdynamic
+libexactness_player_la_DEPENDENCIES = $(top_builddir)/config.h
+libexactness_player_la_LIBADD = @EFL_LIBS@
+libexactness_player_la_CFLAGS = @EFL_CFLAGS@
diff --git a/src/lib/tsuite_common.c b/src/lib/tsuite_common.c
new file mode 100644
index 0000000..d210965
--- /dev/null
+++ b/src/lib/tsuite_common.c
@@ -0,0 +1,83 @@
+#include "tsuite_file_data.h"
+
+unsigned int
+evt_time_get(unsigned int tm, Variant_st *v)
+{
+   switch(tsuite_event_mapping_type_get(v->t.type))
+     {
+      case TSUITE_EVENT_MOUSE_IN:
+           {
+              mouse_in_mouse_out *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_MOUSE_OUT:
+           {
+              mouse_in_mouse_out *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_MOUSE_DOWN:
+           {
+              mouse_down_mouse_up *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_MOUSE_UP:
+           {
+              mouse_down_mouse_up *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_MOUSE_MOVE:
+           {
+              mouse_move *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_MOUSE_WHEEL:
+           {
+              mouse_wheel *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_MULTI_DOWN:
+           {
+              multi_event *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_MULTI_UP:
+           {
+              multi_event *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_MULTI_MOVE:
+           {
+              multi_move *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_KEY_DOWN:
+           {
+              key_down_key_up *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_KEY_UP:
+           {
+              key_down_key_up *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE:
+           {
+              key_down_key_up_with_keycode *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_KEY_UP_WITH_KEYCODE:
+           {
+              key_down_key_up_with_keycode *t = v->data;
+              return t->timestamp;
+           }
+      case TSUITE_EVENT_TAKE_SHOT:
+           {
+              take_screenshot *t = v->data;
+              return t->timestamp;
+           }
+      default: /* All non-input events are not handeled */
+         return tm;
+         break;
+     }
+}
+
diff --git a/src/lib/tsuite_file_data.c b/src/lib/tsuite_file_data.c
index 2852b7d..4bc5348 100644
--- a/src/lib/tsuite_file_data.c
+++ b/src/lib/tsuite_file_data.c
@@ -51,9 +51,10 @@ tsuite_event_mapping_type_str_get(Tsuite_Event_Type t)
 }
 
 Lists_st *
-free_events(Lists_st *st, char *recording)
+free_events(Lists_st *st, Eina_Bool recording)
 {
    Variant_st *v;
+   if (!st) goto end;
    EINA_LIST_FREE(st->variant_list, v)
      {
         if (recording)
@@ -76,6 +77,7 @@ free_events(Lists_st *st, char *recording)
      }
 
    free(st);  /* Allocated when reading data from EET file */
+end:
    return NULL;
 }
 
diff --git a/src/lib/tsuite_file_data.h b/src/lib/tsuite_file_data.h
index 47c7ed8..73c341c 100644
--- a/src/lib/tsuite_file_data.h
+++ b/src/lib/tsuite_file_data.h
@@ -251,7 +251,7 @@ const char * _variant_type_get(const void *data, Eina_Bool 
*unknow);
 Eina_Bool _variant_type_set(const char *type, void *data, Eina_Bool unknow);
 
 EAPI Tsuite_Event_Type tsuite_event_mapping_type_get(const char *name);
-EAPI Lists_st * free_events(Lists_st *st, char *recording);
+EAPI Lists_st * free_events(Lists_st *st, Eina_Bool recording);
 EAPI void write_events(const char *filename, Lists_st *vr_list);
 EAPI Lists_st *read_events(const char *filename, Timer_Data *td);
 EAPI unsigned int evt_time_get(unsigned int tm, Variant_st *v);
diff --git a/src/lib/tsuite_hook_player.c b/src/lib/tsuite_hook_player.c
new file mode 100644
index 0000000..5524dff
--- /dev/null
+++ b/src/lib/tsuite_hook_player.c
@@ -0,0 +1,546 @@
+#define _GNU_SOURCE 1
+#define EFL_EO_API_SUPPORT
+#define EFL_BETA_API_SUPPORT
+#include <Eo.h>
+#include <Eet.h>
+#include <Evas.h>
+#include <Ecore.h>
+#include <Ecore_Evas.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/sysinfo.h>
+#include <dlfcn.h>
+#include "tsuite_file_data.h"
+#include "exactness_private.h"
+
+#define TSUITE_MAX_PATH 1024
+#define IMAGE_FILENAME_EXT ".png"
+
+struct _evas_hook_setting
+{
+   char *dest_dir;
+   char *test_name;
+   char *file_name;
+   Eina_Bool verbose;
+};
+typedef struct _evas_hook_setting evas_hook_setting;
+
+static Lists_st *vr_list = NULL;
+static evas_hook_setting *_hook_setting = NULL;
+static Tsuite_Data ts;
+static Eina_List *evas_list = NULL; /* List of Evas pointers */
+static int ignore_evas_new = 0; /* Counter to know if we should ignore evas 
new or not. */
+
+static void
+_tsuite_verbosef(const char *fmt, ...)
+{
+   va_list ap;
+   if (!_hook_setting->verbose)
+      return;
+
+   va_start(ap, fmt);
+   vprintf(fmt, ap);
+   va_end(ap);
+}
+
+/**
+ * @internal
+ *
+ * This function takes actual shot and saves it in PNG
+ * @param data Tsuite_Data pointer initiated by user
+ * @param obj  Window pointer
+ * @param obj  name file name. Will use name_+serial if NULL
+ *
+ * @ingroup Tsuite
+ */
+static void
+_shot_do(char *name, Evas *e)
+{
+   if (!e)
+     return;
+
+   Ecore_Evas *ee = NULL, *ee_orig;
+   Evas_Object *o;
+   unsigned int *pixels;
+   int w, h,dir_name_len = 0;
+   char *filename;
+   if (_hook_setting->dest_dir)
+     dir_name_len = strlen(_hook_setting->dest_dir) + 1; /* includes space of 
a '/' */
+
+   if (name)
+     {
+        filename = malloc(strlen(name) + strlen(IMAGE_FILENAME_EXT) +
+              dir_name_len + 4);
+
+        if (_hook_setting->dest_dir)
+          sprintf(filename, "%s/", _hook_setting->dest_dir);
+
+        sprintf(filename + dir_name_len, "%s%s", name, IMAGE_FILENAME_EXT);
+     }
+   else
+     {
+        filename = malloc(strlen(_hook_setting->test_name) + 
strlen(IMAGE_FILENAME_EXT) +
+              dir_name_len + 8); /* also space for serial */
+
+        ts.serial++;
+        if (_hook_setting->dest_dir)
+          sprintf(filename, "%s/", _hook_setting->dest_dir);
+
+        sprintf(filename + dir_name_len, "%s%c%03d%s", 
_hook_setting->test_name,
+              SHOT_DELIMITER, ts.serial, IMAGE_FILENAME_EXT);
+     }
+   _tsuite_verbosef("Shot taken (%s).\n", filename);
+
+   ee_orig = ecore_evas_ecore_evas_get(e);
+
+   ecore_evas_manual_render(ee_orig);
+   pixels = (void *)ecore_evas_buffer_pixels_get(ee_orig);
+   if (!pixels) goto end;
+   ecore_evas_geometry_get(ee_orig, NULL, NULL, &w, &h);
+   if ((w < 1) || (h < 1)) goto end;
+
+   ignore_evas_new++;
+   ee = ecore_evas_buffer_new(1, 1);
+   ignore_evas_new--;
+
+   o = evas_object_image_add(ecore_evas_get(ee));
+   evas_object_image_alpha_set(o, ecore_evas_alpha_get(ee_orig));
+   evas_object_image_size_set(o, w, h);
+   evas_object_image_data_set(o, pixels);
+
+   if (!evas_object_image_save(o, filename, NULL, NULL))
+     {
+        printf("Cannot save widget to <%s>\n", filename);
+     }
+
+end:
+   if (ee)
+     {
+        ecore_evas_free(ee);
+     }
+   free(filename);
+}
+
+static int _ecore_init_count = 0;
+
+EAPI int
+ecore_init(void)
+{
+   int ret;
+   int (*_ecore_init)(void) =
+      dlsym(RTLD_NEXT, "ecore_init");
+
+   _ecore_init_count++;
+
+   if ((_ecore_init_count == 1) && (!_hook_setting))
+     {
+        const char *tmp;
+        _hook_setting = calloc(1, sizeof(evas_hook_setting));
+        _hook_setting->dest_dir = getenv("TSUITE_DEST_DIR");
+        _hook_setting->test_name = getenv("TSUITE_TEST_NAME");
+        _hook_setting->file_name = getenv("TSUITE_FILE_NAME");
+        tmp = getenv("TSUITE_VERBOSE");
+        if (tmp)
+           _hook_setting->verbose = atoi(tmp);
+#ifdef DEBUG_TSUITE
+        printf("<%s> test_name=<%s>\n", __func__, _hook_setting->test_name);
+        printf("<%s> dest_dir=<%s>\n", __func__, _hook_setting->dest_dir);
+        printf("<%s> recording=<%s>\n", __func__, _hook_setting->recording);
+        printf("<%s> rec file is <%s>\n", __func__, _hook_setting->file_name);
+#endif
+     }
+
+   ret = _ecore_init();
+   eet_init();
+
+   return ret;
+}
+
+EAPI int
+ecore_shutdown(void)
+{
+   int (*_ecore_shutdown)(void) =
+      dlsym(RTLD_NEXT, "ecore_shutdown");
+
+   _ecore_init_count--;
+
+   if (_ecore_init_count == 0)
+     {
+        if (_hook_setting)
+          {
+             vr_list = free_events(vr_list, EINA_FALSE);
+
+             free(_hook_setting);
+             _hook_setting = NULL;
+          }
+
+        if (ts.td)
+          free(ts.td);
+
+        evas_list = eina_list_free(evas_list);
+
+        memset(&ts, 0, sizeof(Tsuite_Data));
+     }
+
+   eet_shutdown();
+   return _ecore_shutdown();
+}
+
+EAPI Evas *
+evas_new(void)
+{
+   Evas * (*_evas_new)(void) = dlsym(RTLD_NEXT, __FUNCTION__);
+
+   Evas *evas = _evas_new();
+   if (ignore_evas_new == 0)
+     {
+        evas_list = eina_list_append(evas_list, evas);
+#ifdef DEBUG_TSUITE
+        printf("Appended EVAS=<%p> list size=<%d>\n", evas, 
eina_list_count(evas_list));
+#endif
+     }
+
+   return evas;
+}
+
+EAPI Ecore_Evas *
+ecore_evas_new(const char *engine_name EINA_UNUSED, int x, int y,
+               int w, int h, const char *extra_options)
+{
+   Ecore_Evas * (*_ecore_evas_new)(const char *engine_name, int x, int y,
+               int w, int h, const char *extra_options) = dlsym(RTLD_NEXT, 
__FUNCTION__);
+
+   return _ecore_evas_new("buffer", x, y, w, h, extra_options);
+}
+
+static Eina_Bool
+tsuite_feed_event(void *data)
+{
+   Timer_Data *td = data;
+   time_t evt_time;
+   if (!td)
+     return ECORE_CALLBACK_CANCEL;
+   static Evas_Object *rect = NULL;
+   if (_hook_setting->verbose)
+     {
+        if (!rect)
+          {
+             rect = evas_object_rectangle_add(eina_list_data_get(evas_list));
+             evas_object_repeat_events_set(rect, EINA_TRUE);
+             evas_object_color_set(rect, 255, 0, 0, 255);
+             evas_object_resize(rect, 15, 15);
+             evas_object_layer_set(rect, 100);
+             evas_object_show(rect);
+          }
+     }
+
+   Variant_st *v = eina_list_data_get(td->current_event);
+   switch(tsuite_event_mapping_type_get(v->t.type))
+     {
+      case TSUITE_EVENT_MOUSE_IN:
+           {
+              mouse_in_mouse_out *t = v->data;
+              evt_time = t->timestamp;
+              _tsuite_verbosef("Mouse in\n");
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_mouse_in timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
+#endif
+              evas_event_feed_mouse_in(eina_list_nth(evas_list, t->n_evas),
+                       time(NULL), NULL);
+              break;
+           }
+      case TSUITE_EVENT_MOUSE_OUT:
+           {
+              mouse_in_mouse_out *t = v->data;
+              evt_time = t->timestamp;
+              _tsuite_verbosef("Mouse out\n");
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_mouse_out timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp,t->n_evas);
+#endif
+              evas_event_feed_mouse_out(eina_list_nth(evas_list, t->n_evas),
+                    time(NULL), NULL);
+              break;
+           }
+      case TSUITE_EVENT_MOUSE_DOWN:
+           {
+              mouse_down_mouse_up *t = v->data;
+              evt_time = t->timestamp;
+              _tsuite_verbosef("Mouse down\n");
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_mouse_down timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
+#endif
+              if (rect) evas_object_color_set(rect, 255, 255, 0, 255);
+              evas_event_feed_mouse_down(eina_list_nth(evas_list, t->n_evas),
+                    t->b, t->flags, time(NULL),
+                    NULL);
+
+              break;
+           }
+      case TSUITE_EVENT_MOUSE_UP:
+           {
+              mouse_down_mouse_up *t = v->data;
+              evt_time = t->timestamp;
+              _tsuite_verbosef("Mouse up\n");
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_mouse_up timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp,t->n_evas);
+#endif
+              evas_event_feed_mouse_up(eina_list_nth(evas_list, t->n_evas),
+                    t->b, t->flags, time(NULL),
+                    NULL);
+              if (rect) evas_object_color_set(rect, 255, 0, 0, 255);
+
+              break;
+           }
+      case TSUITE_EVENT_MOUSE_MOVE:
+           {
+              mouse_move *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_mouse_move (x,y)=(%d,%d) 
timestamp=<%u> t->n_evas=<%d>\n", __func__, t->x, t->y, t->timestamp,t->n_evas);
+#endif
+              evas_event_feed_mouse_move(eina_list_nth(evas_list, t->n_evas),
+                    t->x, t->y, time(NULL), NULL);
+
+              if (rect)
+                {
+                   evas_object_move(rect, t->x, t->y);
+                   evas_object_color_set(rect, 255, 0, 0, 255);
+                }
+              break;
+           }
+      case TSUITE_EVENT_MOUSE_WHEEL:
+           {
+              mouse_wheel *t = v->data;
+              evt_time = t->timestamp;
+              _tsuite_verbosef("Mouse wheel\n");
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_mouse_wheel timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
+#endif
+              evas_event_feed_mouse_wheel(eina_list_nth(evas_list, t->n_evas),
+                    t->direction, t->z,
+                    time(NULL), NULL);
+
+              break;
+           }
+      case TSUITE_EVENT_MULTI_DOWN:
+           {
+              multi_event *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_multi_down timestamp=<%u>, 
t->n_evas=<%d>\n", __func__, t->timestamp,t->n_evas);
+#endif
+              if (!t->d)
+                {
+                   evas_event_feed_mouse_down(eina_list_nth(evas_list, 
t->n_evas),
+                         t->b, t->flags, time(NULL), NULL);
+                   if (rect) evas_object_color_set(rect, 255, 255, 0, 255);
+                }
+              else
+                {
+                   evas_event_feed_multi_down(eina_list_nth(evas_list, 
t->n_evas),
+                         t->d, t->x, t->y, t->rad,
+                         t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
+                         t->flags, time(NULL), NULL);
+                }
+
+              break;
+           }
+      case TSUITE_EVENT_MULTI_UP:
+           {
+              multi_event *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_multi_up timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp,t->n_evas);
+#endif
+              if (!t->d)
+                {
+                   evas_event_feed_mouse_up(eina_list_nth(evas_list, 
t->n_evas),
+                         t->b, t->flags, time(NULL), NULL);
+                   if (rect) evas_object_color_set(rect, 255, 0, 0, 255);
+                }
+              else
+                {
+                   evas_event_feed_multi_up(eina_list_nth(evas_list, 
t->n_evas),
+                         t->d, t->x, t->y, t->rad,
+                         t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
+                         t->flags, time(NULL), NULL);
+                }
+
+              break;
+           }
+      case TSUITE_EVENT_MULTI_MOVE:
+           {
+              multi_move *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_multi_move timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
+#endif
+              if (!t->d)
+                {
+                   evas_event_feed_mouse_move(eina_list_nth(evas_list, 
t->n_evas),
+                         t->x, t->y, time(NULL), NULL);
+                   if (rect)
+                     {
+                        evas_object_move(rect, t->x, t->y);
+                        evas_object_color_set(rect, 255, 0, 0, 255);
+                     }
+                }
+              else
+                {
+                   evas_event_feed_multi_move(eina_list_nth(evas_list, 
t->n_evas),
+                         t->d, t->x, t->y, t->rad,
+                         t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
+                         time(NULL), NULL);
+                }
+
+              break;
+           }
+      case TSUITE_EVENT_KEY_DOWN:
+           {
+              key_down_key_up *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_key_down timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
+#endif
+              evas_event_feed_key_down(eina_list_nth(evas_list, t->n_evas),
+                    t->keyname, t->key, t->string,
+                    t->compose, time(NULL), NULL);
+
+              break;
+           }
+      case TSUITE_EVENT_KEY_UP:
+           {
+              key_down_key_up *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_key_up timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
+#endif
+              evas_event_feed_key_up(eina_list_nth(evas_list, t->n_evas),
+                    t->keyname, t->key, t->string,
+                    t->compose, time(NULL), NULL);
+
+              break;
+           }
+      case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE:
+           {
+              key_down_key_up_with_keycode *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_key_down_with_keycode timestamp=<%u> 
t->n_evas=<%d> t->keycode=<%u>\n", __func__, t->timestamp, t->n_evas, 
t->keycode);
+#endif
+              evas_event_feed_key_down_with_keycode(eina_list_nth(evas_list, 
t->n_evas),
+                    t->keyname, t->key, t->string,
+                    t->compose, time(NULL), NULL, t->keycode);
+
+              break;
+           }
+      case TSUITE_EVENT_KEY_UP_WITH_KEYCODE:
+           {
+              key_down_key_up_with_keycode *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s evas_event_feed_key_up_with_keycode timestamp=<%u> 
t->n_evas=<%d> t->keycode=<%u>\n", __func__, t->timestamp, t->n_evas, 
t->keycode);
+#endif
+              evas_event_feed_key_up(eina_list_nth(evas_list, t->n_evas),
+                    t->keyname, t->key, t->string,
+                    t->compose, time(NULL), NULL);
+
+              break;
+           }
+
+      case TSUITE_EVENT_TAKE_SHOT:
+           {
+              take_screenshot *t = v->data;
+              evt_time = t->timestamp;
+#ifdef DEBUG_TSUITE
+              printf("%s take shot  timestamp=<%u> t->n_evas=<%d>\n", 
__func__, t->timestamp, t->n_evas);
+#endif
+              if (rect) evas_object_color_set(rect, 0, 0, 255, 255);
+              _shot_do(NULL,
+                    eina_list_nth(evas_list, t->n_evas)); /* Serial name based 
on test-name */
+              break;
+           }
+      default: /* All non-input events are not handeled */
+         evt_time = td->recent_event_time;
+         break;
+     }
+
+   double timer_time;
+   td->current_event = eina_list_next(td->current_event);
+
+   if (!td->current_event)
+     {  /* Finished reading all events */
+        ecore_main_loop_quit();
+        return ECORE_CALLBACK_CANCEL;
+     }
+
+   td->recent_event_time = evt_time;
+
+   unsigned int current_event_time = evt_time_get(evt_time, 
eina_list_data_get(td->current_event));
+
+   if (current_event_time < td->recent_event_time) /* Could happen with refeed 
event */
+     current_event_time = td->recent_event_time;
+
+#ifdef DEBUG_TSUITE
+   printf("  %s td->recent_event_time=<%u> current_event_time=<%u>\n", 
__func__, td->recent_event_time, current_event_time);
+#endif
+   timer_time = (current_event_time - td->recent_event_time) / 1000.0;
+
+   if (!td->recent_event_time)
+     timer_time = 0.0;
+
+#ifdef DEBUG_TSUITE
+   printf("  %s timer_time=<%f>\n", __func__, timer_time);
+#endif
+   ecore_timer_add(timer_time, tsuite_feed_event, td);
+
+   return ECORE_CALLBACK_CANCEL;
+}
+
+void
+ecore_main_loop_begin(void)
+{
+   void (*_ecore_main_loop_begin)(void) =
+      dlsym(RTLD_NEXT, "ecore_main_loop_begin");
+
+
+   if (_hook_setting->file_name)
+     {
+        double diff_time = 0; /* Time to wait before feeding the first event */
+        ts.td = calloc(1, sizeof(Timer_Data));
+#ifdef DEBUG_TSUITE
+        printf("<%s> rec file is <%s>\n", __func__, _hook_setting->file_name);
+#endif
+        vr_list = read_events(_hook_setting->file_name, ts.td);
+        if (ts.td->current_event)
+          {
+             /* Got first event in list, run test */
+
+             /* Calculate the time to wait before feeding the first event */
+             unsigned int current_event_time = evt_time_get(0, 
eina_list_data_get(ts.td->current_event));
+             if (current_event_time > vr_list->first_timestamp)
+                diff_time = (current_event_time - vr_list->first_timestamp) / 
1000.0;
+
+#ifdef DEBUG_TSUITE
+             printf("%s first_time_stamp=<%u> current_event_time=<%u>\n", 
__func__, vr_list->first_timestamp, current_event_time);
+#endif
+
+             if (diff_time)
+               {
+#ifdef DEBUG_TSUITE
+                  printf("  Waiting <%f>\n", diff_time);
+#endif
+                  ecore_timer_add(diff_time, tsuite_feed_event, ts.td);
+               }
+             else
+               {
+                  tsuite_feed_event(ts.td);
+               }
+          }
+     }
+
+   return _ecore_main_loop_begin();
+}
diff --git a/src/lib/tsuite_hook_recorder.c b/src/lib/tsuite_hook_recorder.c
index 4aa4525..74b1ddf 100644
--- a/src/lib/tsuite_hook_recorder.c
+++ b/src/lib/tsuite_hook_recorder.c
@@ -5,7 +5,6 @@
 #include <Eet.h>
 #include <Evas.h>
 #include <Ecore.h>
-#include <Ecore_Evas.h>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -23,7 +22,6 @@
 
 struct _evas_hook_setting
 {
-   char *recording;
    char *dest_dir;
    char *test_name;
    char *file_name;
@@ -36,7 +34,6 @@ static Lists_st *vr_list = NULL;
 static evas_hook_setting *_hook_setting = NULL;
 static Tsuite_Data ts;
 static Eina_List *evas_list = NULL; /* List of Evas pointers */
-static int ignore_evas_new = 0; /* Counter to know if we should ignore evas 
new or not. */
 
 static Tsuite_Event_Type
 tsuite_event_pointer_type_get(Efl_Pointer_Action t)
@@ -90,7 +87,7 @@ _is_hook_duplicate(const Variant_st *v, Tsuite_Event_Type 
ev_type, const void *i
 /* Adding variant to list, this list is later written to EET file */
 #define ADD_TO_LIST(EVT_TYPE, INFO) \
    do { /* This macro will add event to EET data list */ \
-        if (vr_list && _hook_setting->recording) \
+        if (vr_list) \
           { \
              const Variant_st *prev_v = 
eina_list_last_data_get(vr_list->variant_list); \
              if (!prev_v || !_is_hook_duplicate(prev_v, EVT_TYPE, &INFO, 
sizeof(INFO))) \
@@ -127,109 +124,6 @@ evas_list_find(void *ptr)
 }
 
 static void
-_tsuite_verbosef(const char *fmt, ...)
-{
-   va_list ap;
-   if (!_hook_setting->verbose)
-      return;
-
-   va_start(ap, fmt);
-   vprintf(fmt, ap);
-   va_end(ap);
-}
-
-/**
- * @internal
- *
- * This function initiates Tsuite_Data
- * @param name defines test-name
- * @param Pointer_Event Pointer to PE.
- *
- * @ingroup Tsuite
- */
-
-unsigned int
-evt_time_get(unsigned int tm, Variant_st *v)
-{
-   switch(tsuite_event_mapping_type_get(v->t.type))
-     {
-      case TSUITE_EVENT_MOUSE_IN:
-           {
-              mouse_in_mouse_out *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_MOUSE_OUT:
-           {
-              mouse_in_mouse_out *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_MOUSE_DOWN:
-           {
-              mouse_down_mouse_up *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_MOUSE_UP:
-           {
-              mouse_down_mouse_up *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_MOUSE_MOVE:
-           {
-              mouse_move *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_MOUSE_WHEEL:
-           {
-              mouse_wheel *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_MULTI_DOWN:
-           {
-              multi_event *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_MULTI_UP:
-           {
-              multi_event *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_MULTI_MOVE:
-           {
-              multi_move *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_KEY_DOWN:
-           {
-              key_down_key_up *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_KEY_UP:
-           {
-              key_down_key_up *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE:
-           {
-              key_down_key_up_with_keycode *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_KEY_UP_WITH_KEYCODE:
-           {
-              key_down_key_up_with_keycode *t = v->data;
-              return t->timestamp;
-           }
-      case TSUITE_EVENT_TAKE_SHOT:
-           {
-              take_screenshot *t = v->data;
-              return t->timestamp;
-           }
-      default: /* All non-input events are not handeled */
-         return tm;
-         break;
-     }
-}
-
-static void
 _evas_hook_init(void)
 {  /* Pointer taken from tsuite.c */
    shot_key = getenv("TSUITE_SHOT_KEY");
@@ -247,91 +141,6 @@ _evas_hook_init(void)
      }
 }
 
-static void
-_evas_hook_reset(void)
-{  /* tsuite.c informs us that vr_list is no longer valid */
-   if (vr_list)
-     vr_list = free_events(vr_list, _hook_setting->recording);
-}
-
-/**
- * @internal
- *
- * This function takes actual shot and saves it in PNG
- * @param data Tsuite_Data pointer initiated by user
- * @param obj  Window pointer
- * @param obj  name file name. Will use name_+serial if NULL
- *
- * @ingroup Tsuite
- */
-static void
-_shot_do(char *name, Evas *e)
-{
-   if (!e)
-     return;
-
-   Ecore_Evas *ee = NULL, *ee_orig;
-   Evas_Object *o;
-   unsigned int *pixels;
-   int w, h,dir_name_len = 0;
-   char *filename;
-   if (_hook_setting->dest_dir)
-     dir_name_len = strlen(_hook_setting->dest_dir) + 1; /* includes space of 
a '/' */
-
-   if (name)
-     {
-        filename = malloc(strlen(name) + strlen(IMAGE_FILENAME_EXT) +
-              dir_name_len + 4);
-
-        if (_hook_setting->dest_dir)
-          sprintf(filename, "%s/", _hook_setting->dest_dir);
-
-        sprintf(filename + dir_name_len, "%s%s", name, IMAGE_FILENAME_EXT);
-     }
-   else
-     {
-        filename = malloc(strlen(_hook_setting->test_name) + 
strlen(IMAGE_FILENAME_EXT) +
-              dir_name_len + 8); /* also space for serial */
-
-        ts.serial++;
-        if (_hook_setting->dest_dir)
-          sprintf(filename, "%s/", _hook_setting->dest_dir);
-
-        sprintf(filename + dir_name_len, "%s%c%03d%s", 
_hook_setting->test_name,
-              SHOT_DELIMITER, ts.serial, IMAGE_FILENAME_EXT);
-     }
-   _tsuite_verbosef("Shot taken (%s).\n", filename);
-
-   ee_orig = ecore_evas_ecore_evas_get(e);
-
-   ecore_evas_manual_render(ee_orig);
-   pixels = (void *)ecore_evas_buffer_pixels_get(ee_orig);
-   if (!pixels) goto end;
-   ecore_evas_geometry_get(ee_orig, NULL, NULL, &w, &h);
-   if ((w < 1) || (h < 1)) goto end;
-
-   ignore_evas_new++;
-   ee = ecore_evas_buffer_new(1, 1);
-   ignore_evas_new--;
-
-   o = evas_object_image_add(ecore_evas_get(ee));
-   evas_object_image_alpha_set(o, ecore_evas_alpha_get(ee_orig));
-   evas_object_image_size_set(o, w, h);
-   evas_object_image_data_set(o, pixels);
-
-   if (!evas_object_image_save(o, filename, NULL, NULL))
-     {
-        printf("Cannot save widget to <%s>\n", filename);
-     }
-
-end:
-   if (ee)
-     {
-        ecore_evas_free(ee);
-     }
-   free(filename);
-}
-
 static int _ecore_init_count = 0;
 
 EAPI int
@@ -348,7 +157,6 @@ ecore_init(void)
      {
         const char *tmp;
         _hook_setting = calloc(1, sizeof(evas_hook_setting));
-        _hook_setting->recording = getenv("TSUITE_RECORDING");
         _hook_setting->dest_dir = getenv("TSUITE_DEST_DIR");
         _hook_setting->test_name = getenv("TSUITE_TEST_NAME");
         _hook_setting->file_name = getenv("TSUITE_FILE_NAME");
@@ -369,8 +177,7 @@ ecore_init(void)
 
    if (initing)
      {
-        if (_hook_setting->recording)
-           _evas_hook_init();
+        _evas_hook_init();
      }
 
    return ret;
@@ -388,10 +195,10 @@ ecore_shutdown(void)
      {
         if (_hook_setting)
           {
-             if (vr_list && _hook_setting->recording)
+             if (vr_list)
                write_events(_hook_setting->file_name, vr_list);
 
-             _evas_hook_reset();
+             vr_list = free_events(vr_list, EINA_TRUE);
 
              free(_hook_setting);
              _hook_setting = NULL;
@@ -497,7 +304,7 @@ _event_key_cb(void *data, const Efl_Event *event)
           {
              if (_hook_setting)
                {
-                  if (vr_list && _hook_setting->recording)
+                  if (vr_list)
                      write_events(_hook_setting->file_name, vr_list);
 #ifdef DEBUG_TSUITE
                   printf("Save events: %s timestamp=<%u>\n", __func__, 
timestamp);
@@ -511,7 +318,7 @@ _event_key_cb(void *data, const Efl_Event *event)
      {
         if (!strcmp(key, shot_key) || !strcmp(key, SAVE_KEY_STR)) return;
      }
-   if (vr_list && _hook_setting->recording)
+   if (vr_list)
      {  /* Construct duplicate strings, free them when list if freed */
         key_down_key_up_with_keycode t;
         t.timestamp = timestamp;
@@ -543,366 +350,17 @@ EFL_CALLBACKS_ARRAY_DEFINE(_event_pointer_callbacks,
 EAPI Evas *
 evas_new(void)
 {
-   Evas *evas;
    Evas * (*_evas_new)(void) = dlsym(RTLD_NEXT, __FUNCTION__);
-
-   evas = _evas_new();
-   if (ignore_evas_new == 0)
-     {
-        evas_list = eina_list_append(evas_list, evas);
-        efl_event_callback_array_add(evas, _event_pointer_callbacks(), evas);
+   Evas *evas = _evas_new();
+   evas_list = eina_list_append(evas_list, evas);
+   efl_event_callback_array_add(evas, _event_pointer_callbacks(), evas);
 #ifdef DEBUG_TSUITE
-        printf("Appended EVAS=<%p> list size=<%d>\n", evas, 
eina_list_count(evas_list));
+   printf("Appended EVAS=<%p> list size=<%d>\n", evas, 
eina_list_count(evas_list));
 #endif
-     }
 
    return evas;
 }
 
-EAPI Ecore_Evas *
-ecore_evas_new(const char *engine_name, int x, int y,
-               int w, int h, const char *extra_options)
-{
-   Ecore_Evas *ecore_evas;
-   Ecore_Evas * (*_ecore_evas_new)(const char *engine_name, int x, int y,
-               int w, int h, const char *extra_options) = dlsym(RTLD_NEXT, 
__FUNCTION__);
-
-   if(!_hook_setting->recording)
-      ecore_evas = _ecore_evas_new("buffer", x, y, w, h, extra_options);
-   else
-      ecore_evas = _ecore_evas_new(engine_name, x, y, w, h, extra_options);
-   return ecore_evas;
-}
-
-static Eina_Bool
-tsuite_feed_event(void *data)
-{
-   Timer_Data *td = data;
-   time_t evt_time;
-   if (!td)
-     return ECORE_CALLBACK_CANCEL;
-   static Evas_Object *rect = NULL;
-   if (_hook_setting->verbose)
-     {
-        if (!rect)
-          {
-             rect = evas_object_rectangle_add(eina_list_data_get(evas_list));
-             evas_object_repeat_events_set(rect, EINA_TRUE);
-             evas_object_color_set(rect, 255, 0, 0, 255);
-             evas_object_resize(rect, 15, 15);
-             evas_object_layer_set(rect, 100);
-             evas_object_show(rect);
-          }
-     }
-
-   Variant_st *v = eina_list_data_get(td->current_event);
-   switch(tsuite_event_mapping_type_get(v->t.type))
-     {
-      case TSUITE_EVENT_MOUSE_IN:
-           {
-              mouse_in_mouse_out *t = v->data;
-              evt_time = t->timestamp;
-              _tsuite_verbosef("Mouse in\n");
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_mouse_in timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
-#endif
-              evas_event_feed_mouse_in(eina_list_nth(evas_list, t->n_evas),
-                       time(NULL), NULL);
-              break;
-           }
-      case TSUITE_EVENT_MOUSE_OUT:
-           {
-              mouse_in_mouse_out *t = v->data;
-              evt_time = t->timestamp;
-              _tsuite_verbosef("Mouse out\n");
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_mouse_out timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp,t->n_evas);
-#endif
-              evas_event_feed_mouse_out(eina_list_nth(evas_list, t->n_evas),
-                    time(NULL), NULL);
-              break;
-           }
-      case TSUITE_EVENT_MOUSE_DOWN:
-           {
-              mouse_down_mouse_up *t = v->data;
-              evt_time = t->timestamp;
-              _tsuite_verbosef("Mouse down\n");
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_mouse_down timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
-#endif
-              if (rect) evas_object_color_set(rect, 255, 255, 0, 255);
-              evas_event_feed_mouse_down(eina_list_nth(evas_list, t->n_evas),
-                    t->b, t->flags, time(NULL),
-                    NULL);
-
-              break;
-           }
-      case TSUITE_EVENT_MOUSE_UP:
-           {
-              mouse_down_mouse_up *t = v->data;
-              evt_time = t->timestamp;
-              _tsuite_verbosef("Mouse up\n");
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_mouse_up timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp,t->n_evas);
-#endif
-              evas_event_feed_mouse_up(eina_list_nth(evas_list, t->n_evas),
-                    t->b, t->flags, time(NULL),
-                    NULL);
-              if (rect) evas_object_color_set(rect, 255, 0, 0, 255);
-
-              break;
-           }
-      case TSUITE_EVENT_MOUSE_MOVE:
-           {
-              mouse_move *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_mouse_move (x,y)=(%d,%d) 
timestamp=<%u> t->n_evas=<%d>\n", __func__, t->x, t->y, t->timestamp,t->n_evas);
-#endif
-              evas_event_feed_mouse_move(eina_list_nth(evas_list, t->n_evas),
-                    t->x, t->y, time(NULL), NULL);
-
-              if (rect)
-                {
-                   evas_object_move(rect, t->x, t->y);
-                   evas_object_color_set(rect, 255, 0, 0, 255);
-                }
-              break;
-           }
-      case TSUITE_EVENT_MOUSE_WHEEL:
-           {
-              mouse_wheel *t = v->data;
-              evt_time = t->timestamp;
-              _tsuite_verbosef("Mouse wheel\n");
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_mouse_wheel timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
-#endif
-              evas_event_feed_mouse_wheel(eina_list_nth(evas_list, t->n_evas),
-                    t->direction, t->z,
-                    time(NULL), NULL);
-
-              break;
-           }
-      case TSUITE_EVENT_MULTI_DOWN:
-           {
-              multi_event *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_multi_down timestamp=<%u>, 
t->n_evas=<%d>\n", __func__, t->timestamp,t->n_evas);
-#endif
-              if (!t->d)
-                {
-                   evas_event_feed_mouse_down(eina_list_nth(evas_list, 
t->n_evas),
-                         t->b, t->flags, time(NULL), NULL);
-                   if (rect) evas_object_color_set(rect, 255, 255, 0, 255);
-                }
-              else
-                {
-                   evas_event_feed_multi_down(eina_list_nth(evas_list, 
t->n_evas),
-                         t->d, t->x, t->y, t->rad,
-                         t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
-                         t->flags, time(NULL), NULL);
-                }
-
-              break;
-           }
-      case TSUITE_EVENT_MULTI_UP:
-           {
-              multi_event *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_multi_up timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp,t->n_evas);
-#endif
-              if (!t->d)
-                {
-                   evas_event_feed_mouse_up(eina_list_nth(evas_list, 
t->n_evas),
-                         t->b, t->flags, time(NULL), NULL);
-                   if (rect) evas_object_color_set(rect, 255, 0, 0, 255);
-                }
-              else
-                {
-                   evas_event_feed_multi_up(eina_list_nth(evas_list, 
t->n_evas),
-                         t->d, t->x, t->y, t->rad,
-                         t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
-                         t->flags, time(NULL), NULL);
-                }
-
-              break;
-           }
-      case TSUITE_EVENT_MULTI_MOVE:
-           {
-              multi_move *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_multi_move timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
-#endif
-              if (!t->d)
-                {
-                   evas_event_feed_mouse_move(eina_list_nth(evas_list, 
t->n_evas),
-                         t->x, t->y, time(NULL), NULL);
-                   if (rect)
-                     {
-                        evas_object_move(rect, t->x, t->y);
-                        evas_object_color_set(rect, 255, 0, 0, 255);
-                     }
-                }
-              else
-                {
-                   evas_event_feed_multi_move(eina_list_nth(evas_list, 
t->n_evas),
-                         t->d, t->x, t->y, t->rad,
-                         t->radx, t->rady, t->pres, t->ang, t->fx, t->fy,
-                         time(NULL), NULL);
-                }
-
-              break;
-           }
-      case TSUITE_EVENT_KEY_DOWN:
-           {
-              key_down_key_up *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_key_down timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
-#endif
-              evas_event_feed_key_down(eina_list_nth(evas_list, t->n_evas),
-                    t->keyname, t->key, t->string,
-                    t->compose, time(NULL), NULL);
-
-              break;
-           }
-      case TSUITE_EVENT_KEY_UP:
-           {
-              key_down_key_up *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_key_up timestamp=<%u> 
t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
-#endif
-              evas_event_feed_key_up(eina_list_nth(evas_list, t->n_evas),
-                    t->keyname, t->key, t->string,
-                    t->compose, time(NULL), NULL);
-
-              break;
-           }
-      case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE:
-           {
-              key_down_key_up_with_keycode *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_key_down_with_keycode timestamp=<%u> 
t->n_evas=<%d> t->keycode=<%u>\n", __func__, t->timestamp, t->n_evas, 
t->keycode);
-#endif
-              evas_event_feed_key_down_with_keycode(eina_list_nth(evas_list, 
t->n_evas),
-                    t->keyname, t->key, t->string,
-                    t->compose, time(NULL), NULL, t->keycode);
-
-              break;
-           }
-      case TSUITE_EVENT_KEY_UP_WITH_KEYCODE:
-           {
-              key_down_key_up_with_keycode *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s evas_event_feed_key_up_with_keycode timestamp=<%u> 
t->n_evas=<%d> t->keycode=<%u>\n", __func__, t->timestamp, t->n_evas, 
t->keycode);
-#endif
-              evas_event_feed_key_up(eina_list_nth(evas_list, t->n_evas),
-                    t->keyname, t->key, t->string,
-                    t->compose, time(NULL), NULL);
-
-              break;
-           }
-
-      case TSUITE_EVENT_TAKE_SHOT:
-           {
-              take_screenshot *t = v->data;
-              evt_time = t->timestamp;
-#ifdef DEBUG_TSUITE
-              printf("%s take shot  timestamp=<%u> t->n_evas=<%d>\n", 
__func__, t->timestamp, t->n_evas);
-#endif
-              if (rect) evas_object_color_set(rect, 0, 0, 255, 255);
-              _shot_do(NULL,
-                    eina_list_nth(evas_list, t->n_evas)); /* Serial name based 
on test-name */
-              break;
-           }
-      default: /* All non-input events are not handeled */
-         evt_time = td->recent_event_time;
-         break;
-     }
-
-   double timer_time;
-   td->current_event = eina_list_next(td->current_event);
-
-   if (!td->current_event)
-     {  /* Finished reading all events */
-        ecore_main_loop_quit();
-        return ECORE_CALLBACK_CANCEL;
-     }
-
-   td->recent_event_time = evt_time;
-
-   unsigned int current_event_time = evt_time_get(evt_time, 
eina_list_data_get(td->current_event));
-
-   if (current_event_time < td->recent_event_time) /* Could happen with refeed 
event */
-     current_event_time = td->recent_event_time;
-
-#ifdef DEBUG_TSUITE
-   printf("  %s td->recent_event_time=<%u> current_event_time=<%u>\n", 
__func__, td->recent_event_time, current_event_time);
-#endif
-   timer_time = (current_event_time - td->recent_event_time) / 1000.0;
-
-   if (!td->recent_event_time)
-     timer_time = 0.0;
-
-#ifdef DEBUG_TSUITE
-   printf("  %s timer_time=<%f>\n", __func__, timer_time);
-#endif
-   ecore_timer_add(timer_time, tsuite_feed_event, td);
-
-   return ECORE_CALLBACK_CANCEL;
-}
-
-void
-ecore_main_loop_begin(void)
-{
-   void (*_ecore_main_loop_begin)(void) =
-      dlsym(RTLD_NEXT, "ecore_main_loop_begin");
-
-
-   if (!_hook_setting->recording && _hook_setting->file_name)
-     {
-        double diff_time = 0; /* Time to wait before feeding the first event */
-        ts.td = calloc(1, sizeof(Timer_Data));
-#ifdef DEBUG_TSUITE
-        printf("<%s> rec file is <%s>\n", __func__, _hook_setting->file_name);
-#endif
-        vr_list = read_events(_hook_setting->file_name, ts.td);
-        if (ts.td->current_event)
-          {
-             /* Got first event in list, run test */
-
-             /* Calculate the time to wait before feeding the first event */
-             unsigned int current_event_time = evt_time_get(0, 
eina_list_data_get(ts.td->current_event));
-             if (current_event_time > vr_list->first_timestamp)
-                diff_time = (current_event_time - vr_list->first_timestamp) / 
1000.0;
-
-#ifdef DEBUG_TSUITE
-             printf("%s first_time_stamp=<%u> current_event_time=<%u>\n", 
__func__, vr_list->first_timestamp, current_event_time);
-#endif
-
-             if (diff_time)
-               {
-#ifdef DEBUG_TSUITE
-                  printf("  Waiting <%f>\n", diff_time);
-#endif
-                  ecore_timer_add(diff_time, tsuite_feed_event, ts.td);
-               }
-             else
-               {
-                  tsuite_feed_event(ts.td);
-               }
-          }
-     }
-
-   return _ecore_main_loop_begin();
-}
-
 static Tsuite_Event_Type
 tsuite_event_type_get(Evas_Callback_Type t)
 {
@@ -1158,7 +616,7 @@ evas_event_feed_key_down(Evas *e, const char *keyname, 
const char *key,
      {
         if (_hook_setting)
           {
-             if (vr_list && _hook_setting->recording)
+             if (vr_list)
                write_events(_hook_setting->file_name, vr_list);
 #ifdef DEBUG_TSUITE
              printf("Save events: %s timestamp=<%u>\n", __func__, timestamp);
@@ -1167,7 +625,7 @@ evas_event_feed_key_down(Evas *e, const char *keyname, 
const char *key,
         return;
      }
 
-   if (vr_list && _hook_setting->recording)
+   if (vr_list)
      {  /* Construct duplicate strings, free them when list if freed */
         key_down_key_up t;
         t.timestamp = timestamp;
@@ -1216,7 +674,7 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const 
char *key,
    printf("Calling %s timestamp=<%u>\n", __func__, timestamp);
 #endif
 
-   if (vr_list && _hook_setting->recording)
+   if (vr_list)
      {  /* Construct duplicate strings, free them when list if freed */
         key_down_key_up t;
         t.timestamp = timestamp;
@@ -1261,7 +719,7 @@ evas_event_feed_key_down_with_keycode(Evas *e, const char 
*keyname, const char *
      {
         if (_hook_setting)
           {
-             if (vr_list && _hook_setting->recording)
+             if (vr_list)
                write_events(_hook_setting->file_name, vr_list);
 #ifdef DEBUG_TSUITE
              printf("Save events: %s timestamp=<%u>\n", __func__, timestamp);
@@ -1270,7 +728,7 @@ evas_event_feed_key_down_with_keycode(Evas *e, const char 
*keyname, const char *
         return;
      }
 
-   if (vr_list && _hook_setting->recording)
+   if (vr_list)
      {  /* Construct duplicate strings, free them when list if freed */
         key_down_key_up_with_keycode t;
         t.timestamp = timestamp;
@@ -1320,7 +778,7 @@ evas_event_feed_key_up_with_keycode(Evas *e, const char 
*keyname, const char *ke
    printf("Calling %s timestamp=<%u>\n", __func__, timestamp);
 #endif
 
-   if (vr_list && _hook_setting->recording)
+   if (vr_list)
      {  /* Construct duplicate strings, free them when list if freed */
         key_down_key_up_with_keycode t;
         t.timestamp = timestamp;

-- 


Reply via email to