Index: gpu/command_buffer/client/atomicops.cc |
diff --git a/gpu/command_buffer/client/atomicops.cc b/gpu/command_buffer/client/atomicops.cc |
index 142ab9c6f6448d0532333e247e9629f6d366e0e5..318c337fb643ce168f47a4a3a7b2e218561178a3 100644 |
--- a/gpu/command_buffer/client/atomicops.cc |
+++ b/gpu/command_buffer/client/atomicops.cc |
@@ -3,9 +3,13 @@ |
// found in the LICENSE file. |
#include "../client/atomicops.h" |
+#include "../common/logging.h" |
#if !defined(__native_client__) |
#include "base/atomicops.h" |
+#include "base/synchronization/lock.h" |
+#else |
+#include <pthread.h> |
#endif |
namespace gpu { |
@@ -18,5 +22,78 @@ void MemoryBarrier() { |
#endif |
} |
+#if defined(__native_client__) |
+ |
+class LockImpl { |
+ public: |
+ LockImpl() |
+ : acquired_(false) { |
+ pthread_mutex_init(&mutex_, NULL); |
+ } |
+ |
+ ~LockImpl() { |
+ pthread_mutex_destroy(&mutex_); |
+ } |
+ |
+ void Acquire() { |
+ pthread_mutex_lock(&mutex_); |
+ acquired_ = true; |
+ } |
+ |
+ void Release() { |
+ GPU_DCHECK(acquired_); |
+ acquired_ = false; |
+ pthread_mutex_unlock(&mutex_); |
+ } |
+ |
+ bool Try() { |
+ bool acquired = pthread_mutex_trylock(&mutex_) == 0; |
+ if (acquired) { |
+ acquired_ = true; |
+ } |
+ return acquired; |
+ } |
+ |
+ void AssertAcquired() const { |
+ GPU_DCHECK(acquired_); |
+ } |
+ |
+ private: |
+ bool acquired_; |
+ pthread_mutex_t mutex_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(LockImpl); |
+}; |
+ |
+#else // !__native_client__ |
+ |
+class LockImpl : public base::Lock { |
+}; |
+ |
+#endif // !__native_client__ |
+ |
+Lock::Lock() |
+ : lock_(new LockImpl()) { |
+} |
+ |
+Lock::~Lock() { |
+} |
+ |
+void Lock::Acquire() { |
+ lock_->Acquire(); |
+} |
+ |
+void Lock::Release() { |
+ lock_->Release(); |
+} |
+ |
+bool Lock::Try() { |
+ return lock_->Try(); |
+} |
+ |
+void Lock::AssertAcquired() const { |
+ return lock_->AssertAcquired(); |
+} |
+ |
} // namespace gpu |