1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef GPU_COMMAND_BUFFER_CLIENT_ATOMICOPS_H_ 6 #define GPU_COMMAND_BUFFER_CLIENT_ATOMICOPS_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "gpu/command_buffer/common/types.h" 10 #include "gpu/gpu_export.h" 11 12 namespace gpu { 13 14 GPU_EXPORT void MemoryBarrier(); 15 16 class LockImpl; 17 class GPU_EXPORT Lock { 18 public: 19 Lock(); 20 ~Lock(); 21 void Acquire(); 22 void Release(); 23 bool Try(); 24 void AssertAcquired() const; 25 26 private: 27 scoped_ptr<LockImpl> lock_; 28 29 DISALLOW_COPY_AND_ASSIGN(Lock); 30 }; 31 32 // A helper class that acquires the given Lock while the AutoLock is in scope. 33 class GPU_EXPORT AutoLock { 34 public: 35 explicit AutoLock(Lock& lock) : lock_(lock) { 36 lock_.Acquire(); 37 } 38 39 ~AutoLock() { 40 lock_.AssertAcquired(); 41 lock_.Release(); 42 } 43 44 private: 45 Lock& lock_; 46 DISALLOW_COPY_AND_ASSIGN(AutoLock); 47 }; 48 49 } // namespace gpu 50 51 #endif // GPU_COMMAND_BUFFER_CLIENT_ATOMICOPS_H_ 52