diff options
Diffstat (limited to 'libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c')
-rw-r--r-- | libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c new file mode 100644 index 0000000..e49fede --- /dev/null +++ b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_sync.c | |||
@@ -0,0 +1,159 @@ | |||
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 Eina_Bool | ||
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 Eina_Bool | ||
55 | ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter, | ||
56 | unsigned int *val) | ||
57 | { | ||
58 | XSyncValue value; | ||
59 | |||
60 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
61 | if (XSyncQueryCounter(_ecore_x_disp, counter, &value)) | ||
62 | { | ||
63 | *val = (unsigned int)XSyncValueLow32(value); | ||
64 | return EINA_TRUE; | ||
65 | } | ||
66 | |||
67 | return EINA_FALSE; | ||
68 | } /* ecore_x_sync_counter_query */ | ||
69 | |||
70 | EAPI Ecore_X_Sync_Counter | ||
71 | ecore_x_sync_counter_new(int val) | ||
72 | { | ||
73 | XSyncCounter counter; | ||
74 | XSyncValue v; | ||
75 | |||
76 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
77 | XSyncIntToValue(&v, val); | ||
78 | counter = XSyncCreateCounter(_ecore_x_disp, v); | ||
79 | return counter; | ||
80 | } /* ecore_x_sync_counter_new */ | ||
81 | |||
82 | EAPI void | ||
83 | ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter) | ||
84 | { | ||
85 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
86 | XSyncDestroyCounter(_ecore_x_disp, counter); | ||
87 | } /* ecore_x_sync_counter_free */ | ||
88 | |||
89 | EAPI void | ||
90 | ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter, | ||
91 | int by) | ||
92 | { | ||
93 | XSyncValue v; | ||
94 | |||
95 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
96 | XSyncIntToValue(&v, by); | ||
97 | XSyncChangeCounter(_ecore_x_disp, counter, v); | ||
98 | } /* ecore_x_sync_counter_inc */ | ||
99 | |||
100 | EAPI void | ||
101 | ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter, | ||
102 | int val) | ||
103 | { | ||
104 | XSyncWaitCondition cond; | ||
105 | XSyncValue v, v2; | ||
106 | |||
107 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
108 | XSyncQueryCounter(_ecore_x_disp, counter, &v); | ||
109 | XSyncIntToValue(&v, val); | ||
110 | XSyncIntToValue(&v2, val + 1); | ||
111 | cond.trigger.counter = counter; | ||
112 | cond.trigger.value_type = XSyncAbsolute; | ||
113 | cond.trigger.wait_value = v; | ||
114 | cond.trigger.test_type = XSyncPositiveComparison; | ||
115 | cond.event_threshold = v2; | ||
116 | XSyncAwait(_ecore_x_disp, &cond, 1); | ||
117 | // XSync(_ecore_x_disp, False); // dont need this | ||
118 | } /* ecore_x_sync_counter_val_wait */ | ||
119 | |||
120 | EAPI void | ||
121 | ecore_x_sync_counter_set(Ecore_X_Sync_Counter counter, | ||
122 | int val) | ||
123 | { | ||
124 | XSyncValue v; | ||
125 | |||
126 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
127 | XSyncIntToValue(&v, val); | ||
128 | XSyncSetCounter(_ecore_x_disp, counter, v); | ||
129 | } | ||
130 | |||
131 | EAPI void | ||
132 | ecore_x_sync_counter_2_set(Ecore_X_Sync_Counter counter, | ||
133 | int val_hi, | ||
134 | unsigned int val_lo) | ||
135 | { | ||
136 | XSyncValue v; | ||
137 | |||
138 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
139 | XSyncIntsToValue(&v, val_lo, val_hi); | ||
140 | XSyncSetCounter(_ecore_x_disp, counter, v); | ||
141 | } | ||
142 | |||
143 | EAPI Eina_Bool | ||
144 | ecore_x_sync_counter_2_query(Ecore_X_Sync_Counter counter, | ||
145 | int *val_hi, | ||
146 | unsigned int *val_lo) | ||
147 | { | ||
148 | XSyncValue value; | ||
149 | |||
150 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
151 | if (XSyncQueryCounter(_ecore_x_disp, counter, &value)) | ||
152 | { | ||
153 | *val_lo = (unsigned int)XSyncValueLow32(value); | ||
154 | *val_hi = (int)XSyncValueHigh32(value); | ||
155 | return EINA_TRUE; | ||
156 | } | ||
157 | return EINA_FALSE; | ||
158 | } | ||
159 | |||