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

Side by Side Diff: Source/heap/ThreadState.h

Issue 113693002: [oilpan] Remove ThreadAffinity::MainThreadOnly Base URL: svn://svn.chromium.org/blink/branches/oilpan
Patch Set: Remove threading affinity Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/heap/ThreadState.cpp » ('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 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 typedef const uint8_t* ConstAddress; 45 typedef const uint8_t* ConstAddress;
46 46
47 enum ThreadAffinity { 47 enum ThreadAffinity {
48 AnyThread, 48 AnyThread,
49 MainThreadOnly, 49 MainThreadOnly,
50 }; 50 };
51 51
52 // By default all types are considered to be used on the main thread only. 52 // By default all types are considered to be used on the main thread only.
53 template<typename T> 53 template<typename T>
54 struct ThreadingTrait { 54 struct ThreadingTrait {
55 static const ThreadAffinity Affinity = MainThreadOnly; 55 static const ThreadAffinity Affinity = AnyThread;
56 }; 56 };
57 57
58 // Marks specified class as requiring thread safe handles which can be used from any thread. 58 // Marks specified class as requiring thread safe handles which can be used from any thread.
59 // Notice that marking base class does not automatically mark its descendants an d they 59 // Notice that marking base class does not automatically mark its descendants an d they
60 // have to be explicitly marked. 60 // have to be explicitly marked.
61 #define REQUIRE_THREADSAFE_HANDLES(Class) \ 61 #define REQUIRE_THREADSAFE_HANDLES(Class) \
62 class Class; \ 62 class Class; \
63 template<> struct ThreadingTrait<Class> { \ 63 template<> struct ThreadingTrait<Class> { \
64 static const ThreadAffinity Affinity = AnyThread; \ 64 static const ThreadAffinity Affinity = AnyThread; \
65 } 65 }
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 m_endOfStack = endOfStack; 218 m_endOfStack = endOfStack;
219 } 219 }
220 220
221 static void visitRoots(Visitor*); 221 static void visitRoots(Visitor*);
222 static void init(intptr_t* startOfStack); 222 static void init(intptr_t* startOfStack);
223 static void shutdown(); 223 static void shutdown();
224 224
225 static void attach(intptr_t* startOfStack); 225 static void attach(intptr_t* startOfStack);
226 static void detach(); 226 static void detach();
227 227
228 static ThreadState* Current() { return **s_threadSpecific; } 228 static ThreadState* Current()
229 {
230 intptr_t dummy;
231 if (LIKELY(s_mainThreadStackTop < &dummy && &dummy <= s_mainThreadStackB ottom))
haraken 2013/12/12 06:33:47 Of a couple of approaches I have tried, this is th
Mads Ager (chromium) 2013/12/12 06:51:56 I find this rather nasty. It is probably true that
232 return MainThreadState();
233 return **s_threadSpecific;
234 }
229 static ThreadState* MainThreadState() { return &s_mainThreadState; } 235 static ThreadState* MainThreadState() { return &s_mainThreadState; }
230 static bool IsMainThread() { return Current() == MainThreadState(); } 236 static bool IsMainThread() { return Current() == MainThreadState(); }
231 237
232 static void stopThreads(StackState); 238 static void stopThreads(StackState);
233 static void resumeThreads(); 239 static void resumeThreads();
234 240
235 void safePoint(); 241 void safePoint();
236 242
237 class SafePointScope { 243 class SafePointScope {
238 public: 244 public:
(...skipping 28 matching lines...) Expand all
267 protected: 273 protected:
268 void onInterrupted(); 274 void onInterrupted();
269 }; 275 };
270 276
271 void setInterruptor(Interruptor*); 277 void setInterruptor(Interruptor*);
272 278
273 // Should only be called under protection of threadAttachMutex(). 279 // Should only be called under protection of threadAttachMutex().
274 Interruptor* interruptor() const { return m_interruptor; } 280 Interruptor* interruptor() const { return m_interruptor; }
275 281
276 private: 282 private:
283 static intptr_t* s_mainThreadStackBottom;
284 static intptr_t* s_mainThreadStackTop;
277 static WTF::ThreadSpecific<ThreadState*>* s_threadSpecific; 285 static WTF::ThreadSpecific<ThreadState*>* s_threadSpecific;
278 static ThreadState s_mainThreadState; 286 static ThreadState s_mainThreadState;
279 static SafePointBarrier* s_safePointBarrier; 287 static SafePointBarrier* s_safePointBarrier;
280 // This variable is flipped to true after all threads are stoped and outermo st GC has started. 288 // This variable is flipped to true after all threads are stoped and outermo st GC has started.
281 static bool s_inGC; 289 static bool s_inGC;
282 290
283 void create(intptr_t* startOfStack); 291 void create(intptr_t* startOfStack);
284 void destroy(); 292 void destroy();
285 void trace(Visitor*); 293 void trace(Visitor*);
286 bool pointersOnStack() const { return m_stackState == HeapPointersOnStack; } 294 bool pointersOnStack() const { return m_stackState == HeapPointersOnStack; }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WTF, Int32Array); 401 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WTF, Int32Array);
394 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WTF, Uint32Array); 402 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WTF, Uint32Array);
395 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WTF, Float32Array); 403 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WTF, Float32Array);
396 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WTF, Float64Array); 404 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WTF, Float64Array);
397 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WebKit, IDBCallbacksProxy); 405 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WebKit, IDBCallbacksProxy);
398 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WebKit, IDBDatabaseBackendProxy); 406 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WebKit, IDBDatabaseBackendProxy);
399 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WebKit, IDBDatabaseCallbacksProxy); 407 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WebKit, IDBDatabaseCallbacksProxy);
400 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WebKit, IDBFactoryBackendProxy); 408 REQUIRE_THREADSAFE_HANDLES_WITH_NAMESPACE(WebKit, IDBFactoryBackendProxy);
401 409
402 #endif 410 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/heap/ThreadState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698