add the missing functions

ecore_x_sync_counter_new()
ecore_x_sync_counter_free()
ecore_x_sync_counter_inc()
ecore_x_sync_counter_val_wait()


SVN revision: 49669
This commit is contained in:
Vincent Torri 2010-06-14 19:21:11 +00:00
parent 5d148e55b1
commit 635ac723f6
1 changed files with 67 additions and 0 deletions

View File

@ -157,3 +157,70 @@ ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter, unsigned int *val)
return 0;
}
EAPI Ecore_X_Sync_Counter
ecore_x_sync_counter_new(int val)
{
#ifdef ECORE_XCB_SYNC
xcb_sync_counter_t counter;
xcb_sync_int64_t v;
counter = xcb_generate_id(_ecore_xcb_conn);
v.hi = (val < 0) ? ~0 : 0;
v.lo = val;
xcb_sync_create_counter(_ecore_xcb_conn, counter, v);
return counter;
#else /* ! ECORE_XCB_SYNC */
return 0;
#endif /* ! ECORE_XCB_SYNC */
}
EAPI void
ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter)
{
#ifdef ECORE_XCB_SYNC
xcb_sync_destroy_counter(_ecore_xcb_conn, counter);
#endif /* ECORE_XCB_SYNC */
}
EAPI void
ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter, int by)
{
#ifdef ECORE_XCB_SYNC
xcb_sync_int64_t v;
v.hi = (by < 0) ? ~0 : 0;
v.lo = by;
xcb_sync_change_counter(_ecore_xcb_conn, counter, v);
#endif /* ECORE_XCB_SYNC */
}
EAPI void
ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter, int val)
{
#ifdef ECORE_XCB_SYNC
xcb_sync_query_counter_cookie_t cookie;
xcb_sync_query_counter_reply_t *reply;
xcb_sync_int64_t v1;
xcb_sync_int64_t v2;
xcb_sync_waitcondition_t cond;
/* what's the purpose of that call ?? as the value is erased... */
cookie = xcb_sync_query_counter_unchecked(_ecore_xcb_conn, counter);
reply = xcb_sync_query_counter_reply(_ecore_xcb_conn, cookie, NULL);
v1 = reply->counter_value;
free(reply);
v1.hi = (val < 0) ? ~0 : 0;
v1.lo = val;
v2.hi = ((val + 1) < 0) ? ~0 : 0;
v2.lo = val + 1;
cond.trigger.counter = counter;
cond.trigger.wait_type = XCB_SYNC_VALUETYPE_ABSOLUTE;
cond.trigger.wait_value = v1;
cond.trigger.test_type = XCB_SYNC_TESTTYPE_POSITIVE_COMPARISON;
cond.event_threshold = v2;
xcb_sync_await(_ecore_xcb_conn, 1, (const xcb_sync_waitcondition_t *)&cond);
#endif /* ECORE_XCB_SYNC */
}