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

Side by Side Diff: src/heap/mark-compact.cc

Issue 1836013004: [heap] Added fine grained timers to MC_MARK_WEAK_CLOSURE. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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') | tools/eval_gc_time.sh » ('j') | 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/heap/mark-compact.h" 5 #include "src/heap/mark-compact.h"
6 6
7 #include "src/base/atomicops.h" 7 #include "src/base/atomicops.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/base/sys-info.h" 9 #include "src/base/sys-info.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 2124 matching lines...) Expand 10 before | Expand all | Expand 10 after
2135 ProcessTopOptimizedFrame(&root_visitor); 2135 ProcessTopOptimizedFrame(&root_visitor);
2136 } 2136 }
2137 2137
2138 { 2138 {
2139 GCTracer::Scope gc_scope(heap()->tracer(), 2139 GCTracer::Scope gc_scope(heap()->tracer(),
2140 GCTracer::Scope::MC_MARK_WEAK_CLOSURE); 2140 GCTracer::Scope::MC_MARK_WEAK_CLOSURE);
2141 2141
2142 // The objects reachable from the roots are marked, yet unreachable 2142 // The objects reachable from the roots are marked, yet unreachable
2143 // objects are unmarked. Mark objects reachable due to host 2143 // objects are unmarked. Mark objects reachable due to host
2144 // application specific logic or through Harmony weak maps. 2144 // application specific logic or through Harmony weak maps.
2145 ProcessEphemeralMarking(&root_visitor, false); 2145 {
2146 GCTracer::Scope gc_scope(heap()->tracer(),
2147 GCTracer::Scope::MC_MARK_WEAK_CLOSURE_EPHEMERAL);
2148 ProcessEphemeralMarking(&root_visitor, false);
2149 ProcessMarkingDeque();
2150 }
2146 2151
2147 // The objects reachable from the roots, weak maps or object groups 2152 // The objects reachable from the roots, weak maps or object groups
2148 // are marked. Objects pointed to only by weak global handles cannot be 2153 // are marked. Objects pointed to only by weak global handles cannot be
2149 // immediately reclaimed. Instead, we have to mark them as pending and mark 2154 // immediately reclaimed. Instead, we have to mark them as pending and mark
2150 // objects reachable from them. 2155 // objects reachable from them.
2151 // 2156 //
2152 // First we identify nonlive weak handles and mark them as pending 2157 // First we identify nonlive weak handles and mark them as pending
2153 // destruction. 2158 // destruction.
2154 heap()->isolate()->global_handles()->IdentifyWeakHandles( 2159 {
2155 &IsUnmarkedHeapObject); 2160 GCTracer::Scope gc_scope(
2161 heap()->tracer(), GCTracer::Scope::MC_MARK_WEAK_CLOSURE_WEAK_HANDLES);
2162 heap()->isolate()->global_handles()->IdentifyWeakHandles(
2163 &IsUnmarkedHeapObject);
2164 ProcessMarkingDeque();
2165 }
2156 // Then we mark the objects. 2166 // Then we mark the objects.
2157 heap()->isolate()->global_handles()->IterateWeakRoots(&root_visitor); 2167
2158 ProcessMarkingDeque(); 2168 {
2169 GCTracer::Scope gc_scope(
2170 heap()->tracer(), GCTracer::Scope::MC_MARK_WEAK_CLOSURE_WEAK_ROOTS);
2171 heap()->isolate()->global_handles()->IterateWeakRoots(&root_visitor);
2172 ProcessMarkingDeque();
2173 }
2159 2174
2160 // Repeat Harmony weak maps marking to mark unmarked objects reachable from 2175 // Repeat Harmony weak maps marking to mark unmarked objects reachable from
2161 // the weak roots we just marked as pending destruction. 2176 // the weak roots we just marked as pending destruction.
2162 // 2177 //
2163 // We only process harmony collections, as all object groups have been fully 2178 // We only process harmony collections, as all object groups have been fully
2164 // processed and no weakly reachable node can discover new objects groups. 2179 // processed and no weakly reachable node can discover new objects groups.
2165 ProcessEphemeralMarking(&root_visitor, true); 2180 {
2181 GCTracer::Scope gc_scope(heap()->tracer(),
2182 GCTracer::Scope::MC_MARK_WEAK_CLOSURE_HARMONY);
2183 ProcessEphemeralMarking(&root_visitor, true);
2184 ProcessMarkingDeque();
2185 }
2166 } 2186 }
2167 2187
2168 if (FLAG_print_cumulative_gc_stat) { 2188 if (FLAG_print_cumulative_gc_stat) {
2169 heap_->tracer()->AddMarkingTime(heap_->MonotonicallyIncreasingTimeInMs() - 2189 heap_->tracer()->AddMarkingTime(heap_->MonotonicallyIncreasingTimeInMs() -
2170 start_time); 2190 start_time);
2171 } 2191 }
2172 if (FLAG_track_gc_object_stats) { 2192 if (FLAG_track_gc_object_stats) {
2173 if (FLAG_trace_gc_object_stats) { 2193 if (FLAG_trace_gc_object_stats) {
2174 heap()->object_stats_->TraceObjectStats(); 2194 heap()->object_stats_->TraceObjectStats();
2175 } 2195 }
(...skipping 1633 matching lines...) Expand 10 before | Expand all | Expand 10 after
3809 MarkBit mark_bit = Marking::MarkBitFrom(host); 3829 MarkBit mark_bit = Marking::MarkBitFrom(host);
3810 if (Marking::IsBlack(mark_bit)) { 3830 if (Marking::IsBlack(mark_bit)) {
3811 RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host); 3831 RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host);
3812 RecordRelocSlot(host, &rinfo, target); 3832 RecordRelocSlot(host, &rinfo, target);
3813 } 3833 }
3814 } 3834 }
3815 } 3835 }
3816 3836
3817 } // namespace internal 3837 } // namespace internal
3818 } // namespace v8 3838 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | tools/eval_gc_time.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698