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

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

Issue 2688083002: Move VisitorMarkingMode into Visitor. (Closed)
Patch Set: Created 3 years, 10 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 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 // Disallow allocation during weak processing. 371 // Disallow allocation during weak processing.
372 // It would be technically safe to allow allocations, but it is unsafe 372 // It would be technically safe to allow allocations, but it is unsafe
373 // to mutate an object graph in a way in which a dead object gets 373 // to mutate an object graph in a way in which a dead object gets
374 // resurrected or mutate a HashTable (because HashTable's weak processing 374 // resurrected or mutate a HashTable (because HashTable's weak processing
375 // assumes that the HashTable hasn't been mutated since the latest marking). 375 // assumes that the HashTable hasn't been mutated since the latest marking).
376 // Due to the complexity, we just forbid allocations. 376 // Due to the complexity, we just forbid allocations.
377 NoAllocationScope noAllocationScope(this); 377 NoAllocationScope noAllocationScope(this);
378 378
379 GCForbiddenScope gcForbiddenScope(this); 379 GCForbiddenScope gcForbiddenScope(this);
380 std::unique_ptr<Visitor> visitor = 380 std::unique_ptr<Visitor> visitor =
381 Visitor::create(this, VisitorMarkingMode::WeakProcessing); 381 Visitor::create(this, Visitor::WeakProcessing);
382 382
383 // Perform thread-specific weak processing. 383 // Perform thread-specific weak processing.
384 while (popAndInvokeThreadLocalWeakCallback(visitor.get())) { 384 while (popAndInvokeThreadLocalWeakCallback(visitor.get())) {
385 } 385 }
386 386
387 m_threadLocalWeakCallbackStack->decommit(); 387 m_threadLocalWeakCallbackStack->decommit();
388 388
389 if (isMainThread()) { 389 if (isMainThread()) {
390 double timeForThreadLocalWeakProcessing = WTF::currentTimeMS() - startTime; 390 double timeForThreadLocalWeakProcessing = WTF::currentTimeMS() - startTime;
391 DEFINE_STATIC_LOCAL( 391 DEFINE_STATIC_LOCAL(
(...skipping 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1572 1572
1573 // Resume all parked threads upon leaving this scope. 1573 // Resume all parked threads upon leaving this scope.
1574 ParkThreadsScope parkThreadsScope(this); 1574 ParkThreadsScope parkThreadsScope(this);
1575 1575
1576 // Try to park the other threads. If we're unable to, bail out of the GC. 1576 // Try to park the other threads. If we're unable to, bail out of the GC.
1577 if (!parkThreadsScope.parkThreads()) 1577 if (!parkThreadsScope.parkThreads())
1578 return; 1578 return;
1579 1579
1580 std::unique_ptr<Visitor> visitor; 1580 std::unique_ptr<Visitor> visitor;
1581 if (gcType == BlinkGC::TakeSnapshot) { 1581 if (gcType == BlinkGC::TakeSnapshot) {
1582 visitor = Visitor::create(this, VisitorMarkingMode::SnapshotMarking); 1582 visitor = Visitor::create(this, Visitor::SnapshotMarking);
1583 } else { 1583 } else {
1584 DCHECK(gcType == BlinkGC::GCWithSweep || 1584 DCHECK(gcType == BlinkGC::GCWithSweep ||
1585 gcType == BlinkGC::GCWithoutSweep); 1585 gcType == BlinkGC::GCWithoutSweep);
1586 if (heap().compaction()->shouldCompact(this, gcType, reason)) { 1586 if (heap().compaction()->shouldCompact(this, gcType, reason)) {
1587 heap().compaction()->initialize(this); 1587 heap().compaction()->initialize(this);
1588 visitor = Visitor::create( 1588 visitor = Visitor::create(this, Visitor::GlobalMarkingWithCompaction);
1589 this, VisitorMarkingMode::GlobalMarkingWithCompaction);
1590 } else { 1589 } else {
1591 visitor = Visitor::create(this, VisitorMarkingMode::GlobalMarking); 1590 visitor = Visitor::create(this, Visitor::GlobalMarking);
1592 } 1591 }
1593 } 1592 }
1594 1593
1595 ScriptForbiddenIfMainThreadScope scriptForbidden; 1594 ScriptForbiddenIfMainThreadScope scriptForbidden;
1596 1595
1597 TRACE_EVENT2("blink_gc,devtools.timeline", "BlinkGCMarking", "lazySweeping", 1596 TRACE_EVENT2("blink_gc,devtools.timeline", "BlinkGCMarking", "lazySweeping",
1598 gcType == BlinkGC::GCWithoutSweep, "gcReason", 1597 gcType == BlinkGC::GCWithoutSweep, "gcReason",
1599 gcReasonString(reason)); 1598 gcReasonString(reason));
1600 double startTime = WTF::currentTimeMS(); 1599 double startTime = WTF::currentTimeMS();
1601 1600
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, 1684 collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep,
1686 BlinkGC::ForcedGC); 1685 BlinkGC::ForcedGC);
1687 size_t liveObjects = heap().heapStats().markedObjectSize(); 1686 size_t liveObjects = heap().heapStats().markedObjectSize();
1688 if (liveObjects == previousLiveObjects) 1687 if (liveObjects == previousLiveObjects)
1689 break; 1688 break;
1690 previousLiveObjects = liveObjects; 1689 previousLiveObjects = liveObjects;
1691 } 1690 }
1692 } 1691 }
1693 1692
1694 } // namespace blink 1693 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/HeapTest.cpp ('k') | third_party/WebKit/Source/platform/heap/Visitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698