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
12namespace gpu {
13
14GPU_EXPORT void MemoryBarrier();
15
16class LockImpl;
17class 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.
33class 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