7ec2f9aab34dd096d9b8df5ae7bdf6cc89171a3d
[profile/ivi/ecore.git] / src / lib / ecore_x / xlib / ecore_x_sync.c
1 /*
2  * XSync code
3  */
4
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif /* ifdef HAVE_CONFIG_H */
8
9 #include "Ecore.h"
10 #include "ecore_x_private.h"
11 #include "Ecore_X.h"
12 #include "Ecore_X_Atoms.h"
13
14 EAPI Ecore_X_Sync_Alarm
15 ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter)
16 {
17    Ecore_X_Sync_Alarm alarm;
18    XSyncAlarmAttributes values;
19    XSyncValue init;
20
21    LOGFN(__FILE__, __LINE__, __FUNCTION__);
22    XSyncIntToValue(&init, 0);
23    XSyncSetCounter(_ecore_x_disp, counter, init);
24
25    values.trigger.counter = counter;
26    values.trigger.value_type = XSyncAbsolute;
27    XSyncIntToValue(&values.trigger.wait_value, 1);
28    values.trigger.test_type = XSyncPositiveComparison;
29
30    XSyncIntToValue(&values.delta,              1);
31
32    values.events = True;
33
34    alarm = XSyncCreateAlarm(_ecore_x_disp,
35                             XSyncCACounter |
36                             XSyncCAValueType |
37                             XSyncCAValue |
38                             XSyncCATestType |
39                             XSyncCADelta |
40                             XSyncCAEvents,
41                             &values);
42
43    ecore_x_sync();
44    return alarm;
45 } /* ecore_x_sync_alarm_new */
46
47 EAPI int
48 ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm)
49 {
50    LOGFN(__FILE__, __LINE__, __FUNCTION__);
51    return XSyncDestroyAlarm(_ecore_x_disp, alarm);
52 } /* ecore_x_sync_alarm_free */
53
54 EAPI int
55 ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter, unsigned int *val)
56 {
57    XSyncValue value;
58
59    LOGFN(__FILE__, __LINE__, __FUNCTION__);
60    if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
61      {
62         *val = (unsigned int)XSyncValueLow32(value);
63         return 1;
64      }
65
66    return 0;
67 } /* ecore_x_sync_counter_query */
68
69 EAPI Ecore_X_Sync_Counter
70 ecore_x_sync_counter_new(int val)
71 {
72    XSyncCounter counter;
73    XSyncValue v;
74
75    LOGFN(__FILE__, __LINE__, __FUNCTION__);
76    XSyncIntToValue(&v, val);
77    counter = XSyncCreateCounter(_ecore_x_disp, v);
78    return counter;
79 } /* ecore_x_sync_counter_new */
80
81 EAPI void
82 ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter)
83 {
84    LOGFN(__FILE__, __LINE__, __FUNCTION__);
85    XSyncDestroyCounter(_ecore_x_disp, counter);
86 } /* ecore_x_sync_counter_free */
87
88 EAPI void
89 ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter, int by)
90 {
91    XSyncValue v;
92
93    LOGFN(__FILE__, __LINE__, __FUNCTION__);
94    XSyncIntToValue(&v, by);
95    XSyncChangeCounter(_ecore_x_disp, counter, v);
96 } /* ecore_x_sync_counter_inc */
97
98 EAPI void
99 ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter, int val)
100 {
101    XSyncWaitCondition cond;
102    XSyncValue v, v2;
103
104    LOGFN(__FILE__, __LINE__, __FUNCTION__);
105    XSyncQueryCounter(_ecore_x_disp, counter, &v);
106    XSyncIntToValue(&v,  val);
107    XSyncIntToValue(&v2, val + 1);
108    cond.trigger.counter = counter;
109    cond.trigger.value_type = XSyncAbsolute;
110    cond.trigger.wait_value = v;
111    cond.trigger.test_type = XSyncPositiveComparison;
112    cond.event_threshold = v2;
113    XSyncAwait(_ecore_x_disp, &cond, 1);
114 //   XSync(_ecore_x_disp, False); // dont need this
115 } /* ecore_x_sync_counter_val_wait */
116