posix: Avoid static initializers in static/global mutexes
authordigit@google.com <digit@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 26 Jan 2012 21:26:40 +0000 (21:26 +0000)
committerdigit@google.com <digit@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 26 Jan 2012 21:26:40 +0000 (21:26 +0000)
commit1771cbf43d9a1334e3d870c635b4215bb888dd98
treeb32203ccd81d3747e2cc36d5e71ee7cadcff03fa
parent72b55be3f3448287e8ff6fe83633edadfb60f59a
posix: Avoid static initializers in static/global mutexes

This patch removes static initializers related to static and
global mutexes from the final library's machine code when
building on a pthread-capable system.

We use PTHREAD_MUTEX_INITIALIZER to perform POD-style
initialization. You need a line like the following to declare
a global mutex with it:

    SkBaseMutex gMutex = { PTHREAD_MUTEX_INITIALIZER };

We introduce the SK_DECLARE_STATIC_MUTEX and SK_DECLARE_GLOBAL_MUTEX
macros to be able to declare static/global mutexes in the source tree
uniformly.

SkMutex is now defined as a sub-class of SkBaseMutex, with standard
construction/destruction semantics. This is useful if the mutex
object is a member of another C++ class, or allocated dynamically.

We also modify a few places to refer to SkBaseMutex instead of a
SkMutex, where it makes sense. Generally speaking, client code
should hold and use pointers to SkBaseMutex whenever they can
now.

We defined a new built-time macro named SK_USE_POSIX_THREADS
to indicate that we're using a pthread-based SkThread.h
interface. The macro will also be used in future patches
to implement other helper thread synchronization classes.

Finally, we inline the acquire() and release() functions in the
case of Posix to improve performance a bit.

Running: 'bench -repeat 10 -match mutex' on an Android device or
a 2.4GHz Xeon Linux desktop shows the following improvements:

                      Before     After

        Galaxy Nexus    1.64      1.45
        Nexus S         1.47      1.16
        Xoom            1.86      1.66
        Xeon            0.36      0.31

This removes 5 static mutex initializers from the library
Review URL: https://codereview.appspot.com/5501066

git-svn-id: http://skia.googlecode.com/svn/trunk@3091 2bbb7eff-a529-9590-31e7-b0007b416f81
29 files changed:
bench/MutexBench.cpp
gyp/common_conditions.gypi
include/core/SkPixelRef.h
include/core/SkThread.h
include/core/SkThread_platform.h
include/pdf/SkPDFFont.h
include/pdf/SkPDFGraphicState.h
include/pdf/SkPDFShader.h
obsolete/SkGLDevice.cpp
src/core/SkMemory_stdlib.cpp
src/core/SkPixelRef.cpp
src/core/SkTypefaceCache.cpp
src/effects/SkGradientShader.cpp
src/gpu/SkGrTexturePixelRef.cpp
src/images/SkImageRef.cpp
src/images/SkImageRef_GlobalPool.cpp
src/pdf/SkPDFFont.cpp
src/pdf/SkPDFGraphicState.cpp
src/pdf/SkPDFShader.cpp
src/ports/SkFontHost_FreeType.cpp
src/ports/SkFontHost_android.cpp
src/ports/SkFontHost_fontconfig.cpp
src/ports/SkFontHost_linux.cpp
src/ports/SkFontHost_mac_atsui.cpp
src/ports/SkFontHost_mac_coretext.cpp
src/ports/SkFontHost_simple.cpp
src/ports/SkFontHost_win.cpp
src/ports/SkThread_pthread.cpp
src/views/SkEventSink.cpp