Support reference timestamp

An issue due to timing happens when applying scenarios on applications.

The first event is directly treated, even if the recorder waited a few
seconds without any action.
The reason is that Exactness saves in the .rec file a timestamp that is
the uptime value, i.e an absolute value. A better choice would have been
to save the number of ms relative to the launch of the application.

Because of this, Exactness doesnt have any way to know when the first
event has to be treated and consumes it whenever possible, i.e at the

This patch adds to the recording file a timestamp reference, corresponding
to the uptime at ecore_init. When applying the scenario, this timestamp
is checked and gives an idea of a delay to wait before consuming the first
This commit is contained in:
Daniel Zaoui 2016-03-23 11:42:47 +02:00
parent b5900b27af
commit 4effc37ab0
3 changed files with 37 additions and 3 deletions

View File

@ -8,6 +8,7 @@
#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"
@ -152,7 +153,15 @@ tsuite_evas_hook_init(void)
if (!shot_key) shot_key = SHOT_KEY_STR;
if (!vr_list)
vr_list = calloc(1, sizeof(*vr_list));
struct sysinfo s_info;
vr_list = calloc(1, sizeof(*vr_list));
vr_list->first_timestamp = s_info.uptime * 1000;
printf("Uptime=<%u>\n", vr_list->first_timestamp);
EAPI void
@ -612,14 +621,36 @@ ecore_main_loop_begin(void)
if (!_hook_setting->recording && _hook_setting->file_name)
double diff_time = 0; /* Time to wait before feeding the first event */ = calloc(1, sizeof(Timer_Data));
printf("<%s> rec file is <%s>\n", __func__, _hook_setting->file_name);
vr_list = read_events(_hook_setting->file_name,;
if (>current_event)
{ /* Got first event in list, run test */
/* 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(>current_event));
if (current_event_time > vr_list->first_timestamp)
diff_time = (current_event_time - vr_list->first_timestamp) / 1000.0;
printf("%s first_time_stamp=<%u> current_event_time=<%u>\n", __func__, vr_list->first_timestamp, current_event_time);
if (diff_time)
printf(" Waiting <%f>\n", diff_time);
ecore_timer_add(diff_time, tsuite_feed_event,;

View File

@ -803,6 +803,8 @@ data_desc *_data_descriptors_init(void)
Variant_st, "data", data, t, desc->_variant_unified_descriptor);
Lists_st, "first_timestamp", first_timestamp, EET_T_UINT);
Lists_st, "variant_list", variant_list, desc->_variant_descriptor);

View File

@ -177,6 +177,7 @@ typedef struct _mouse_in_mouse_out take_screenshot;
struct _Lists_st
Eina_List *variant_list;
unsigned int first_timestamp;
typedef struct _Lists_st Lists_st;