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

Side by Side Diff: Source/platform/heap/Handle.h

Issue 1272083003: Oilpan: Make the GC heuristics saner Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 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 | « Source/bindings/core/v8/WrapperTypeInfo.h ('k') | Source/platform/heap/Heap.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 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 NO_LAZY_SWEEP_SANITIZE_ADDRESS 200 NO_LAZY_SWEEP_SANITIZE_ADDRESS
201 void initialize() 201 void initialize()
202 { 202 {
203 TraceCallback traceCallback = TraceMethodDelegate<PersistentBase<T, pers istentConfiguration>, &PersistentBase<T, persistentConfiguration>::trace>::tramp oline; 203 TraceCallback traceCallback = TraceMethodDelegate<PersistentBase<T, pers istentConfiguration>, &PersistentBase<T, persistentConfiguration>::trace>::tramp oline;
204 if (persistentConfiguration == CrossThreadPersistentConfiguration) { 204 if (persistentConfiguration == CrossThreadPersistentConfiguration) {
205 m_persistentNode = ThreadState::crossThreadPersistentRegion().alloca tePersistentNode(this, traceCallback); 205 m_persistentNode = ThreadState::crossThreadPersistentRegion().alloca tePersistentNode(this, traceCallback);
206 } else { 206 } else {
207 ThreadState* state = ThreadStateFor<ThreadingTrait<T>::Affinity>::st ate(); 207 ThreadState* state = ThreadStateFor<ThreadingTrait<T>::Affinity>::st ate();
208 ASSERT(state->checkThread()); 208 ASSERT(state->checkThread());
209 m_persistentNode = state->persistentRegion()->allocatePersistentNode (this, traceCallback); 209 m_persistentNode = state->persistentRegion()->allocatePersistentNode (this, traceCallback);
210 state->persistentAllocated();
211 #if ENABLE(ASSERT) 210 #if ENABLE(ASSERT)
212 m_state = state; 211 m_state = state;
213 #endif 212 #endif
214 } 213 }
215 } 214 }
216 215
217 void uninitialize() 216 void uninitialize()
218 { 217 {
219 if (persistentConfiguration == CrossThreadPersistentConfiguration) { 218 if (persistentConfiguration == CrossThreadPersistentConfiguration) {
220 ThreadState::crossThreadPersistentRegion().freePersistentNode(m_pers istentNode); 219 ThreadState::crossThreadPersistentRegion().freePersistentNode(m_pers istentNode);
221 } else { 220 } else {
222 ThreadState* state = ThreadStateFor<ThreadingTrait<T>::Affinity>::st ate(); 221 ThreadState* state = ThreadStateFor<ThreadingTrait<T>::Affinity>::st ate();
223 ASSERT(state->checkThread()); 222 ASSERT(state->checkThread());
224 // Persistent handle must be created and destructed in the same thre ad. 223 // Persistent handle must be created and destructed in the same thre ad.
225 ASSERT(m_state == state); 224 ASSERT(m_state == state);
226 state->persistentRegion()->freePersistentNode(m_persistentNode); 225 state->persistentRegion()->freePersistentNode(m_persistentNode);
227 state->persistentFreed();
228 } 226 }
229 } 227 }
230 228
231 void checkPointer() 229 void checkPointer()
232 { 230 {
233 #if ENABLE(ASSERT) 231 #if ENABLE(ASSERT)
234 if (!m_raw) 232 if (!m_raw)
235 return; 233 return;
236 234
237 // Heap::isHeapObjectAlive(m_raw) checks that m_raw is a traceable 235 // Heap::isHeapObjectAlive(m_raw) checks that m_raw is a traceable
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 visitor->trace(*static_cast<Collection*>(this)); 371 visitor->trace(*static_cast<Collection*>(this));
374 } 372 }
375 373
376 private: 374 private:
377 NO_LAZY_SWEEP_SANITIZE_ADDRESS 375 NO_LAZY_SWEEP_SANITIZE_ADDRESS
378 void initialize() 376 void initialize()
379 { 377 {
380 ThreadState* state = ThreadState::current(); 378 ThreadState* state = ThreadState::current();
381 ASSERT(state->checkThread()); 379 ASSERT(state->checkThread());
382 m_persistentNode = state->persistentRegion()->allocatePersistentNode(thi s, TraceMethodDelegate<PersistentHeapCollectionBase<Collection>, &PersistentHeap CollectionBase<Collection>::trace>::trampoline); 380 m_persistentNode = state->persistentRegion()->allocatePersistentNode(thi s, TraceMethodDelegate<PersistentHeapCollectionBase<Collection>, &PersistentHeap CollectionBase<Collection>::trace>::trampoline);
383 state->persistentAllocated();
384 #if ENABLE(ASSERT) 381 #if ENABLE(ASSERT)
385 m_state = state; 382 m_state = state;
386 #endif 383 #endif
387 } 384 }
388 385
389 void uninitialize() 386 void uninitialize()
390 { 387 {
391 ThreadState* state = ThreadState::current(); 388 ThreadState* state = ThreadState::current();
392 ASSERT(state->checkThread()); 389 ASSERT(state->checkThread());
393 // Persistent handle must be created and destructed in the same thread. 390 // Persistent handle must be created and destructed in the same thread.
394 ASSERT(m_state == state); 391 ASSERT(m_state == state);
395 state->persistentRegion()->freePersistentNode(m_persistentNode); 392 state->persistentRegion()->freePersistentNode(m_persistentNode);
396 state->persistentFreed();
397 } 393 }
398 394
399 PersistentNode* m_persistentNode; 395 PersistentNode* m_persistentNode;
400 #if ENABLE(ASSERT) 396 #if ENABLE(ASSERT)
401 ThreadState* m_state; 397 ThreadState* m_state;
402 #endif 398 #endif
403 }; 399 };
404 400
405 template< 401 template<
406 typename KeyArg, 402 typename KeyArg,
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
1156 struct ParamStorageTraits<RawPtr<T>> : public PointerParamStorageTraits<T*, blin k::IsGarbageCollectedType<T>::value> { 1152 struct ParamStorageTraits<RawPtr<T>> : public PointerParamStorageTraits<T*, blin k::IsGarbageCollectedType<T>::value> {
1157 static_assert(sizeof(T), "T must be fully defined"); 1153 static_assert(sizeof(T), "T must be fully defined");
1158 }; 1154 };
1159 1155
1160 template<typename T> 1156 template<typename T>
1161 PassRefPtr<T> adoptRef(blink::RefCountedGarbageCollected<T>*) = delete; 1157 PassRefPtr<T> adoptRef(blink::RefCountedGarbageCollected<T>*) = delete;
1162 1158
1163 } // namespace WTF 1159 } // namespace WTF
1164 1160
1165 #endif 1161 #endif
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/WrapperTypeInfo.h ('k') | Source/platform/heap/Heap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698