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

Side by Side Diff: src/heap/heap.cc

Issue 1235913002: Add scavenger events to GC tracer (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: addressed comments Created 5 years, 5 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
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 1622 matching lines...) Expand 10 before | Expand all | Expand 10 after
1633 } 1633 }
1634 return NULL; 1634 return NULL;
1635 } 1635 }
1636 1636
1637 private: 1637 private:
1638 Heap* heap_; 1638 Heap* heap_;
1639 }; 1639 };
1640 1640
1641 1641
1642 void Heap::Scavenge() { 1642 void Heap::Scavenge() {
1643 GCTracer::Scope gc_scope(tracer(), GCTracer::Scope::SCAVENGER_SCAVENGE);
1643 RelocationLock relocation_lock(this); 1644 RelocationLock relocation_lock(this);
1644 // There are soft limits in the allocation code, designed to trigger a mark 1645 // There are soft limits in the allocation code, designed to trigger a mark
1645 // sweep collection by failing allocations. There is no sense in trying to 1646 // sweep collection by failing allocations. There is no sense in trying to
1646 // trigger one during scavenge: scavenges allocation should always succeed. 1647 // trigger one during scavenge: scavenges allocation should always succeed.
1647 AlwaysAllocateScope scope(isolate()); 1648 AlwaysAllocateScope scope(isolate());
1648 1649
1649 #ifdef VERIFY_HEAP 1650 #ifdef VERIFY_HEAP
1650 if (FLAG_verify_heap) VerifyNonPointerSpacePointers(this); 1651 if (FLAG_verify_heap) VerifyNonPointerSpacePointers(this);
1651 #endif 1652 #endif
1652 1653
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1684 // updated as a side effect of promoting an object. 1685 // updated as a side effect of promoting an object.
1685 // 1686 //
1686 // There is guaranteed to be enough room at the top of the to space 1687 // There is guaranteed to be enough room at the top of the to space
1687 // for the addresses of promoted objects: every object promoted 1688 // for the addresses of promoted objects: every object promoted
1688 // frees up its size in bytes from the top of the new space, and 1689 // frees up its size in bytes from the top of the new space, and
1689 // objects are at least one pointer in size. 1690 // objects are at least one pointer in size.
1690 Address new_space_front = new_space_.ToSpaceStart(); 1691 Address new_space_front = new_space_.ToSpaceStart();
1691 promotion_queue_.Initialize(); 1692 promotion_queue_.Initialize();
1692 1693
1693 ScavengeVisitor scavenge_visitor(this); 1694 ScavengeVisitor scavenge_visitor(this);
1694 // Copy roots. 1695 {
1695 IterateRoots(&scavenge_visitor, VISIT_ALL_IN_SCAVENGE); 1696 // Copy roots.
1697 GCTracer::Scope gc_scope(tracer(), GCTracer::Scope::SCAVENGER_ROOTS);
1698 IterateRoots(&scavenge_visitor, VISIT_ALL_IN_SCAVENGE);
1699 }
1696 1700
1697 // Copy objects reachable from the old generation.
1698 { 1701 {
1702 // Copy objects reachable from the old generation.
1703 GCTracer::Scope gc_scope(tracer(),
1704 GCTracer::Scope::SCAVENGER_OLD_TO_NEW_POINTERS);
1699 StoreBufferRebuildScope scope(this, store_buffer(), 1705 StoreBufferRebuildScope scope(this, store_buffer(),
1700 &ScavengeStoreBufferCallback); 1706 &ScavengeStoreBufferCallback);
1701 store_buffer()->IteratePointersToNewSpace(&ScavengeObject); 1707 store_buffer()->IteratePointersToNewSpace(&ScavengeObject);
1702 } 1708 }
1703 1709
1704 // Copy objects reachable from the encountered weak collections list. 1710 {
1705 scavenge_visitor.VisitPointer(&encountered_weak_collections_); 1711 GCTracer::Scope gc_scope(tracer(), GCTracer::Scope::SCAVENGER_WEAK);
1706 // Copy objects reachable from the encountered weak cells. 1712 // Copy objects reachable from the encountered weak collections list.
1707 scavenge_visitor.VisitPointer(&encountered_weak_cells_); 1713 scavenge_visitor.VisitPointer(&encountered_weak_collections_);
1708 1714 // Copy objects reachable from the encountered weak cells.
1709 // Copy objects reachable from the code flushing candidates list. 1715 scavenge_visitor.VisitPointer(&encountered_weak_cells_);
1710 MarkCompactCollector* collector = mark_compact_collector();
1711 if (collector->is_code_flushing_enabled()) {
1712 collector->code_flusher()->IteratePointersToFromSpace(&scavenge_visitor);
1713 } 1716 }
1714 1717
1715 new_space_front = DoScavenge(&scavenge_visitor, new_space_front); 1718 {
1719 // Copy objects reachable from the code flushing candidates list.
1720 GCTracer::Scope gc_scope(tracer(),
1721 GCTracer::Scope::SCAVENGER_CODE_FLUSH_CANDIDATES);
1722 MarkCompactCollector* collector = mark_compact_collector();
1723 if (collector->is_code_flushing_enabled()) {
1724 collector->code_flusher()->IteratePointersToFromSpace(&scavenge_visitor);
1725 }
1726 }
1716 1727
1717 while (isolate()->global_handles()->IterateObjectGroups( 1728 {
1718 &scavenge_visitor, &IsUnscavengedHeapObject)) { 1729 GCTracer::Scope gc_scope(tracer(), GCTracer::Scope::SCAVENGER_SEMISPACE);
1719 new_space_front = DoScavenge(&scavenge_visitor, new_space_front); 1730 new_space_front = DoScavenge(&scavenge_visitor, new_space_front);
1720 } 1731 }
1721 isolate()->global_handles()->RemoveObjectGroups(); 1732
1722 isolate()->global_handles()->RemoveImplicitRefGroups(); 1733 {
1734 GCTracer::Scope gc_scope(tracer(),
1735 GCTracer::Scope::SCAVENGER_OBJECT_GROUPS);
1736 while (isolate()->global_handles()->IterateObjectGroups(
1737 &scavenge_visitor, &IsUnscavengedHeapObject)) {
1738 new_space_front = DoScavenge(&scavenge_visitor, new_space_front);
1739 }
1740 isolate()->global_handles()->RemoveObjectGroups();
1741 isolate()->global_handles()->RemoveImplicitRefGroups();
1742 }
1723 1743
1724 isolate()->global_handles()->IdentifyNewSpaceWeakIndependentHandles( 1744 isolate()->global_handles()->IdentifyNewSpaceWeakIndependentHandles(
1725 &IsUnscavengedHeapObject); 1745 &IsUnscavengedHeapObject);
1726 1746
1727 isolate()->global_handles()->IterateNewSpaceWeakIndependentRoots( 1747 isolate()->global_handles()->IterateNewSpaceWeakIndependentRoots(
1728 &scavenge_visitor); 1748 &scavenge_visitor);
1729 new_space_front = DoScavenge(&scavenge_visitor, new_space_front); 1749 new_space_front = DoScavenge(&scavenge_visitor, new_space_front);
1730 1750
1731 UpdateNewSpaceReferencesInExternalStringTable( 1751 UpdateNewSpaceReferencesInExternalStringTable(
1732 &UpdateNewSpaceReferenceInExternalStringTableEntry); 1752 &UpdateNewSpaceReferenceInExternalStringTableEntry);
(...skipping 5153 matching lines...) Expand 10 before | Expand all | Expand 10 after
6886 *object_type = "CODE_TYPE"; \ 6906 *object_type = "CODE_TYPE"; \
6887 *object_sub_type = "CODE_AGE/" #name; \ 6907 *object_sub_type = "CODE_AGE/" #name; \
6888 return true; 6908 return true;
6889 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) 6909 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME)
6890 #undef COMPARE_AND_RETURN_NAME 6910 #undef COMPARE_AND_RETURN_NAME
6891 } 6911 }
6892 return false; 6912 return false;
6893 } 6913 }
6894 } // namespace internal 6914 } // namespace internal
6895 } // namespace v8 6915 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698