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

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

Issue 182733003: Oilpan: mark ThreadAffinity as MainThreadOnly for Node or CSSValue inheriting classes. Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 // 64 //
65 // FIXME: We should evaluate the performance gain. Having 65 // FIXME: We should evaluate the performance gain. Having
66 // ThreadAffinity is complicating the implementation and we should get 66 // ThreadAffinity is complicating the implementation and we should get
67 // rid of it if it is fast enough to go through thread-local storage 67 // rid of it if it is fast enough to go through thread-local storage
68 // always. 68 // always.
69 enum ThreadAffinity { 69 enum ThreadAffinity {
70 AnyThread, 70 AnyThread,
71 MainThreadOnly, 71 MainThreadOnly,
72 }; 72 };
73 73
74 // By default all types are considered to be used on the main thread only. 74 class Node;
75 class CSSValue;
76
77 template<typename T, bool derivesNodeOrCSSValue = WTF::IsSubclass<T, Node>::valu e || WTF::IsSubclass<T, CSSValue>::value > struct DefaultThreadingTrait;
78
79 template<typename T>
80 struct DefaultThreadingTrait<T, false> {
81 static const ThreadAffinity Affinity = AnyThread;
82 };
83
84 template<typename T>
85 struct DefaultThreadingTrait<T, true> {
86 static const ThreadAffinity Affinity = MainThreadOnly;
87 };
88
75 template<typename T> 89 template<typename T>
76 struct ThreadingTrait { 90 struct ThreadingTrait {
77 static const ThreadAffinity Affinity = MainThreadOnly; 91 static const ThreadAffinity Affinity = DefaultThreadingTrait<T>::Affinity;
78 }; 92 };
79 93
80 // Marks the specified class as being used from multiple threads. When 94 // Marks the specified class as being used from multiple threads. When
81 // a class is used from multiple threads we go through thread local 95 // a class is used from multiple threads we go through thread local
82 // storage to get the heap in which to allocate an object of that type 96 // storage to get the heap in which to allocate an object of that type
83 // and when allocating a Persistent handle for an object with that 97 // and when allocating a Persistent handle for an object with that
84 // type. Notice that marking the base class does not automatically 98 // type. Notice that marking the base class does not automatically
85 // mark its descendants and they have to be explicitly marked. 99 // mark its descendants and they have to be explicitly marked.
86 #define USED_FROM_MULTIPLE_THREADS(Class) \ 100 #define USED_FROM_MULTIPLE_THREADS(Class) \
87 class Class; \ 101 class Class; \
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 ASSERT(ThreadState::isMainThread()); 552 ASSERT(ThreadState::isMainThread());
539 return ThreadState::mainThreadState(); 553 return ThreadState::mainThreadState();
540 } 554 }
541 }; 555 };
542 556
543 template<> class ThreadStateFor<AnyThread> { 557 template<> class ThreadStateFor<AnyThread> {
544 public: 558 public:
545 static ThreadState* state() { return ThreadState::current(); } 559 static ThreadState* state() { return ThreadState::current(); }
546 }; 560 };
547 561
548 // FIXME: Experiment if the threading affinity really matters for performance.
549 // FIXME: Move these macros and other related structures to a separate file.
550 USED_FROM_MULTIPLE_THREADS(Crypto);
551 USED_FROM_MULTIPLE_THREADS(DOMParser);
552 USED_FROM_MULTIPLE_THREADS(DOMURL);
553 USED_FROM_MULTIPLE_THREADS(DeprecatedStorageQuota);
554 USED_FROM_MULTIPLE_THREADS(Event);
555 USED_FROM_MULTIPLE_THREADS(EventSource);
556 USED_FROM_MULTIPLE_THREADS(EventTarget);
557 USED_FROM_MULTIPLE_THREADS(Key);
558 USED_FROM_MULTIPLE_THREADS(KeyAlgorithm);
559 USED_FROM_MULTIPLE_THREADS(KeyPair);
560 USED_FROM_MULTIPLE_THREADS(MemoryInfo);
561 USED_FROM_MULTIPLE_THREADS(MessageEvent);
562 USED_FROM_MULTIPLE_THREADS(Notification);
563 USED_FROM_MULTIPLE_THREADS(NotificationCenter);
564 USED_FROM_MULTIPLE_THREADS(Performance);
565 USED_FROM_MULTIPLE_THREADS(PerformanceEntry);
566 USED_FROM_MULTIPLE_THREADS(PerformanceMark);
567 USED_FROM_MULTIPLE_THREADS(PerformanceNavigation);
568 USED_FROM_MULTIPLE_THREADS(PerformanceResourceTiming);
569 USED_FROM_MULTIPLE_THREADS(PerformanceTiming);
570 USED_FROM_MULTIPLE_THREADS(SubtleCrypto);
571 USED_FROM_MULTIPLE_THREADS(TextDecoder);
572 USED_FROM_MULTIPLE_THREADS(TextEncoder);
573 USED_FROM_MULTIPLE_THREADS(UserTiming);
574 USED_FROM_MULTIPLE_THREADS(WebKitNotification);
575 USED_FROM_MULTIPLE_THREADS(WorkerCrypto);
576 USED_FROM_MULTIPLE_THREADS(WorkerPerformance);
577 USED_FROM_MULTIPLE_THREADS(XMLHttpRequest);
578 USED_FROM_MULTIPLE_THREADS(XMLSerializer);
579 USED_FROM_MULTIPLE_THREADS(XPathEvaluator);
580 USED_FROM_MULTIPLE_THREADS(XPathExpression);
581 USED_FROM_MULTIPLE_THREADS(XPathNSResolver);
582 USED_FROM_MULTIPLE_THREADS(XPathResult);
583 USED_FROM_MULTIPLE_THREADS(XSLTProcessor);
584
585 } 562 }
586 563
587 #endif // ThreadState_h 564 #endif // ThreadState_h
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698