diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/include/utils/SkCondVar.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/include/utils/SkCondVar.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,68 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkCondVar_DEFINED +#define SkCondVar_DEFINED + +#ifdef SK_USE_POSIX_THREADS +#include +#elif defined(SK_BUILD_FOR_WIN32) +#include +#endif + +/** + * Condition variable for blocking access to shared data from other threads and + * controlling which threads are awake. + * + * Currently only supported on platforms with posix threads and Windows Vista and + * above. + */ +class SkCondVar { +public: + SkCondVar(); + ~SkCondVar(); + + /** + * Lock a mutex. Must be done before calling the other functions on this object. + */ + void lock(); + + /** + * Unlock the mutex. + */ + void unlock(); + + /** + * Pause the calling thread. Will be awoken when signal() or broadcast() is called. + * Must be called while lock() is held (but gives it up while waiting). Once awoken, + * the calling thread will hold the lock once again. + */ + void wait(); + + /** + * Wake one thread waiting on this condition. Must be called while lock() + * is held. + */ + void signal(); + + /** + * Wake all threads waiting on this condition. Must be called while lock() + * is held. + */ + void broadcast(); + +private: +#ifdef SK_USE_POSIX_THREADS + pthread_mutex_t fMutex; + pthread_cond_t fCond; +#elif defined(SK_BUILD_FOR_WIN32) + CRITICAL_SECTION fCriticalSection; + CONDITION_VARIABLE fCondition; +#endif +}; + +#endif