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

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

Issue 2625363002: Simplify visitor marking mode tracking. (Closed)
Patch Set: HeapTest compilation fix 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 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 // Disallow allocation during weak processing. 472 // Disallow allocation during weak processing.
473 // It would be technically safe to allow allocations, but it is unsafe 473 // It would be technically safe to allow allocations, but it is unsafe
474 // to mutate an object graph in a way in which a dead object gets 474 // to mutate an object graph in a way in which a dead object gets
475 // resurrected or mutate a HashTable (because HashTable's weak processing 475 // resurrected or mutate a HashTable (because HashTable's weak processing
476 // assumes that the HashTable hasn't been mutated since the latest marking). 476 // assumes that the HashTable hasn't been mutated since the latest marking).
477 // Due to the complexity, we just forbid allocations. 477 // Due to the complexity, we just forbid allocations.
478 NoAllocationScope noAllocationScope(this); 478 NoAllocationScope noAllocationScope(this);
479 479
480 GCForbiddenScope gcForbiddenScope(this); 480 GCForbiddenScope gcForbiddenScope(this);
481 std::unique_ptr<Visitor> visitor = 481 std::unique_ptr<Visitor> visitor =
482 Visitor::create(this, Visitor::WeakProcessing); 482 Visitor::create(this, VisitorMarkingMode::WeakProcessing);
483 483
484 // Perform thread-specific weak processing. 484 // Perform thread-specific weak processing.
485 while (popAndInvokeThreadLocalWeakCallback(visitor.get())) { 485 while (popAndInvokeThreadLocalWeakCallback(visitor.get())) {
486 } 486 }
487 487
488 m_threadLocalWeakCallbackStack->decommit(); 488 m_threadLocalWeakCallbackStack->decommit();
489 489
490 if (isMainThread()) { 490 if (isMainThread()) {
491 double timeForThreadLocalWeakProcessing = WTF::currentTimeMS() - startTime; 491 double timeForThreadLocalWeakProcessing = WTF::currentTimeMS() - startTime;
492 DEFINE_STATIC_LOCAL( 492 DEFINE_STATIC_LOCAL(
(...skipping 1197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1690 1690
1691 // Resume all parked threads upon leaving this scope. 1691 // Resume all parked threads upon leaving this scope.
1692 ParkThreadsScope parkThreadsScope(this); 1692 ParkThreadsScope parkThreadsScope(this);
1693 1693
1694 // Try to park the other threads. If we're unable to, bail out of the GC. 1694 // Try to park the other threads. If we're unable to, bail out of the GC.
1695 if (!parkThreadsScope.parkThreads()) 1695 if (!parkThreadsScope.parkThreads())
1696 return; 1696 return;
1697 1697
1698 std::unique_ptr<Visitor> visitor; 1698 std::unique_ptr<Visitor> visitor;
1699 if (gcType == BlinkGC::TakeSnapshot) { 1699 if (gcType == BlinkGC::TakeSnapshot) {
1700 visitor = Visitor::create(this, Visitor::SnapshotMarking); 1700 visitor = Visitor::create(this, VisitorMarkingMode::SnapshotMarking);
1701 } else { 1701 } else {
1702 DCHECK(gcType == BlinkGC::GCWithSweep || gcType == BlinkGC::GCWithoutSweep); 1702 DCHECK(gcType == BlinkGC::GCWithSweep || gcType == BlinkGC::GCWithoutSweep);
1703 if (heap().compaction()->shouldCompact(this, gcType, reason)) { 1703 if (heap().compaction()->shouldCompact(this, gcType, reason)) {
1704 heap().compaction()->initialize(this); 1704 heap().compaction()->initialize(this);
1705 visitor = Visitor::create(this, Visitor::GlobalMarkingWithCompaction); 1705 visitor = Visitor::create(
1706 this, VisitorMarkingMode::GlobalMarkingWithCompaction);
1706 } else { 1707 } else {
1707 visitor = Visitor::create(this, Visitor::GlobalMarking); 1708 visitor = Visitor::create(this, VisitorMarkingMode::GlobalMarking);
1708 } 1709 }
1709 } 1710 }
1710 1711
1711 ScriptForbiddenIfMainThreadScope scriptForbidden; 1712 ScriptForbiddenIfMainThreadScope scriptForbidden;
1712 1713
1713 TRACE_EVENT2("blink_gc,devtools.timeline", "BlinkGCMarking", "lazySweeping", 1714 TRACE_EVENT2("blink_gc,devtools.timeline", "BlinkGCMarking", "lazySweeping",
1714 gcType == BlinkGC::GCWithoutSweep, "gcReason", 1715 gcType == BlinkGC::GCWithoutSweep, "gcReason",
1715 gcReasonString(reason)); 1716 gcReasonString(reason));
1716 double startTime = WTF::currentTimeMS(); 1717 double startTime = WTF::currentTimeMS();
1717 1718
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1803 } 1804 }
1804 1805
1805 void ThreadState::collectGarbageForTerminatingThread() { 1806 void ThreadState::collectGarbageForTerminatingThread() {
1806 { 1807 {
1807 // A thread-specific termination GC must not allow other global GCs to go 1808 // A thread-specific termination GC must not allow other global GCs to go
1808 // ahead while it is running, hence the termination GC does not enter a 1809 // ahead while it is running, hence the termination GC does not enter a
1809 // safepoint. VisitorScope will not enter also a safepoint scope for 1810 // safepoint. VisitorScope will not enter also a safepoint scope for
1810 // ThreadTerminationGC. 1811 // ThreadTerminationGC.
1811 GCForbiddenScope gcForbiddenScope(this); 1812 GCForbiddenScope gcForbiddenScope(this);
1812 std::unique_ptr<Visitor> visitor = 1813 std::unique_ptr<Visitor> visitor =
1813 Visitor::create(this, Visitor::ThreadLocalMarking); 1814 Visitor::create(this, VisitorMarkingMode::ThreadLocalMarking);
1814 1815
1815 NoAllocationScope noAllocationScope(this); 1816 NoAllocationScope noAllocationScope(this);
1816 1817
1817 heap().commitCallbackStacks(); 1818 heap().commitCallbackStacks();
1818 preGC(); 1819 preGC();
1819 1820
1820 // 1. Trace the thread local persistent roots. For thread local GCs we 1821 // 1. Trace the thread local persistent roots. For thread local GCs we
1821 // don't trace the stack (ie. no conservative scanning) since this is 1822 // don't trace the stack (ie. no conservative scanning) since this is
1822 // only called during thread shutdown where there should be no objects 1823 // only called during thread shutdown where there should be no objects
1823 // on the stack. 1824 // on the stack.
(...skipping 25 matching lines...) Expand all
1849 collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, 1850 collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep,
1850 BlinkGC::ForcedGC); 1851 BlinkGC::ForcedGC);
1851 size_t liveObjects = heap().heapStats().markedObjectSize(); 1852 size_t liveObjects = heap().heapStats().markedObjectSize();
1852 if (liveObjects == previousLiveObjects) 1853 if (liveObjects == previousLiveObjects)
1853 break; 1854 break;
1854 previousLiveObjects = liveObjects; 1855 previousLiveObjects = liveObjects;
1855 } 1856 }
1856 } 1857 }
1857 1858
1858 } // namespace blink 1859 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/MarkingVisitorImpl.h ('k') | third_party/WebKit/Source/platform/heap/Visitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698