dix: optimize CallCallbacks
Move the basic sanity checking to an inline wrapper, which avoids the function call overhead if the callback list is empty. On an XACEful server on a 2.4GHz Core 2 Duo: 1 2 Operation -------- ----------------- ----------------- 20000000.0 25100000.0 ( 1.25) X protocol NoOperation Signed-off-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
e418cd332c
commit
6274dca9d9
|
@ -729,7 +729,7 @@ _DeleteCallback(
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
_CallCallbacks(
|
_CallCallbacks(
|
||||||
CallbackListPtr *pcbl,
|
CallbackListPtr *pcbl,
|
||||||
pointer call_data)
|
pointer call_data)
|
||||||
|
@ -870,13 +870,6 @@ DeleteCallback(CallbackListPtr *pcbl, CallbackProcPtr callback, pointer data)
|
||||||
return _DeleteCallback(pcbl, callback, data);
|
return _DeleteCallback(pcbl, callback, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
CallCallbacks(CallbackListPtr *pcbl, pointer call_data)
|
|
||||||
{
|
|
||||||
if (!pcbl || !*pcbl) return;
|
|
||||||
_CallCallbacks(pcbl, call_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
DeleteCallbackList(CallbackListPtr *pcbl)
|
DeleteCallbackList(CallbackListPtr *pcbl)
|
||||||
{
|
{
|
||||||
|
|
|
@ -75,10 +75,17 @@ extern _X_EXPORT Bool DeleteCallback(
|
||||||
CallbackProcPtr /*callback*/,
|
CallbackProcPtr /*callback*/,
|
||||||
pointer /*data*/);
|
pointer /*data*/);
|
||||||
|
|
||||||
extern _X_EXPORT void CallCallbacks(
|
extern _X_EXPORT void _CallCallbacks(
|
||||||
CallbackListPtr * /*pcbl*/,
|
CallbackListPtr * /*pcbl*/,
|
||||||
pointer /*call_data*/);
|
pointer /*call_data*/);
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
CallCallbacks(CallbackListPtr *pcbl, pointer call_data)
|
||||||
|
{
|
||||||
|
if (!pcbl || !*pcbl) return;
|
||||||
|
_CallCallbacks(pcbl, call_data);
|
||||||
|
}
|
||||||
|
|
||||||
extern _X_EXPORT void DeleteCallbackList(
|
extern _X_EXPORT void DeleteCallbackList(
|
||||||
CallbackListPtr * /*pcbl*/);
|
CallbackListPtr * /*pcbl*/);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user