OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/gc-tracer.h" | 5 #include "src/heap/gc-tracer.h" |
6 | 6 |
7 #include "src/counters.h" | 7 #include "src/counters.h" |
8 #include "src/heap/heap-inl.h" | 8 #include "src/heap/heap-inl.h" |
9 #include "src/isolate.h" | 9 #include "src/isolate.h" |
10 | 10 |
(...skipping 13 matching lines...) Expand all Loading... |
24 GCTracer::Scope::Scope(GCTracer* tracer, ScopeId scope) | 24 GCTracer::Scope::Scope(GCTracer* tracer, ScopeId scope) |
25 : tracer_(tracer), scope_(scope) { | 25 : tracer_(tracer), scope_(scope) { |
26 start_time_ = tracer_->heap_->MonotonicallyIncreasingTimeInMs(); | 26 start_time_ = tracer_->heap_->MonotonicallyIncreasingTimeInMs(); |
27 // TODO(cbruni): remove once we fully moved to a trace-based system. | 27 // TODO(cbruni): remove once we fully moved to a trace-based system. |
28 if (FLAG_runtime_call_stats) { | 28 if (FLAG_runtime_call_stats) { |
29 RuntimeCallStats::Enter(tracer_->heap_->isolate(), &timer_, | 29 RuntimeCallStats::Enter(tracer_->heap_->isolate(), &timer_, |
30 &RuntimeCallStats::GC); | 30 &RuntimeCallStats::GC); |
31 } | 31 } |
32 } | 32 } |
33 | 33 |
34 | |
35 GCTracer::Scope::~Scope() { | 34 GCTracer::Scope::~Scope() { |
36 DCHECK(scope_ < NUMBER_OF_SCOPES); // scope_ is unsigned. | 35 tracer_->AddScopeSample( |
37 tracer_->current_.scopes[scope_] += | 36 scope_, tracer_->heap_->MonotonicallyIncreasingTimeInMs() - start_time_); |
38 tracer_->heap_->MonotonicallyIncreasingTimeInMs() - start_time_; | |
39 // TODO(cbruni): remove once we fully moved to a trace-based system. | 37 // TODO(cbruni): remove once we fully moved to a trace-based system. |
40 if (FLAG_runtime_call_stats) { | 38 if (FLAG_runtime_call_stats) { |
41 RuntimeCallStats::Leave(tracer_->heap_->isolate(), &timer_); | 39 RuntimeCallStats::Leave(tracer_->heap_->isolate(), &timer_); |
42 } | 40 } |
43 } | 41 } |
44 | 42 |
| 43 void GCTracer::AddScopeSample(Scope::ScopeId scope, double duration) { |
| 44 DCHECK(scope < Scope::NUMBER_OF_SCOPES); |
| 45 if (scope >= Scope::FIRST_INCREMENTAL_SCOPE && |
| 46 scope <= Scope::LAST_INCREMENTAL_SCOPE) { |
| 47 cumulative_incremental_scopes_[scope] += duration; |
| 48 } else { |
| 49 current_.scopes[scope] += duration; |
| 50 } |
| 51 } |
| 52 |
45 const char* GCTracer::Scope::Name(ScopeId id) { | 53 const char* GCTracer::Scope::Name(ScopeId id) { |
46 #define CASE(scope) \ | 54 #define CASE(scope) \ |
47 case Scope::scope: \ | 55 case Scope::scope: \ |
48 return "V8.GC_" #scope; | 56 return "V8.GC_" #scope; |
49 switch (id) { | 57 switch (id) { |
50 TRACER_SCOPES(CASE) | 58 TRACER_SCOPES(CASE) |
51 case Scope::NUMBER_OF_SCOPES: | 59 case Scope::NUMBER_OF_SCOPES: |
52 break; | 60 break; |
53 } | 61 } |
54 #undef CASE | 62 #undef CASE |
55 return "(unknown)"; | 63 return "(unknown)"; |
56 } | 64 } |
57 | 65 |
58 GCTracer::Event::Event(Type type, const char* gc_reason, | 66 GCTracer::Event::Event(Type type, const char* gc_reason, |
59 const char* collector_reason) | 67 const char* collector_reason) |
60 : type(type), | 68 : type(type), |
61 gc_reason(gc_reason), | 69 gc_reason(gc_reason), |
62 collector_reason(collector_reason), | 70 collector_reason(collector_reason), |
63 start_time(0.0), | 71 start_time(0.0), |
64 end_time(0.0), | 72 end_time(0.0), |
65 reduce_memory(false), | 73 reduce_memory(false), |
66 start_object_size(0), | 74 start_object_size(0), |
67 end_object_size(0), | 75 end_object_size(0), |
68 start_memory_size(0), | 76 start_memory_size(0), |
69 end_memory_size(0), | 77 end_memory_size(0), |
70 start_holes_size(0), | 78 start_holes_size(0), |
71 end_holes_size(0), | 79 end_holes_size(0), |
| 80 new_space_object_size(0), |
| 81 survived_new_space_object_size(0), |
72 cumulative_incremental_marking_steps(0), | 82 cumulative_incremental_marking_steps(0), |
73 incremental_marking_steps(0), | 83 incremental_marking_steps(0), |
74 cumulative_incremental_marking_bytes(0), | 84 cumulative_incremental_marking_bytes(0), |
75 incremental_marking_bytes(0), | 85 incremental_marking_bytes(0), |
76 cumulative_incremental_marking_duration(0.0), | 86 cumulative_incremental_marking_duration(0.0), |
77 incremental_marking_duration(0.0), | 87 incremental_marking_duration(0.0), |
78 cumulative_pure_incremental_marking_duration(0.0), | 88 cumulative_pure_incremental_marking_duration(0.0), |
79 pure_incremental_marking_duration(0.0), | 89 pure_incremental_marking_duration(0.0), |
80 longest_incremental_marking_step(0.0) { | 90 longest_incremental_marking_step(0.0), |
| 91 cumulative_incremental_marking_finalization_steps(0), |
| 92 cumulative_incremental_marking_finalizaton_duration(0), |
| 93 longest_incremental_marking_finalization_step(0), |
| 94 incremental_marking_finalizaton_steps(0), |
| 95 incremental_marking_finalization_duration(0) { |
| 96 for (int i = 0; i < Scope::NUMBER_OF_INCREMENTAL_SCOPES; i++) { |
| 97 cumulative_incremental_scopes[i] = 0; |
| 98 } |
81 for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) { | 99 for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) { |
82 scopes[i] = 0; | 100 scopes[i] = 0; |
83 } | 101 } |
84 } | 102 } |
85 | 103 |
86 | 104 |
87 const char* GCTracer::Event::TypeName(bool short_name) const { | 105 const char* GCTracer::Event::TypeName(bool short_name) const { |
88 switch (type) { | 106 switch (type) { |
89 case SCAVENGER: | 107 case SCAVENGER: |
90 if (short_name) { | 108 if (short_name) { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 cumulative_marking_duration_ = 0.0; | 165 cumulative_marking_duration_ = 0.0; |
148 cumulative_sweeping_duration_ = 0.0; | 166 cumulative_sweeping_duration_ = 0.0; |
149 allocation_time_ms_ = 0.0; | 167 allocation_time_ms_ = 0.0; |
150 new_space_allocation_counter_bytes_ = 0.0; | 168 new_space_allocation_counter_bytes_ = 0.0; |
151 old_generation_allocation_counter_bytes_ = 0.0; | 169 old_generation_allocation_counter_bytes_ = 0.0; |
152 allocation_duration_since_gc_ = 0.0; | 170 allocation_duration_since_gc_ = 0.0; |
153 new_space_allocation_in_bytes_since_gc_ = 0.0; | 171 new_space_allocation_in_bytes_since_gc_ = 0.0; |
154 old_generation_allocation_in_bytes_since_gc_ = 0.0; | 172 old_generation_allocation_in_bytes_since_gc_ = 0.0; |
155 combined_mark_compact_speed_cache_ = 0.0; | 173 combined_mark_compact_speed_cache_ = 0.0; |
156 start_counter_ = 0; | 174 start_counter_ = 0; |
| 175 for (int i = 0; i < Scope::NUMBER_OF_INCREMENTAL_SCOPES; i++) { |
| 176 cumulative_incremental_scopes_[i] = 0; |
| 177 } |
| 178 current_ = Event(Event::START, NULL, NULL); |
| 179 current_.end_time = heap_->MonotonicallyIncreasingTimeInMs(); |
| 180 previous_ = previous_incremental_mark_compactor_event_ = current_; |
157 } | 181 } |
158 | 182 |
159 void GCTracer::Start(GarbageCollector collector, const char* gc_reason, | 183 void GCTracer::Start(GarbageCollector collector, const char* gc_reason, |
160 const char* collector_reason) { | 184 const char* collector_reason) { |
161 start_counter_++; | 185 start_counter_++; |
162 if (start_counter_ != 1) return; | 186 if (start_counter_ != 1) return; |
163 | 187 |
164 previous_ = current_; | 188 previous_ = current_; |
165 double start_time = heap_->MonotonicallyIncreasingTimeInMs(); | 189 double start_time = heap_->MonotonicallyIncreasingTimeInMs(); |
166 SampleAllocation(start_time, heap_->NewSpaceAllocationCounter(), | 190 SampleAllocation(start_time, heap_->NewSpaceAllocationCounter(), |
(...skipping 22 matching lines...) Expand all Loading... |
189 | 213 |
190 current_.cumulative_incremental_marking_steps = | 214 current_.cumulative_incremental_marking_steps = |
191 cumulative_incremental_marking_steps_; | 215 cumulative_incremental_marking_steps_; |
192 current_.cumulative_incremental_marking_bytes = | 216 current_.cumulative_incremental_marking_bytes = |
193 cumulative_incremental_marking_bytes_; | 217 cumulative_incremental_marking_bytes_; |
194 current_.cumulative_incremental_marking_duration = | 218 current_.cumulative_incremental_marking_duration = |
195 cumulative_incremental_marking_duration_; | 219 cumulative_incremental_marking_duration_; |
196 current_.cumulative_pure_incremental_marking_duration = | 220 current_.cumulative_pure_incremental_marking_duration = |
197 cumulative_pure_incremental_marking_duration_; | 221 cumulative_pure_incremental_marking_duration_; |
198 current_.longest_incremental_marking_step = longest_incremental_marking_step_; | 222 current_.longest_incremental_marking_step = longest_incremental_marking_step_; |
| 223 current_.cumulative_incremental_marking_finalization_steps = |
| 224 cumulative_incremental_marking_finalization_steps_; |
| 225 current_.cumulative_incremental_marking_finalizaton_duration = |
| 226 cumulative_incremental_marking_finalization_duration_; |
| 227 current_.longest_incremental_marking_finalization_step = |
| 228 longest_incremental_marking_finalization_step_; |
199 | 229 |
200 for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) { | 230 for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) { |
201 current_.scopes[i] = 0; | 231 current_.scopes[i] = 0; |
202 } | 232 } |
| 233 |
203 int committed_memory = static_cast<int>(heap_->CommittedMemory() / KB); | 234 int committed_memory = static_cast<int>(heap_->CommittedMemory() / KB); |
204 int used_memory = static_cast<int>(current_.start_object_size / KB); | 235 int used_memory = static_cast<int>(current_.start_object_size / KB); |
205 heap_->isolate()->counters()->aggregated_memory_heap_committed()->AddSample( | 236 heap_->isolate()->counters()->aggregated_memory_heap_committed()->AddSample( |
206 start_time, committed_memory); | 237 start_time, committed_memory); |
207 heap_->isolate()->counters()->aggregated_memory_heap_used()->AddSample( | 238 heap_->isolate()->counters()->aggregated_memory_heap_used()->AddSample( |
208 start_time, used_memory); | 239 start_time, used_memory); |
209 // TODO(cbruni): remove once we fully moved to a trace-based system. | 240 // TODO(cbruni): remove once we fully moved to a trace-based system. |
210 if (FLAG_runtime_call_stats) { | 241 if (FLAG_runtime_call_stats) { |
211 RuntimeCallStats::Enter(heap_->isolate(), &timer_, &RuntimeCallStats::GC); | 242 RuntimeCallStats::Enter(heap_->isolate(), &timer_, &RuntimeCallStats::GC); |
212 } | 243 } |
213 } | 244 } |
214 | 245 |
215 void GCTracer::Stop(GarbageCollector collector) { | 246 void GCTracer::Stop(GarbageCollector collector) { |
216 start_counter_--; | 247 start_counter_--; |
217 if (start_counter_ != 0) { | 248 if (start_counter_ != 0) { |
218 Output("[Finished reentrant %s during %s.]\n", | 249 Output("[Finished reentrant %s during %s.]\n", |
219 collector == SCAVENGER ? "Scavenge" : "Mark-sweep", | 250 collector == SCAVENGER ? "Scavenge" : "Mark-sweep", |
220 current_.TypeName(false)); | 251 current_.TypeName(false)); |
221 return; | 252 return; |
222 } | 253 } |
223 | 254 |
224 DCHECK(start_counter_ >= 0); | 255 DCHECK(start_counter_ >= 0); |
225 DCHECK((collector == SCAVENGER && current_.type == Event::SCAVENGER) || | 256 DCHECK((collector == SCAVENGER && current_.type == Event::SCAVENGER) || |
226 (collector == MARK_COMPACTOR && | 257 (collector == MARK_COMPACTOR && |
227 (current_.type == Event::MARK_COMPACTOR || | 258 (current_.type == Event::MARK_COMPACTOR || |
228 current_.type == Event::INCREMENTAL_MARK_COMPACTOR))); | 259 current_.type == Event::INCREMENTAL_MARK_COMPACTOR))); |
229 | 260 |
| 261 for (int i = Scope::FIRST_INCREMENTAL_SCOPE; |
| 262 i <= Scope::LAST_INCREMENTAL_SCOPE; i++) { |
| 263 current_.cumulative_incremental_scopes[i] = |
| 264 cumulative_incremental_scopes_[i]; |
| 265 } |
| 266 |
230 current_.end_time = heap_->MonotonicallyIncreasingTimeInMs(); | 267 current_.end_time = heap_->MonotonicallyIncreasingTimeInMs(); |
231 current_.end_object_size = heap_->SizeOfObjects(); | 268 current_.end_object_size = heap_->SizeOfObjects(); |
232 current_.end_memory_size = heap_->memory_allocator()->Size(); | 269 current_.end_memory_size = heap_->memory_allocator()->Size(); |
233 current_.end_holes_size = CountTotalHolesSize(heap_); | 270 current_.end_holes_size = CountTotalHolesSize(heap_); |
234 current_.survived_new_space_object_size = heap_->SurvivedNewSpaceObjectSize(); | 271 current_.survived_new_space_object_size = heap_->SurvivedNewSpaceObjectSize(); |
235 | 272 |
236 AddAllocation(current_.end_time); | 273 AddAllocation(current_.end_time); |
237 | 274 |
238 int committed_memory = static_cast<int>(heap_->CommittedMemory() / KB); | 275 int committed_memory = static_cast<int>(heap_->CommittedMemory() / KB); |
239 int used_memory = static_cast<int>(current_.end_object_size / KB); | 276 int used_memory = static_cast<int>(current_.end_object_size / KB); |
240 heap_->isolate()->counters()->aggregated_memory_heap_committed()->AddSample( | 277 heap_->isolate()->counters()->aggregated_memory_heap_committed()->AddSample( |
241 current_.end_time, committed_memory); | 278 current_.end_time, committed_memory); |
242 heap_->isolate()->counters()->aggregated_memory_heap_used()->AddSample( | 279 heap_->isolate()->counters()->aggregated_memory_heap_used()->AddSample( |
243 current_.end_time, used_memory); | 280 current_.end_time, used_memory); |
244 | 281 |
245 double duration = current_.end_time - current_.start_time; | 282 double duration = current_.end_time - current_.start_time; |
| 283 |
| 284 const Event* baseline = nullptr; |
246 if (current_.type == Event::SCAVENGER) { | 285 if (current_.type == Event::SCAVENGER) { |
247 current_.incremental_marking_steps = | 286 baseline = &previous_; |
248 current_.cumulative_incremental_marking_steps - | |
249 previous_.cumulative_incremental_marking_steps; | |
250 current_.incremental_marking_bytes = | |
251 current_.cumulative_incremental_marking_bytes - | |
252 previous_.cumulative_incremental_marking_bytes; | |
253 current_.incremental_marking_duration = | |
254 current_.cumulative_incremental_marking_duration - | |
255 previous_.cumulative_incremental_marking_duration; | |
256 current_.pure_incremental_marking_duration = | |
257 current_.cumulative_pure_incremental_marking_duration - | |
258 previous_.cumulative_pure_incremental_marking_duration; | |
259 recorded_scavenges_total_.Push( | 287 recorded_scavenges_total_.Push( |
260 MakeBytesAndDuration(current_.new_space_object_size, duration)); | 288 MakeBytesAndDuration(current_.new_space_object_size, duration)); |
261 recorded_scavenges_survived_.Push(MakeBytesAndDuration( | 289 recorded_scavenges_survived_.Push(MakeBytesAndDuration( |
262 current_.survived_new_space_object_size, duration)); | 290 current_.survived_new_space_object_size, duration)); |
263 } else if (current_.type == Event::INCREMENTAL_MARK_COMPACTOR) { | 291 } else if (current_.type == Event::INCREMENTAL_MARK_COMPACTOR) { |
264 current_.incremental_marking_steps = | 292 baseline = &previous_incremental_mark_compactor_event_; |
265 current_.cumulative_incremental_marking_steps - | |
266 previous_incremental_mark_compactor_event_ | |
267 .cumulative_incremental_marking_steps; | |
268 current_.incremental_marking_bytes = | |
269 current_.cumulative_incremental_marking_bytes - | |
270 previous_incremental_mark_compactor_event_ | |
271 .cumulative_incremental_marking_bytes; | |
272 current_.incremental_marking_duration = | |
273 current_.cumulative_incremental_marking_duration - | |
274 previous_incremental_mark_compactor_event_ | |
275 .cumulative_incremental_marking_duration; | |
276 current_.pure_incremental_marking_duration = | |
277 current_.cumulative_pure_incremental_marking_duration - | |
278 previous_incremental_mark_compactor_event_ | |
279 .cumulative_pure_incremental_marking_duration; | |
280 longest_incremental_marking_step_ = 0.0; | 293 longest_incremental_marking_step_ = 0.0; |
| 294 longest_incremental_marking_finalization_step_ = 0.0; |
281 recorded_incremental_marking_steps_.Push( | 295 recorded_incremental_marking_steps_.Push( |
282 MakeBytesAndDuration(current_.incremental_marking_bytes, | 296 MakeBytesAndDuration(current_.incremental_marking_bytes, |
283 current_.pure_incremental_marking_duration)); | 297 current_.pure_incremental_marking_duration)); |
284 recorded_incremental_mark_compacts_.Push( | 298 recorded_incremental_mark_compacts_.Push( |
285 MakeBytesAndDuration(current_.start_object_size, duration)); | 299 MakeBytesAndDuration(current_.start_object_size, duration)); |
286 combined_mark_compact_speed_cache_ = 0.0; | 300 combined_mark_compact_speed_cache_ = 0.0; |
287 } else { | 301 } else { |
288 DCHECK(current_.incremental_marking_bytes == 0); | 302 DCHECK(current_.incremental_marking_bytes == 0); |
289 DCHECK(current_.incremental_marking_duration == 0); | 303 DCHECK(current_.incremental_marking_duration == 0); |
290 DCHECK(current_.pure_incremental_marking_duration == 0); | 304 DCHECK(current_.pure_incremental_marking_duration == 0); |
291 longest_incremental_marking_step_ = 0.0; | 305 longest_incremental_marking_step_ = 0.0; |
| 306 longest_incremental_marking_finalization_step_ = 0.0; |
292 recorded_mark_compacts_.Push( | 307 recorded_mark_compacts_.Push( |
293 MakeBytesAndDuration(current_.start_object_size, duration)); | 308 MakeBytesAndDuration(current_.start_object_size, duration)); |
294 combined_mark_compact_speed_cache_ = 0.0; | 309 combined_mark_compact_speed_cache_ = 0.0; |
295 } | 310 } |
296 | 311 |
297 // TODO(ernstm): move the code below out of GCTracer. | 312 if (baseline != nullptr) { |
| 313 current_.incremental_marking_steps = |
| 314 current_.cumulative_incremental_marking_steps - |
| 315 baseline->cumulative_incremental_marking_steps; |
| 316 current_.incremental_marking_bytes = |
| 317 current_.cumulative_incremental_marking_bytes - |
| 318 baseline->cumulative_incremental_marking_bytes; |
| 319 current_.incremental_marking_duration = |
| 320 current_.cumulative_incremental_marking_duration - |
| 321 baseline->cumulative_incremental_marking_duration; |
| 322 current_.pure_incremental_marking_duration = |
| 323 current_.cumulative_pure_incremental_marking_duration - |
| 324 baseline->cumulative_pure_incremental_marking_duration; |
| 325 current_.incremental_marking_finalizaton_steps = |
| 326 current_.cumulative_incremental_marking_finalization_steps - |
| 327 baseline->cumulative_incremental_marking_finalization_steps; |
| 328 current_.incremental_marking_finalization_duration = |
| 329 current_.cumulative_incremental_marking_finalizaton_duration - |
| 330 baseline->cumulative_incremental_marking_finalizaton_duration; |
| 331 for (int i = Scope::FIRST_INCREMENTAL_SCOPE; |
| 332 i <= Scope::LAST_INCREMENTAL_SCOPE; i++) { |
| 333 current_.scopes[i] = current_.cumulative_incremental_scopes[i] - |
| 334 baseline->cumulative_incremental_scopes[i]; |
| 335 } |
| 336 } |
298 | 337 |
299 double spent_in_mutator = Max(current_.start_time - previous_.end_time, 0.0); | 338 double spent_in_mutator = Max(current_.start_time - previous_.end_time, 0.0); |
300 | |
301 heap_->UpdateCumulativeGCStatistics(duration, spent_in_mutator, | 339 heap_->UpdateCumulativeGCStatistics(duration, spent_in_mutator, |
302 current_.scopes[Scope::MC_MARK]); | 340 current_.scopes[Scope::MC_MARK]); |
303 | 341 |
304 if (current_.type == Event::SCAVENGER && FLAG_trace_gc_ignore_scavenger) | 342 if (current_.type == Event::SCAVENGER && FLAG_trace_gc_ignore_scavenger) |
305 return; | 343 return; |
306 | 344 |
307 if (FLAG_trace_gc_nvp) | 345 if (FLAG_trace_gc_nvp) { |
308 PrintNVP(); | 346 PrintNVP(); |
309 else | 347 } else { |
310 Print(); | 348 Print(); |
| 349 } |
311 | 350 |
312 if (FLAG_trace_gc) { | 351 if (FLAG_trace_gc) { |
313 heap_->PrintShortHeapStatistics(); | 352 heap_->PrintShortHeapStatistics(); |
314 } | 353 } |
315 | 354 |
316 longest_incremental_marking_finalization_step_ = 0.0; | |
317 cumulative_incremental_marking_finalization_steps_ = 0; | |
318 cumulative_incremental_marking_finalization_duration_ = 0.0; | |
319 // TODO(cbruni): remove once we fully moved to a trace-based system. | 355 // TODO(cbruni): remove once we fully moved to a trace-based system. |
320 if (FLAG_runtime_call_stats) { | 356 if (FLAG_runtime_call_stats) { |
321 RuntimeCallStats::Leave(heap_->isolate(), &timer_); | 357 RuntimeCallStats::Leave(heap_->isolate(), &timer_); |
322 } | 358 } |
323 } | 359 } |
324 | 360 |
325 | 361 |
326 void GCTracer::SampleAllocation(double current_ms, | 362 void GCTracer::SampleAllocation(double current_ms, |
327 size_t new_space_counter_bytes, | 363 size_t new_space_counter_bytes, |
328 size_t old_generation_counter_bytes) { | 364 size_t old_generation_counter_bytes) { |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 "evacuate=%.1f " | 604 "evacuate=%.1f " |
569 "evacuate.candidates=%.1f " | 605 "evacuate.candidates=%.1f " |
570 "evacuate.clean_up=%.1f " | 606 "evacuate.clean_up=%.1f " |
571 "evacuate.copy=%.1f " | 607 "evacuate.copy=%.1f " |
572 "evacuate.update_pointers=%.1f " | 608 "evacuate.update_pointers=%.1f " |
573 "evacuate.update_pointers.to_evacuated=%.1f " | 609 "evacuate.update_pointers.to_evacuated=%.1f " |
574 "evacuate.update_pointers.to_new=%.1f " | 610 "evacuate.update_pointers.to_new=%.1f " |
575 "evacuate.update_pointers.weak=%.1f " | 611 "evacuate.update_pointers.weak=%.1f " |
576 "external.mc_prologue=%.1f " | 612 "external.mc_prologue=%.1f " |
577 "external.mc_epilogue=%.1f " | 613 "external.mc_epilogue=%.1f " |
578 "external.mc_incremental_prologue=%.1f " | |
579 "external.mc_incremental_epilogue=%.1f " | |
580 "external.weak_global_handles=%.1f " | 614 "external.weak_global_handles=%.1f " |
581 "finish=%.1f " | 615 "finish=%.1f " |
582 "mark=%.1f " | 616 "mark=%.1f " |
583 "mark.finish_incremental=%.1f " | 617 "mark.finish_incremental=%.1f " |
| 618 "mark.object_grouping=%.1f " |
584 "mark.prepare_code_flush=%.1f " | 619 "mark.prepare_code_flush=%.1f " |
585 "mark.roots=%.1f " | 620 "mark.roots=%.1f " |
586 "mark.weak_closure=%.1f " | 621 "mark.weak_closure=%.1f " |
587 "mark.weak_closure.ephemeral=%.1f " | 622 "mark.weak_closure.ephemeral=%.1f " |
588 "mark.weak_closure.weak_handles=%.1f " | 623 "mark.weak_closure.weak_handles=%.1f " |
589 "mark.weak_closure.weak_roots=%.1f " | 624 "mark.weak_closure.weak_roots=%.1f " |
590 "mark.weak_closure.harmony=%.1f " | 625 "mark.weak_closure.harmony=%.1f " |
| 626 "mark.wrapper_prologue=%.1f " |
| 627 "mark.wrapper_epilogue=%.1f " |
| 628 "mark.wrapper_tracing=%.1f " |
591 "sweep=%.1f " | 629 "sweep=%.1f " |
592 "sweep.code=%.1f " | 630 "sweep.code=%.1f " |
593 "sweep.map=%.1f " | 631 "sweep.map=%.1f " |
594 "sweep.old=%.1f " | 632 "sweep.old=%.1f " |
595 "incremental_finalize=%.1f " | 633 "incremental=%.1f " |
596 "steps_count=%d " | 634 "incremental.finalize=%.1f " |
597 "steps_took=%.1f " | 635 "incremental.finalize.external.prologue=%.1f " |
598 "longest_step=%.1f " | 636 "incremental.finalize.external.epilogue=%.1f " |
599 "finalization_steps_count=%d " | 637 "incremental.finalize.object_grouping=%.1f " |
600 "finalization_steps_took=%.1f " | 638 "incremental.wrapper_prologue=%.1f " |
601 "finalization_longest_step=%.1f " | 639 "incremental.wrapper_tracing=%.1f " |
| 640 "incremental_finalize_longest_step=%.1f " |
| 641 "incremental_finalize_steps_count=%d " |
| 642 "incremental_steps_count=%d " |
| 643 "incremental_longest_step=%.1f " |
602 "incremental_marking_throughput=%.f " | 644 "incremental_marking_throughput=%.f " |
603 "total_size_before=%" V8PRIdPTR | 645 "total_size_before=%" V8PRIdPTR |
604 " " | 646 " " |
605 "total_size_after=%" V8PRIdPTR | 647 "total_size_after=%" V8PRIdPTR |
606 " " | 648 " " |
607 "holes_size_before=%" V8PRIdPTR | 649 "holes_size_before=%" V8PRIdPTR |
608 " " | 650 " " |
609 "holes_size_after=%" V8PRIdPTR | 651 "holes_size_after=%" V8PRIdPTR |
610 " " | 652 " " |
611 "allocated=%" V8PRIdPTR | 653 "allocated=%" V8PRIdPTR |
(...skipping 28 matching lines...) Expand all Loading... |
640 current_.scopes[Scope::MC_EVACUATE], | 682 current_.scopes[Scope::MC_EVACUATE], |
641 current_.scopes[Scope::MC_EVACUATE_CANDIDATES], | 683 current_.scopes[Scope::MC_EVACUATE_CANDIDATES], |
642 current_.scopes[Scope::MC_EVACUATE_CLEAN_UP], | 684 current_.scopes[Scope::MC_EVACUATE_CLEAN_UP], |
643 current_.scopes[Scope::MC_EVACUATE_COPY], | 685 current_.scopes[Scope::MC_EVACUATE_COPY], |
644 current_.scopes[Scope::MC_EVACUATE_UPDATE_POINTERS], | 686 current_.scopes[Scope::MC_EVACUATE_UPDATE_POINTERS], |
645 current_.scopes[Scope::MC_EVACUATE_UPDATE_POINTERS_TO_EVACUATED], | 687 current_.scopes[Scope::MC_EVACUATE_UPDATE_POINTERS_TO_EVACUATED], |
646 current_.scopes[Scope::MC_EVACUATE_UPDATE_POINTERS_TO_NEW], | 688 current_.scopes[Scope::MC_EVACUATE_UPDATE_POINTERS_TO_NEW], |
647 current_.scopes[Scope::MC_EVACUATE_UPDATE_POINTERS_WEAK], | 689 current_.scopes[Scope::MC_EVACUATE_UPDATE_POINTERS_WEAK], |
648 current_.scopes[Scope::MC_EXTERNAL_PROLOGUE], | 690 current_.scopes[Scope::MC_EXTERNAL_PROLOGUE], |
649 current_.scopes[Scope::MC_EXTERNAL_EPILOGUE], | 691 current_.scopes[Scope::MC_EXTERNAL_EPILOGUE], |
650 current_.scopes[Scope::MC_INCREMENTAL_EXTERNAL_PROLOGUE], | |
651 current_.scopes[Scope::MC_INCREMENTAL_EXTERNAL_EPILOGUE], | |
652 current_.scopes[Scope::EXTERNAL_WEAK_GLOBAL_HANDLES], | 692 current_.scopes[Scope::EXTERNAL_WEAK_GLOBAL_HANDLES], |
653 current_.scopes[Scope::MC_FINISH], current_.scopes[Scope::MC_MARK], | 693 current_.scopes[Scope::MC_FINISH], current_.scopes[Scope::MC_MARK], |
654 current_.scopes[Scope::MC_MARK_FINISH_INCREMENTAL], | 694 current_.scopes[Scope::MC_MARK_FINISH_INCREMENTAL], |
| 695 current_.scopes[Scope::MC_MARK_OBJECT_GROUPING], |
655 current_.scopes[Scope::MC_MARK_PREPARE_CODE_FLUSH], | 696 current_.scopes[Scope::MC_MARK_PREPARE_CODE_FLUSH], |
656 current_.scopes[Scope::MC_MARK_ROOTS], | 697 current_.scopes[Scope::MC_MARK_ROOTS], |
657 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE], | 698 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE], |
658 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE_EPHEMERAL], | 699 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE_EPHEMERAL], |
659 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE_WEAK_HANDLES], | 700 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE_WEAK_HANDLES], |
660 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE_WEAK_ROOTS], | 701 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE_WEAK_ROOTS], |
661 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE_HARMONY], | 702 current_.scopes[Scope::MC_MARK_WEAK_CLOSURE_HARMONY], |
| 703 current_.scopes[Scope::MC_MARK_WRAPPER_PROLOGUE], |
| 704 current_.scopes[Scope::MC_MARK_WRAPPER_EPILOGUE], |
| 705 current_.scopes[Scope::MC_MARK_WRAPPER_TRACING], |
662 current_.scopes[Scope::MC_SWEEP], | 706 current_.scopes[Scope::MC_SWEEP], |
663 current_.scopes[Scope::MC_SWEEP_CODE], | 707 current_.scopes[Scope::MC_SWEEP_CODE], |
664 current_.scopes[Scope::MC_SWEEP_MAP], | 708 current_.scopes[Scope::MC_SWEEP_MAP], |
665 current_.scopes[Scope::MC_SWEEP_OLD], | 709 current_.scopes[Scope::MC_SWEEP_OLD], |
| 710 current_.incremental_marking_duration, |
666 current_.scopes[Scope::MC_INCREMENTAL_FINALIZE], | 711 current_.scopes[Scope::MC_INCREMENTAL_FINALIZE], |
| 712 current_.scopes[Scope::MC_INCREMENTAL_EXTERNAL_PROLOGUE], |
| 713 current_.scopes[Scope::MC_INCREMENTAL_EXTERNAL_EPILOGUE], |
| 714 current_.scopes[Scope::MC_INCREMENTAL_FINALIZE_OBJECT_GROUPING], |
| 715 current_.scopes[Scope::MC_INCREMENTAL_WRAPPER_PROLOGUE], |
| 716 current_.scopes[Scope::MC_INCREMENTAL_WRAPPER_TRACING], |
| 717 current_.longest_incremental_marking_finalization_step, |
| 718 current_.incremental_marking_finalizaton_steps, |
667 current_.incremental_marking_steps, | 719 current_.incremental_marking_steps, |
668 current_.incremental_marking_duration, | |
669 current_.longest_incremental_marking_step, | 720 current_.longest_incremental_marking_step, |
670 cumulative_incremental_marking_finalization_steps_, | |
671 cumulative_incremental_marking_finalization_duration_, | |
672 longest_incremental_marking_finalization_step_, | |
673 IncrementalMarkingSpeedInBytesPerMillisecond(), | 721 IncrementalMarkingSpeedInBytesPerMillisecond(), |
674 current_.start_object_size, current_.end_object_size, | 722 current_.start_object_size, current_.end_object_size, |
675 current_.start_holes_size, current_.end_holes_size, | 723 current_.start_holes_size, current_.end_holes_size, |
676 allocated_since_last_gc, heap_->promoted_objects_size(), | 724 allocated_since_last_gc, heap_->promoted_objects_size(), |
677 heap_->semi_space_copied_object_size(), | 725 heap_->semi_space_copied_object_size(), |
678 heap_->nodes_died_in_new_space_, heap_->nodes_copied_in_new_space_, | 726 heap_->nodes_died_in_new_space_, heap_->nodes_copied_in_new_space_, |
679 heap_->nodes_promoted_, heap_->promotion_ratio_, | 727 heap_->nodes_promoted_, heap_->promotion_ratio_, |
680 AverageSurvivalRatio(), heap_->promotion_rate_, | 728 AverageSurvivalRatio(), heap_->promotion_rate_, |
681 heap_->semi_space_copied_rate_, | 729 heap_->semi_space_copied_rate_, |
682 NewSpaceAllocationThroughputInBytesPerMillisecond(), | 730 NewSpaceAllocationThroughputInBytesPerMillisecond(), |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
813 return sum / recorded_survival_ratios_.Count(); | 861 return sum / recorded_survival_ratios_.Count(); |
814 } | 862 } |
815 | 863 |
816 bool GCTracer::SurvivalEventsRecorded() const { | 864 bool GCTracer::SurvivalEventsRecorded() const { |
817 return recorded_survival_ratios_.Count() > 0; | 865 return recorded_survival_ratios_.Count() > 0; |
818 } | 866 } |
819 | 867 |
820 void GCTracer::ResetSurvivalEvents() { recorded_survival_ratios_.Reset(); } | 868 void GCTracer::ResetSurvivalEvents() { recorded_survival_ratios_.Reset(); } |
821 } // namespace internal | 869 } // namespace internal |
822 } // namespace v8 | 870 } // namespace v8 |
OLD | NEW |