sal/inc/osl/interlck.h | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-)
New commits: commit 576ba0c0c082dfe50c4b97292093b833443c3756 Author: Stephan Bergmann <sberg...@redhat.com> Date: Mon Sep 17 14:45:47 2012 +0200 Some comment clean up Change-Id: I33fbe68b17e9a1c457b37c6d81619f2df67fbe8d diff --git a/sal/inc/osl/interlck.h b/sal/inc/osl/interlck.h index f8cd56e..792ea55 100644 --- a/sal/inc/osl/interlck.h +++ b/sal/inc/osl/interlck.h @@ -41,50 +41,51 @@ extern "C" { typedef sal_Int32 oslInterlockedCount; /** Increments the count variable addressed by pCount. - @param pCount Address of counter variable - @return The result of the operation is zero, the value of the count variable. + @param pCount Address of count variable + @return The adjusted value of the count variable. */ SAL_DLLPUBLIC oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount); /** Decrement the count variable addressed by pCount. - @param pCount Address of counter variable - @return The result of the operation is the new value is of the count variable. + @param pCount Address of count variable + @return The adjusted value of the count variable. */ SAL_DLLPUBLIC oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount); -/** Increments the count variable addressed by pCount. - @param pCount Address of counter variable - @return The result of the operation is zero, the value of the count variable. -*/ - /// @cond INTERNAL /** Increments the count variable addressed by p. - @param p Address of counter variable + @attention This functionality should only be used internally within LibreOffice. + @param p Address of count variable @return The adjusted value of the count variable. + + @since LibreOffice 3.7 */ #if defined( HAVE_GCC_BUILTIN_ATOMIC ) # define osl_atomic_increment(p) __sync_add_and_fetch((p), 1) #else -# define osl_atomic_increment(p) osl_incrementInterlockedCount(p) +# define osl_atomic_increment(p) osl_incrementInterlockedCount((p)) #endif /** Decrement the count variable addressed by p. - @param p Address of counter variable + @attention This functionality should only be used internally within LibreOffice. + @param p Address of count variable @return The adjusted value of the count variable. + + @since LibreOffice 3.7 */ #if defined( HAVE_GCC_BUILTIN_ATOMIC ) # define osl_atomic_decrement(p) __sync_sub_and_fetch((p), 1) #else -# define osl_atomic_decrement(p) osl_decrementInterlockedCount(p) +# define osl_atomic_decrement(p) osl_decrementInterlockedCount((p)) #endif /// @endcond commit afbc57927854c423e12206c048bbe7c285a4d9a6 Author: Norbert Thiebaud <nthieb...@gmail.com> Date: Sun Sep 16 01:59:07 2012 -0500 add osl_atomic_* api to allow for inlined atomic increment/decrement atomic increment/decrement is provided by osl_increment/decrementInterlockedCount() but that is a exported dll function, so it cannot be inlined. valgrind analysis of a run, loading a medium sized spreadsheet, shows that these 2 functions were called 3.5 millions times for a total cost of 55 millions of instructions... a cost of 8 instructions per call, which is at least a 300% overhead since an atomic inc/dec is 2 instructions iow we could save about 1% of the total instruction count of that run(4.6B) We cannot change the existing api, as this would break ABI. but we can add a new api. and migrate internal user to it. osl_atomic_decrement/osl_atomic_increment do the same task, than osl_*IntelockedCount() but do that inlined if possible. Note that this version only optimize the case GCC with atomic built-in. but support for other case should not be very hard. follows-up patches will replace the use of the osl_*InterlockedCount() in the product with their osl_atomic_* equivalent. Change-Id: If4dcbf94ea6f62eb6d55d30613fe65878ffb8023 Signed-off-by: Stephan Bergmann <sberg...@redhat.com> diff --git a/sal/inc/osl/interlck.h b/sal/inc/osl/interlck.h index 858f99f..f8cd56e 100644 --- a/sal/inc/osl/interlck.h +++ b/sal/inc/osl/interlck.h @@ -52,10 +52,48 @@ SAL_DLLPUBLIC oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInte */ SAL_DLLPUBLIC oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount); + +/** Increments the count variable addressed by pCount. + @param pCount Address of counter variable + @return The result of the operation is zero, the value of the count variable. +*/ + +/// @cond INTERNAL + +/** Increments the count variable addressed by p. + @param p Address of counter variable + @attention This functionality should only be used internally within + LibreOffice. + + @return The adjusted value of the count variable. +*/ +#if defined( HAVE_GCC_BUILTIN_ATOMIC ) +# define osl_atomic_increment(p) __sync_add_and_fetch((p), 1) +#else +# define osl_atomic_increment(p) osl_incrementInterlockedCount(p) +#endif + + +/** Decrement the count variable addressed by p. + @param p Address of counter variable + @attention This functionality should only be used internally within + LibreOffice. + + @return The adjusted value of the count variable. +*/ +#if defined( HAVE_GCC_BUILTIN_ATOMIC ) +# define osl_atomic_decrement(p) __sync_sub_and_fetch((p), 1) +#else +# define osl_atomic_decrement(p) osl_decrementInterlockedCount(p) +#endif + +/// @endcond + #ifdef __cplusplus } #endif + #endif /* _OSL_INTERLOCK_H_ */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits