OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef BASE_TASK_SCHEDULER_SCHEDULER_LOCK_H | 5 #ifndef BASE_TASK_SCHEDULER_SCHEDULER_LOCK_H |
6 #define BASE_TASK_SCHEDULER_SCHEDULER_LOCK_H | 6 #define BASE_TASK_SCHEDULER_SCHEDULER_LOCK_H |
7 | 7 |
| 8 #include <memory> |
| 9 |
8 #include "base/base_export.h" | 10 #include "base/base_export.h" |
9 #include "base/macros.h" | 11 #include "base/macros.h" |
10 #include "base/memory/scoped_ptr.h" | |
11 #include "base/synchronization/condition_variable.h" | 12 #include "base/synchronization/condition_variable.h" |
12 #include "base/synchronization/lock.h" | 13 #include "base/synchronization/lock.h" |
13 #include "base/task_scheduler/scheduler_lock_impl.h" | 14 #include "base/task_scheduler/scheduler_lock_impl.h" |
14 | 15 |
15 namespace base { | 16 namespace base { |
16 namespace internal { | 17 namespace internal { |
17 | 18 |
18 // SchedulerLock should be used anywhere a lock would be used in the scheduler. | 19 // SchedulerLock should be used anywhere a lock would be used in the scheduler. |
19 // When DCHECK_IS_ON(), lock checking occurs. Otherwise, SchedulerLock is | 20 // When DCHECK_IS_ON(), lock checking occurs. Otherwise, SchedulerLock is |
20 // equivalent to base::Lock. | 21 // equivalent to base::Lock. |
(...skipping 13 matching lines...) Expand all Loading... |
34 // | 35 // |
35 // void Acquire() | 36 // void Acquire() |
36 // Acquires the lock. | 37 // Acquires the lock. |
37 // | 38 // |
38 // void Release() | 39 // void Release() |
39 // Releases the lock. | 40 // Releases the lock. |
40 // | 41 // |
41 // void AssertAcquired(). | 42 // void AssertAcquired(). |
42 // DCHECKs if the lock is not acquired. | 43 // DCHECKs if the lock is not acquired. |
43 // | 44 // |
44 // scoped_ptr<ConditionVariable> CreateConditionVariable() | 45 // std::unique_ptr<ConditionVariable> CreateConditionVariable() |
45 // Creates a condition variable using this as a lock. | 46 // Creates a condition variable using this as a lock. |
46 | 47 |
47 #if DCHECK_IS_ON() | 48 #if DCHECK_IS_ON() |
48 class SchedulerLock : public SchedulerLockImpl { | 49 class SchedulerLock : public SchedulerLockImpl { |
49 public: | 50 public: |
50 SchedulerLock() = default; | 51 SchedulerLock() = default; |
51 explicit SchedulerLock(const SchedulerLock* predecessor) | 52 explicit SchedulerLock(const SchedulerLock* predecessor) |
52 : SchedulerLockImpl(predecessor) {} | 53 : SchedulerLockImpl(predecessor) {} |
53 }; | 54 }; |
54 #else // DCHECK_IS_ON() | 55 #else // DCHECK_IS_ON() |
55 class SchedulerLock : public Lock { | 56 class SchedulerLock : public Lock { |
56 public: | 57 public: |
57 SchedulerLock() = default; | 58 SchedulerLock() = default; |
58 explicit SchedulerLock(const SchedulerLock*) {} | 59 explicit SchedulerLock(const SchedulerLock*) {} |
59 | 60 |
60 scoped_ptr<ConditionVariable> CreateConditionVariable() { | 61 std::unique_ptr<ConditionVariable> CreateConditionVariable() { |
61 return scoped_ptr<ConditionVariable>(new ConditionVariable(this)); | 62 return std::unique_ptr<ConditionVariable>(new ConditionVariable(this)); |
62 } | 63 } |
63 }; | 64 }; |
64 #endif // DCHECK_IS_ON() | 65 #endif // DCHECK_IS_ON() |
65 | 66 |
66 // Provides the same functionality as base::AutoLock for SchedulerLock. | 67 // Provides the same functionality as base::AutoLock for SchedulerLock. |
67 class AutoSchedulerLock { | 68 class AutoSchedulerLock { |
68 public: | 69 public: |
69 explicit AutoSchedulerLock(SchedulerLock& lock) : lock_(lock) { | 70 explicit AutoSchedulerLock(SchedulerLock& lock) : lock_(lock) { |
70 lock_.Acquire(); | 71 lock_.Acquire(); |
71 } | 72 } |
72 | 73 |
73 ~AutoSchedulerLock() { | 74 ~AutoSchedulerLock() { |
74 lock_.AssertAcquired(); | 75 lock_.AssertAcquired(); |
75 lock_.Release(); | 76 lock_.Release(); |
76 } | 77 } |
77 | 78 |
78 private: | 79 private: |
79 SchedulerLock& lock_; | 80 SchedulerLock& lock_; |
80 | 81 |
81 DISALLOW_COPY_AND_ASSIGN(AutoSchedulerLock); | 82 DISALLOW_COPY_AND_ASSIGN(AutoSchedulerLock); |
82 }; | 83 }; |
83 | 84 |
84 } // namespace internal | 85 } // namespace internal |
85 } // namespace base | 86 } // namespace base |
86 | 87 |
87 #endif // BASE_TASK_SCHEDULER_SCHEDULER_LOCK_H | 88 #endif // BASE_TASK_SCHEDULER_SCHEDULER_LOCK_H |
OLD | NEW |