Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Side by Side Diff: third_party/WebKit/Source/wtf/ThreadingPrimitives.h

Issue 2764833002: Move files in wtf/ to platform/wtf/ (Part 7). (Closed)
Patch Set: Rebase. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/wtf/Threading.h ('k') | third_party/WebKit/Source/wtf/TreeNode.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be
3 * Copyright (C) 2007 Justin Haygood (jhaygood@reaktix.com) 3 // found in the LICENSE file.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
15 * its contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 */
30 4
31 #ifndef ThreadingPrimitives_h 5 #include "platform/wtf/ThreadingPrimitives.h"
32 #define ThreadingPrimitives_h
33 6
34 #include "wtf/Allocator.h" 7 // The contents of this header was moved to platform/wtf as part of
35 #include "wtf/Assertions.h" 8 // WTF migration project. See the following post for details:
36 #include "wtf/Locker.h" 9 // https://groups.google.com/a/chromium.org/d/msg/blink-dev/tLdAZCTlcAA/bYXVT8gY CAAJ
37 #include "wtf/Noncopyable.h"
38 #include "wtf/WTFExport.h"
39
40 #if OS(WIN)
41 #include <windows.h>
42 #endif
43
44 #if OS(POSIX)
45 #include <pthread.h>
46 #endif
47
48 namespace WTF {
49
50 #if OS(POSIX)
51 struct PlatformMutex {
52 pthread_mutex_t m_internalMutex;
53 #if DCHECK_IS_ON()
54 size_t m_recursionCount;
55 #endif
56 };
57 typedef pthread_cond_t PlatformCondition;
58 #elif OS(WIN)
59 struct PlatformMutex {
60 CRITICAL_SECTION m_internalMutex;
61 size_t m_recursionCount;
62 };
63 struct PlatformCondition {
64 size_t m_waitersGone;
65 size_t m_waitersBlocked;
66 size_t m_waitersToUnblock;
67 HANDLE m_blockLock;
68 HANDLE m_blockQueue;
69 HANDLE m_unblockLock;
70
71 bool timedWait(PlatformMutex&, DWORD durationMilliseconds);
72 void signal(bool unblockAll);
73 };
74 #else
75 typedef void* PlatformMutex;
76 typedef void* PlatformCondition;
77 #endif
78
79 class WTF_EXPORT MutexBase {
80 WTF_MAKE_NONCOPYABLE(MutexBase);
81 USING_FAST_MALLOC(MutexBase);
82
83 public:
84 ~MutexBase();
85
86 void lock();
87 void unlock();
88 #if DCHECK_IS_ON()
89 bool locked() { return m_mutex.m_recursionCount > 0; }
90 #endif
91
92 public:
93 PlatformMutex& impl() { return m_mutex; }
94
95 protected:
96 MutexBase(bool recursive);
97
98 PlatformMutex m_mutex;
99 };
100
101 class WTF_EXPORT Mutex : public MutexBase {
102 public:
103 Mutex() : MutexBase(false) {}
104 bool tryLock();
105 };
106
107 class WTF_EXPORT RecursiveMutex : public MutexBase {
108 public:
109 RecursiveMutex() : MutexBase(true) {}
110 bool tryLock();
111 };
112
113 typedef Locker<MutexBase> MutexLocker;
114
115 class MutexTryLocker final {
116 STACK_ALLOCATED();
117 WTF_MAKE_NONCOPYABLE(MutexTryLocker);
118
119 public:
120 MutexTryLocker(Mutex& mutex) : m_mutex(mutex), m_locked(mutex.tryLock()) {}
121 ~MutexTryLocker() {
122 if (m_locked)
123 m_mutex.unlock();
124 }
125
126 bool locked() const { return m_locked; }
127
128 private:
129 Mutex& m_mutex;
130 bool m_locked;
131 };
132
133 class WTF_EXPORT ThreadCondition final {
134 USING_FAST_MALLOC(ThreadCondition); // Only HeapTest.cpp requires.
135 WTF_MAKE_NONCOPYABLE(ThreadCondition);
136
137 public:
138 ThreadCondition();
139 ~ThreadCondition();
140
141 void wait(MutexBase&);
142 // Returns true if the condition was signaled before absoluteTime, false if
143 // the absoluteTime was reached or is in the past.
144 // The absoluteTime is in seconds, starting on January 1, 1970. The time is
145 // assumed to use the same time zone as WTF::currentTime().
146 bool timedWait(MutexBase&, double absoluteTime);
147 void signal();
148 void broadcast();
149
150 private:
151 PlatformCondition m_condition;
152 };
153
154 #if OS(WIN)
155 // The absoluteTime is in seconds, starting on January 1, 1970. The time is
156 // assumed to use the same time zone as WTF::currentTime().
157 // Returns an interval in milliseconds suitable for passing to one of the Win32
158 // wait functions (e.g., ::WaitForSingleObject).
159 DWORD absoluteTimeToWaitTimeoutInterval(double absoluteTime);
160 #endif
161
162 } // namespace WTF
163
164 using WTF::MutexBase;
165 using WTF::Mutex;
166 using WTF::RecursiveMutex;
167 using WTF::MutexLocker;
168 using WTF::MutexTryLocker;
169 using WTF::ThreadCondition;
170
171 #if OS(WIN)
172 using WTF::absoluteTimeToWaitTimeoutInterval;
173 #endif
174
175 #endif // ThreadingPrimitives_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/Threading.h ('k') | third_party/WebKit/Source/wtf/TreeNode.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698