| Index: include/private/SkSpinlock.h
|
| diff --git a/include/private/SkSpinlock.h b/include/private/SkSpinlock.h
|
| index ef52ab013a0d08c6ea5f3f7d7d2d57f20c8483a7..a049f1f726a8db827e6610c026ce18aa43c15922 100644
|
| --- a/include/private/SkSpinlock.h
|
| +++ b/include/private/SkSpinlock.h
|
| @@ -5,40 +5,30 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -// This file is not part of the public Skia API.
|
| -
|
| #ifndef SkSpinlock_DEFINED
|
| #define SkSpinlock_DEFINED
|
|
|
| -#include "../private/SkAtomics.h"
|
| -
|
| -#define SK_DECLARE_STATIC_SPINLOCK(name) namespace {} static SkPODSpinlock name
|
| +#include <atomic>
|
|
|
| -// This class has no constructor and must be zero-initialized (the macro above does this).
|
| -class SK_API SkPODSpinlock {
|
| +class SkSpinlock {
|
| public:
|
| void acquire() {
|
| - // To act as a mutex, we need an acquire barrier if we take the lock.
|
| - if (sk_atomic_exchange(&fLocked, true, sk_memory_order_acquire)) {
|
| + // To act as a mutex, we need an acquire barrier when we acquire the lock.
|
| + if (fLocked.exchange(true, std::memory_order_acquire)) {
|
| // Lock was contended. Fall back to an out-of-line spin loop.
|
| this->contendedAcquire();
|
| }
|
| }
|
|
|
| void release() {
|
| - // To act as a mutex, we need a release barrier.
|
| - sk_atomic_store(&fLocked, false, sk_memory_order_release);
|
| + // To act as a mutex, we need a release barrier when we release the lock.
|
| + fLocked.store(false, std::memory_order_release);
|
| }
|
|
|
| private:
|
| void contendedAcquire();
|
| - bool fLocked;
|
| -};
|
|
|
| -// For non-global-static use cases, this is normally what you want.
|
| -class SkSpinlock : public SkPODSpinlock {
|
| -public:
|
| - SkSpinlock() { this->release(); }
|
| + std::atomic<bool> fLocked{false};
|
| };
|
|
|
| #endif//SkSpinlock_DEFINED
|
|
|