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

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

Issue 2570483002: Revert of Simple BlinkGC heap compaction. (Closed)
Patch Set: Created 4 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
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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 void preGC(); 277 void preGC();
278 void postGC(BlinkGC::GCType); 278 void postGC(BlinkGC::GCType);
279 void preSweep(); 279 void preSweep();
280 void completeSweep(); 280 void completeSweep();
281 void postSweep(); 281 void postSweep();
282 // makeConsistentForMutator() drops marks from marked objects and rebuild 282 // makeConsistentForMutator() drops marks from marked objects and rebuild
283 // free lists. This is called after taking a snapshot and before resuming 283 // free lists. This is called after taking a snapshot and before resuming
284 // the executions of mutators. 284 // the executions of mutators.
285 void makeConsistentForMutator(); 285 void makeConsistentForMutator();
286 286
287 void compact();
288
289 // Support for disallowing allocation. Mainly used for sanity 287 // Support for disallowing allocation. Mainly used for sanity
290 // checks asserts. 288 // checks asserts.
291 bool isAllocationAllowed() const { 289 bool isAllocationAllowed() const {
292 return !isAtSafePoint() && !m_noAllocationCount; 290 return !isAtSafePoint() && !m_noAllocationCount;
293 } 291 }
294 void enterNoAllocationScope() { m_noAllocationCount++; } 292 void enterNoAllocationScope() { m_noAllocationCount++; }
295 void leaveNoAllocationScope() { m_noAllocationCount--; } 293 void leaveNoAllocationScope() { m_noAllocationCount--; }
296 bool isWrapperTracingForbidden() { return isMixinInConstruction(); } 294 bool isWrapperTracingForbidden() { return isMixinInConstruction(); }
297 bool isGCForbidden() const { 295 bool isGCForbidden() const {
298 return m_gcForbiddenCount || isMixinInConstruction(); 296 return m_gcForbiddenCount || isMixinInConstruction();
(...skipping 16 matching lines...) Expand all
315 313
316 public: 314 public:
317 MainThreadGCForbiddenScope() 315 MainThreadGCForbiddenScope()
318 : m_threadState(ThreadState::mainThreadState()) { 316 : m_threadState(ThreadState::mainThreadState()) {
319 m_threadState->enterGCForbiddenScope(); 317 m_threadState->enterGCForbiddenScope();
320 } 318 }
321 ~MainThreadGCForbiddenScope() { m_threadState->leaveGCForbiddenScope(); } 319 ~MainThreadGCForbiddenScope() { m_threadState->leaveGCForbiddenScope(); }
322 320
323 private: 321 private:
324 ThreadState* const m_threadState; 322 ThreadState* const m_threadState;
325 };
326
327 class GCForbiddenScope final {
328 STACK_ALLOCATED();
329
330 public:
331 explicit GCForbiddenScope(ThreadState* threadState)
332 : m_threadState(threadState) {
333 m_threadState->enterGCForbiddenScope();
334 }
335 ~GCForbiddenScope() { m_threadState->leaveGCForbiddenScope(); }
336
337 private:
338 ThreadState* const m_threadState;
339 }; 323 };
340 324
341 void flushHeapDoesNotContainCacheIfNeeded(); 325 void flushHeapDoesNotContainCacheIfNeeded();
342 326
343 // Safepoint related functionality. 327 // Safepoint related functionality.
344 // 328 //
345 // When a thread attempts to perform GC it needs to stop all other threads 329 // When a thread attempts to perform GC it needs to stop all other threads
346 // that use the heap or at least guarantee that they will not touch any 330 // that use the heap or at least guarantee that they will not touch any
347 // heap allocated object until GC is complete. 331 // heap allocated object until GC is complete.
348 // 332 //
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 554
571 void resetHeapCounters(); 555 void resetHeapCounters();
572 void increaseAllocatedObjectSize(size_t); 556 void increaseAllocatedObjectSize(size_t);
573 void decreaseAllocatedObjectSize(size_t); 557 void decreaseAllocatedObjectSize(size_t);
574 void increaseMarkedObjectSize(size_t); 558 void increaseMarkedObjectSize(size_t);
575 559
576 void callThreadShutdownHooks(); 560 void callThreadShutdownHooks();
577 561
578 v8::Isolate* isolate() const { return m_isolate; } 562 v8::Isolate* isolate() const { return m_isolate; }
579 563
580 BlinkGC::StackState stackState() const { return m_stackState; }
581
582 void collectGarbage(BlinkGC::StackState, BlinkGC::GCType, BlinkGC::GCReason); 564 void collectGarbage(BlinkGC::StackState, BlinkGC::GCType, BlinkGC::GCReason);
583 void collectGarbageForTerminatingThread(); 565 void collectGarbageForTerminatingThread();
584 void collectAllGarbage(); 566 void collectAllGarbage();
585 567
586 static const char* gcReasonString(BlinkGC::GCReason);
587
588 private: 568 private:
589 enum SnapshotType { HeapSnapshot, FreelistSnapshot }; 569 enum SnapshotType { HeapSnapshot, FreelistSnapshot };
590 570
591 explicit ThreadState(BlinkGC::ThreadHeapMode); 571 explicit ThreadState(BlinkGC::ThreadHeapMode);
592 ~ThreadState(); 572 ~ThreadState();
593 573
594 NO_SANITIZE_ADDRESS void copyStackUntilSafePointScope(); 574 NO_SANITIZE_ADDRESS void copyStackUntilSafePointScope();
595 void clearSafePointScopeMarker() { 575 void clearSafePointScopeMarker() {
596 m_safePointStackCopy.clear(); 576 m_safePointStackCopy.clear();
597 m_safePointScopeMarker = nullptr; 577 m_safePointScopeMarker = nullptr;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 class ThreadStateFor<AnyThread> { 752 class ThreadStateFor<AnyThread> {
773 STATIC_ONLY(ThreadStateFor); 753 STATIC_ONLY(ThreadStateFor);
774 754
775 public: 755 public:
776 static ThreadState* state() { return ThreadState::current(); } 756 static ThreadState* state() { return ThreadState::current(); }
777 }; 757 };
778 758
779 } // namespace blink 759 } // namespace blink
780 760
781 #endif // ThreadState_h 761 #endif // ThreadState_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/SparseHeapBitmap.cpp ('k') | third_party/WebKit/Source/platform/heap/ThreadState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698