2005-06-06 02:40:00 -07:00
|
|
|
/*
|
|
|
|
* XSync code
|
|
|
|
*/
|
2009-01-31 10:33:39 -08:00
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include <config.h>
|
2010-08-02 10:47:49 -07:00
|
|
|
#endif /* ifdef HAVE_CONFIG_H */
|
2009-01-31 10:33:39 -08:00
|
|
|
|
2005-06-06 02:40:00 -07:00
|
|
|
#include "Ecore.h"
|
|
|
|
#include "ecore_x_private.h"
|
|
|
|
#include "Ecore_X.h"
|
|
|
|
#include "Ecore_X_Atoms.h"
|
|
|
|
|
2006-01-06 12:22:09 -08:00
|
|
|
EAPI Ecore_X_Sync_Alarm
|
2005-06-06 08:04:28 -07:00
|
|
|
ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter)
|
|
|
|
{
|
|
|
|
Ecore_X_Sync_Alarm alarm;
|
|
|
|
XSyncAlarmAttributes values;
|
|
|
|
XSyncValue init;
|
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2005-06-06 08:04:28 -07:00
|
|
|
XSyncIntToValue(&init, 0);
|
|
|
|
XSyncSetCounter(_ecore_x_disp, counter, init);
|
2010-07-27 22:23:42 -07:00
|
|
|
|
2005-06-06 08:04:28 -07:00
|
|
|
values.trigger.counter = counter;
|
|
|
|
values.trigger.value_type = XSyncAbsolute;
|
|
|
|
XSyncIntToValue(&values.trigger.wait_value, 1);
|
|
|
|
values.trigger.test_type = XSyncPositiveComparison;
|
|
|
|
|
2011-10-20 22:40:59 -07:00
|
|
|
XSyncIntToValue(&values.delta, 1);
|
2005-06-06 08:04:28 -07:00
|
|
|
|
|
|
|
values.events = True;
|
|
|
|
|
|
|
|
alarm = XSyncCreateAlarm(_ecore_x_disp,
|
2010-07-27 22:23:42 -07:00
|
|
|
XSyncCACounter |
|
|
|
|
XSyncCAValueType |
|
|
|
|
XSyncCAValue |
|
|
|
|
XSyncCATestType |
|
|
|
|
XSyncCADelta |
|
|
|
|
XSyncCAEvents,
|
|
|
|
&values);
|
2005-06-06 08:04:28 -07:00
|
|
|
|
|
|
|
ecore_x_sync();
|
|
|
|
return alarm;
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2005-06-06 08:04:28 -07:00
|
|
|
|
2010-09-26 10:49:05 -07:00
|
|
|
EAPI Eina_Bool
|
2005-06-06 08:04:28 -07:00
|
|
|
ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm)
|
|
|
|
{
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2005-06-06 08:04:28 -07:00
|
|
|
return XSyncDestroyAlarm(_ecore_x_disp, alarm);
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2009-10-01 01:43:54 -07:00
|
|
|
|
2010-09-26 10:49:05 -07:00
|
|
|
EAPI Eina_Bool
|
2011-10-20 22:40:59 -07:00
|
|
|
ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter,
|
2011-12-03 12:05:48 -08:00
|
|
|
unsigned int *val)
|
2009-10-01 01:43:54 -07:00
|
|
|
{
|
2010-02-25 04:19:02 -08:00
|
|
|
XSyncValue value;
|
2010-07-27 22:23:42 -07:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
|
|
|
if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
|
|
|
|
{
|
2010-07-27 22:23:42 -07:00
|
|
|
*val = (unsigned int)XSyncValueLow32(value);
|
2010-09-26 10:49:05 -07:00
|
|
|
return EINA_TRUE;
|
2010-02-25 04:19:02 -08:00
|
|
|
}
|
2010-07-27 22:23:42 -07:00
|
|
|
|
2010-09-26 10:49:05 -07:00
|
|
|
return EINA_FALSE;
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2010-01-30 02:42:22 -08:00
|
|
|
|
|
|
|
EAPI Ecore_X_Sync_Counter
|
|
|
|
ecore_x_sync_counter_new(int val)
|
|
|
|
{
|
|
|
|
XSyncCounter counter;
|
|
|
|
XSyncValue v;
|
2010-07-27 22:23:42 -07:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2010-01-30 02:42:22 -08:00
|
|
|
XSyncIntToValue(&v, val);
|
|
|
|
counter = XSyncCreateCounter(_ecore_x_disp, v);
|
|
|
|
return counter;
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2010-01-30 02:42:22 -08:00
|
|
|
|
|
|
|
EAPI void
|
|
|
|
ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter)
|
|
|
|
{
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2010-01-30 02:42:22 -08:00
|
|
|
XSyncDestroyCounter(_ecore_x_disp, counter);
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2010-01-30 02:42:22 -08:00
|
|
|
|
|
|
|
EAPI void
|
2011-10-20 22:40:59 -07:00
|
|
|
ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter,
|
2011-12-03 12:05:48 -08:00
|
|
|
int by)
|
2010-01-30 02:42:22 -08:00
|
|
|
{
|
|
|
|
XSyncValue v;
|
2010-07-27 22:23:42 -07:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2010-02-01 06:13:48 -08:00
|
|
|
XSyncIntToValue(&v, by);
|
2010-01-30 02:42:22 -08:00
|
|
|
XSyncChangeCounter(_ecore_x_disp, counter, v);
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2010-01-30 02:42:22 -08:00
|
|
|
|
|
|
|
EAPI void
|
2011-10-20 22:40:59 -07:00
|
|
|
ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter,
|
2011-12-03 12:05:48 -08:00
|
|
|
int val)
|
2010-01-30 02:42:22 -08:00
|
|
|
{
|
|
|
|
XSyncWaitCondition cond;
|
|
|
|
XSyncValue v, v2;
|
2010-02-01 06:13:48 -08:00
|
|
|
|
2010-02-25 04:19:02 -08:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
2010-02-01 06:13:48 -08:00
|
|
|
XSyncQueryCounter(_ecore_x_disp, counter, &v);
|
2011-10-20 22:40:59 -07:00
|
|
|
XSyncIntToValue(&v, val);
|
2010-02-01 06:13:48 -08:00
|
|
|
XSyncIntToValue(&v2, val + 1);
|
2010-01-30 02:42:22 -08:00
|
|
|
cond.trigger.counter = counter;
|
2010-02-01 06:13:48 -08:00
|
|
|
cond.trigger.value_type = XSyncAbsolute;
|
2010-01-30 02:42:22 -08:00
|
|
|
cond.trigger.wait_value = v;
|
2010-02-01 06:13:48 -08:00
|
|
|
cond.trigger.test_type = XSyncPositiveComparison;
|
2010-01-30 02:42:22 -08:00
|
|
|
cond.event_threshold = v2;
|
|
|
|
XSyncAwait(_ecore_x_disp, &cond, 1);
|
2010-02-13 03:37:57 -08:00
|
|
|
// XSync(_ecore_x_disp, False); // dont need this
|
2011-12-03 11:41:12 -08:00
|
|
|
}
|
2010-08-02 10:47:49 -07:00
|
|
|
|
2011-03-30 03:10:04 -07:00
|
|
|
EAPI void
|
2011-10-20 22:40:59 -07:00
|
|
|
ecore_x_sync_counter_set(Ecore_X_Sync_Counter counter,
|
2011-12-03 12:05:48 -08:00
|
|
|
int val)
|
2011-03-30 03:10:04 -07:00
|
|
|
{
|
|
|
|
XSyncValue v;
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2011-03-30 03:10:04 -07:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
|
|
|
XSyncIntToValue(&v, val);
|
|
|
|
XSyncSetCounter(_ecore_x_disp, counter, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
2011-10-20 22:40:59 -07:00
|
|
|
ecore_x_sync_counter_2_set(Ecore_X_Sync_Counter counter,
|
2011-12-03 12:05:48 -08:00
|
|
|
int val_hi,
|
|
|
|
unsigned int val_lo)
|
2011-03-30 03:10:04 -07:00
|
|
|
{
|
|
|
|
XSyncValue v;
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2011-03-30 03:10:04 -07:00
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
|
|
|
XSyncIntsToValue(&v, val_lo, val_hi);
|
|
|
|
XSyncSetCounter(_ecore_x_disp, counter, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
2011-10-20 22:40:59 -07:00
|
|
|
ecore_x_sync_counter_2_query(Ecore_X_Sync_Counter counter,
|
2011-12-03 12:05:48 -08:00
|
|
|
int *val_hi,
|
|
|
|
unsigned int *val_lo)
|
2011-03-30 03:10:04 -07:00
|
|
|
{
|
|
|
|
XSyncValue value;
|
|
|
|
|
|
|
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
|
|
|
if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
|
|
|
|
{
|
|
|
|
*val_lo = (unsigned int)XSyncValueLow32(value);
|
|
|
|
*val_hi = (int)XSyncValueHigh32(value);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|