Skip to content

Commit

Permalink
Don't require -DSK_USE_POSIX_THREADS.
Browse files Browse the repository at this point in the history
To compile SkCondVar, we already require either pthreads or Windows.  This
simplifies that code to not need SK_USE_POSIX_THREADS to be explicitly defined.
We'll just look to see if we're targeting Windows, and if not, assume pthreads.

Both before and after this CL, that code will fail to compile if we're not on
Windows and don't have pthreads.

BUG=skia:

Review URL: https://codereview.chromium.org/869443003
  • Loading branch information
mtklein authored and Commit bot committed Jan 22, 2015
1 parent 55e88b2 commit 4daa6f6
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 51 deletions.
8 changes: 0 additions & 8 deletions gyp/common_conditions.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -632,14 +632,6 @@
},
],

# We can POD-style initialization of static mutexes to avoid generating
# static initializers if we're using a pthread-compatible thread interface.
[ 'skia_os != "win"', {
'defines': [
'SK_USE_POSIX_THREADS',
],
}],

[ 'skia_moz2d', {
'defines': [
# add flags here (e.g. SK_SUPPORT_LEGACY_...) needed by moz2d
Expand Down
15 changes: 7 additions & 8 deletions src/core/SkPixelRef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,14 @@
#include "SkPixelRef.h"
#include "SkThread.h"

#ifdef SK_USE_POSIX_THREADS
#ifdef SK_BUILD_FOR_WIN32
// We don't have SK_BASE_MUTEX_INIT on Windows.

// must be a power-of-2. undef to just use 1 mutex
#define PIXELREF_MUTEX_RING_COUNT 32
static SkBaseMutex gPixelRefMutexRing[PIXELREF_MUTEX_RING_COUNT];

#else
static SkBaseMutex gPixelRefMutexRing[] = {
SK_BASE_MUTEX_INIT, SK_BASE_MUTEX_INIT,
SK_BASE_MUTEX_INIT, SK_BASE_MUTEX_INIT,
Expand All @@ -31,16 +37,9 @@
SK_BASE_MUTEX_INIT, SK_BASE_MUTEX_INIT,
SK_BASE_MUTEX_INIT, SK_BASE_MUTEX_INIT,
};

// must be a power-of-2. undef to just use 1 mutex
#define PIXELREF_MUTEX_RING_COUNT SK_ARRAY_COUNT(gPixelRefMutexRing)

#else // not pthreads

// must be a power-of-2. undef to just use 1 mutex
#define PIXELREF_MUTEX_RING_COUNT 32
static SkBaseMutex gPixelRefMutexRing[PIXELREF_MUTEX_RING_COUNT];

#endif

static SkBaseMutex* get_default_mutex() {
Expand Down
52 changes: 25 additions & 27 deletions src/utils/SkCondVar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
#endif

bool SkCondVar::Supported() {
#ifdef SK_USE_POSIX_THREADS
return true;
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
// If we're >= Vista we'll find these functions. Otherwise (XP) SkCondVar is not supported.
HMODULE kernel32 = GetModuleHandleA("kernel32.dll");
set_fn_ptr(&initialize_condition_variable,
Expand All @@ -36,70 +34,70 @@ bool SkCondVar::Supported() {
&& wake_condition_variable
&& wake_all_condition_variable;
#else
return false;
return true;
#endif
}

SkCondVar::SkCondVar() {
#ifdef SK_USE_POSIX_THREADS
pthread_mutex_init(&fMutex, NULL /* default mutex attr */);
pthread_cond_init(&fCond, NULL /* default cond attr */);
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
InitializeCriticalSection(&fCriticalSection);
SkASSERT(initialize_condition_variable);
initialize_condition_variable(&fCondition);
#else
pthread_mutex_init(&fMutex, NULL /* default mutex attr */);
pthread_cond_init(&fCond, NULL /* default cond attr */);
#endif
}

SkCondVar::~SkCondVar() {
#ifdef SK_USE_POSIX_THREADS
pthread_mutex_destroy(&fMutex);
pthread_cond_destroy(&fCond);
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
DeleteCriticalSection(&fCriticalSection);
// No need to clean up fCondition.
#else
pthread_mutex_destroy(&fMutex);
pthread_cond_destroy(&fCond);
#endif
}

void SkCondVar::lock() {
#ifdef SK_USE_POSIX_THREADS
pthread_mutex_lock(&fMutex);
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
EnterCriticalSection(&fCriticalSection);
#else
pthread_mutex_lock(&fMutex);
#endif
}

void SkCondVar::unlock() {
#ifdef SK_USE_POSIX_THREADS
pthread_mutex_unlock(&fMutex);
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
LeaveCriticalSection(&fCriticalSection);
#else
pthread_mutex_unlock(&fMutex);
#endif
}

void SkCondVar::wait() {
#ifdef SK_USE_POSIX_THREADS
pthread_cond_wait(&fCond, &fMutex);
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
SkASSERT(sleep_condition_variable);
sleep_condition_variable(&fCondition, &fCriticalSection, INFINITE);
#else
pthread_cond_wait(&fCond, &fMutex);
#endif
}

void SkCondVar::signal() {
#ifdef SK_USE_POSIX_THREADS
pthread_cond_signal(&fCond);
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
SkASSERT(wake_condition_variable);
wake_condition_variable(&fCondition);
#else
pthread_cond_signal(&fCond);
#endif
}

void SkCondVar::broadcast() {
#ifdef SK_USE_POSIX_THREADS
pthread_cond_broadcast(&fCond);
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
SkASSERT(wake_all_condition_variable);
wake_all_condition_variable(&fCondition);
#else
pthread_cond_broadcast(&fCond);
#endif
}
14 changes: 6 additions & 8 deletions src/utils/SkCondVar.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@

#include "SkTypes.h"

#ifdef SK_USE_POSIX_THREADS
#include <pthread.h>
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
#include <windows.h>
#else
#error "SkCondVar requires pthreads or Windows."
#include <pthread.h>
#endif

/**
Expand Down Expand Up @@ -64,12 +62,12 @@ class SkCondVar {
void broadcast();

private:
#ifdef SK_USE_POSIX_THREADS
pthread_mutex_t fMutex;
pthread_cond_t fCond;
#elif defined(SK_BUILD_FOR_WIN32)
#ifdef SK_BUILD_FOR_WIN32
CRITICAL_SECTION fCriticalSection;
CONDITION_VARIABLE fCondition;
#else
pthread_mutex_t fMutex;
pthread_cond_t fCond;
#endif
};

Expand Down

0 comments on commit 4daa6f6

Please sign in to comment.