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

Side by Side Diff: third_party/WebKit/Source/platform/heap/ThreadState.cpp

Issue 2625293002: Remove ThreadHeapMode (Closed)
Patch Set: Created 3 years, 11 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
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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 // and we need to resume the other threads. 132 // and we need to resume the other threads.
133 if (m_shouldResumeThreads) 133 if (m_shouldResumeThreads)
134 m_state->heap().resume(); 134 m_state->heap().resume();
135 } 135 }
136 136
137 private: 137 private:
138 ThreadState* m_state; 138 ThreadState* m_state;
139 bool m_shouldResumeThreads; 139 bool m_shouldResumeThreads;
140 }; 140 };
141 141
142 ThreadState::ThreadState(BlinkGC::ThreadHeapMode threadHeapMode) 142 ThreadState::ThreadState()
143 : m_thread(currentThread()), 143 : m_thread(currentThread()),
144 m_persistentRegion(WTF::makeUnique<PersistentRegion>()), 144 m_persistentRegion(WTF::makeUnique<PersistentRegion>()),
145 #if OS(WIN) && COMPILER(MSVC) 145 #if OS(WIN) && COMPILER(MSVC)
146 m_threadStackSize(0), 146 m_threadStackSize(0),
147 #endif 147 #endif
148 m_startOfStack( 148 m_startOfStack(
149 reinterpret_cast<intptr_t*>(StackFrameDepth::getStackStart())), 149 reinterpret_cast<intptr_t*>(StackFrameDepth::getStackStart())),
150 m_endOfStack( 150 m_endOfStack(
151 reinterpret_cast<intptr_t*>(StackFrameDepth::getStackStart())), 151 reinterpret_cast<intptr_t*>(StackFrameDepth::getStackStart())),
152 m_safePointScopeMarker(nullptr), 152 m_safePointScopeMarker(nullptr),
153 m_atSafePoint(false), 153 m_atSafePoint(false),
154 m_interruptors(), 154 m_interruptors(),
155 m_sweepForbidden(false), 155 m_sweepForbidden(false),
156 m_noAllocationCount(0), 156 m_noAllocationCount(0),
157 m_gcForbiddenCount(0), 157 m_gcForbiddenCount(0),
158 m_mixinsBeingConstructedCount(0), 158 m_mixinsBeingConstructedCount(0),
159 m_accumulatedSweepingTime(0), 159 m_accumulatedSweepingTime(0),
160 m_vectorBackingArenaIndex(BlinkGC::Vector1ArenaIndex), 160 m_vectorBackingArenaIndex(BlinkGC::Vector1ArenaIndex),
161 m_currentArenaAges(0), 161 m_currentArenaAges(0),
162 m_threadHeapMode(threadHeapMode),
163 m_isTerminating(false), 162 m_isTerminating(false),
164 m_gcMixinMarker(nullptr), 163 m_gcMixinMarker(nullptr),
165 m_shouldFlushHeapDoesNotContainCache(false), 164 m_shouldFlushHeapDoesNotContainCache(false),
166 m_gcState(NoGCScheduled), 165 m_gcState(NoGCScheduled),
167 m_threadLocalWeakCallbackStack(CallbackStack::create()), 166 m_threadLocalWeakCallbackStack(CallbackStack::create()),
168 m_isolate(nullptr), 167 m_isolate(nullptr),
169 m_traceDOMWrappers(nullptr), 168 m_traceDOMWrappers(nullptr),
170 m_invalidateDeadObjectsInWrappersMarkingDeque(nullptr), 169 m_invalidateDeadObjectsInWrappersMarkingDeque(nullptr),
171 #if defined(ADDRESS_SANITIZER) 170 #if defined(ADDRESS_SANITIZER)
172 m_asanFakeStack(__asan_get_current_fake_stack()), 171 m_asanFakeStack(__asan_get_current_fake_stack()),
173 #endif 172 #endif
174 #if defined(LEAK_SANITIZER) 173 #if defined(LEAK_SANITIZER)
175 m_disabledStaticPersistentsRegistration(0), 174 m_disabledStaticPersistentsRegistration(0),
176 #endif 175 #endif
177 m_allocatedObjectSize(0), 176 m_allocatedObjectSize(0),
178 m_markedObjectSize(0), 177 m_markedObjectSize(0),
179 m_reportedMemoryToV8(0) { 178 m_reportedMemoryToV8(0) {
180 ASSERT(checkThread()); 179 ASSERT(checkThread());
181 ASSERT(!**s_threadSpecific); 180 ASSERT(!**s_threadSpecific);
182 **s_threadSpecific = this; 181 **s_threadSpecific = this;
183 182
184 switch (m_threadHeapMode) { 183 if (isMainThread()) {
185 case BlinkGC::MainThreadHeapMode: 184 s_mainThreadStackStart =
186 if (isMainThread()) { 185 reinterpret_cast<uintptr_t>(m_startOfStack) - sizeof(void*);
187 s_mainThreadStackStart = 186 size_t underestimatedStackSize =
188 reinterpret_cast<uintptr_t>(m_startOfStack) - sizeof(void*); 187 StackFrameDepth::getUnderestimatedStackSize();
189 size_t underestimatedStackSize = 188 if (underestimatedStackSize > sizeof(void*)) {
190 StackFrameDepth::getUnderestimatedStackSize(); 189 s_mainThreadUnderestimatedStackSize =
191 if (underestimatedStackSize > sizeof(void*)) 190 underestimatedStackSize - sizeof(void*);
192 s_mainThreadUnderestimatedStackSize = 191 }
193 underestimatedStackSize - sizeof(void*);
194 m_heap = new ThreadHeap();
195 } else {
196 m_heap = &ThreadState::mainThreadState()->heap();
197 }
198 break;
199 case BlinkGC::PerThreadHeapMode:
200 m_heap = new ThreadHeap();
201 break;
202 } 192 }
193 m_heap = new ThreadHeap();
203 ASSERT(m_heap); 194 ASSERT(m_heap);
204 m_heap->attach(this); 195 m_heap->attach(this);
sof 2017/01/12 08:29:30 It is possible to now also consider simplifying Th
keishi 2017/01/12 08:31:40 I am working on that next.
205 196
206 for (int arenaIndex = 0; arenaIndex < BlinkGC::LargeObjectArenaIndex; 197 for (int arenaIndex = 0; arenaIndex < BlinkGC::LargeObjectArenaIndex;
207 arenaIndex++) 198 arenaIndex++)
208 m_arenas[arenaIndex] = new NormalPageArena(this, arenaIndex); 199 m_arenas[arenaIndex] = new NormalPageArena(this, arenaIndex);
209 m_arenas[BlinkGC::LargeObjectArenaIndex] = 200 m_arenas[BlinkGC::LargeObjectArenaIndex] =
210 new LargeObjectArena(this, BlinkGC::LargeObjectArenaIndex); 201 new LargeObjectArena(this, BlinkGC::LargeObjectArenaIndex);
211 202
212 m_likelyToBePromptlyFreed = 203 m_likelyToBePromptlyFreed =
213 wrapArrayUnique(new int[likelyToBePromptlyFreedArraySize]); 204 wrapArrayUnique(new int[likelyToBePromptlyFreedArraySize]);
214 clearArenaAges(); 205 clearArenaAges();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 // explains the details. 249 // explains the details.
259 RELEASE_ASSERT(m_threadStackSize > 4 * 0x1000); 250 RELEASE_ASSERT(m_threadStackSize > 4 * 0x1000);
260 m_threadStackSize -= 4 * 0x1000; 251 m_threadStackSize -= 4 * 0x1000;
261 return m_threadStackSize; 252 return m_threadStackSize;
262 } 253 }
263 #endif 254 #endif
264 255
265 void ThreadState::attachMainThread() { 256 void ThreadState::attachMainThread() {
266 RELEASE_ASSERT(!ProcessHeap::s_shutdownComplete); 257 RELEASE_ASSERT(!ProcessHeap::s_shutdownComplete);
267 s_threadSpecific = new WTF::ThreadSpecific<ThreadState*>(); 258 s_threadSpecific = new WTF::ThreadSpecific<ThreadState*>();
268 new (s_mainThreadStateStorage) ThreadState(BlinkGC::MainThreadHeapMode); 259 new (s_mainThreadStateStorage) ThreadState();
269 } 260 }
270 261
271 void ThreadState::attachCurrentThread(BlinkGC::ThreadHeapMode threadHeapMode) { 262 void ThreadState::attachCurrentThread() {
272 RELEASE_ASSERT(!ProcessHeap::s_shutdownComplete); 263 RELEASE_ASSERT(!ProcessHeap::s_shutdownComplete);
273 new ThreadState(threadHeapMode); 264 new ThreadState();
274 } 265 }
275 266
276 void ThreadState::cleanupPages() { 267 void ThreadState::cleanupPages() {
277 ASSERT(checkThread()); 268 ASSERT(checkThread());
278 for (int i = 0; i < BlinkGC::NumberOfArenas; ++i) 269 for (int i = 0; i < BlinkGC::NumberOfArenas; ++i)
279 m_arenas[i]->cleanupPages(); 270 m_arenas[i]->cleanupPages();
280 } 271 }
281 272
282 void ThreadState::runTerminationGC() { 273 void ThreadState::runTerminationGC() {
283 if (isMainThread()) { 274 if (isMainThread()) {
(...skipping 1574 matching lines...) Expand 10 before | Expand all | Expand 10 after
1858 collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, 1849 collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep,
1859 BlinkGC::ForcedGC); 1850 BlinkGC::ForcedGC);
1860 size_t liveObjects = heap().heapStats().markedObjectSize(); 1851 size_t liveObjects = heap().heapStats().markedObjectSize();
1861 if (liveObjects == previousLiveObjects) 1852 if (liveObjects == previousLiveObjects)
1862 break; 1853 break;
1863 previousLiveObjects = liveObjects; 1854 previousLiveObjects = liveObjects;
1864 } 1855 }
1865 } 1856 }
1866 1857
1867 } // namespace blink 1858 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698