Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "v8.h" | 5 #include "v8.h" |
| 6 | 6 |
| 7 #include "accessors.h" | 7 #include "accessors.h" |
| 8 #include "api.h" | 8 #include "api.h" |
| 9 #include "bootstrapper.h" | 9 #include "bootstrapper.h" |
| 10 #include "codegen.h" | 10 #include "codegen.h" |
| (...skipping 2038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2049 | 2049 |
| 2050 if (object_contents == POINTER_OBJECT) { | 2050 if (object_contents == POINTER_OBJECT) { |
| 2051 if (map->instance_type() == JS_FUNCTION_TYPE) { | 2051 if (map->instance_type() == JS_FUNCTION_TYPE) { |
| 2052 heap->promotion_queue()->insert( | 2052 heap->promotion_queue()->insert( |
| 2053 target, JSFunction::kNonWeakFieldsEndOffset); | 2053 target, JSFunction::kNonWeakFieldsEndOffset); |
| 2054 } else { | 2054 } else { |
| 2055 heap->promotion_queue()->insert(target, object_size); | 2055 heap->promotion_queue()->insert(target, object_size); |
| 2056 } | 2056 } |
| 2057 } | 2057 } |
| 2058 | 2058 |
| 2059 heap->tracer()->increment_promoted_objects_size(object_size); | 2059 if (FLAG_trace_gc) { |
|
Michael Starzinger
2014/05/16 11:30:37
nit: This makes the code harder to read and I am n
Hannes Payer (out of office)
2014/05/20 09:29:14
Done.
| |
| 2060 heap->tracer()->increment_promoted_objects_size(object_size); | |
| 2061 } | |
| 2060 return; | 2062 return; |
| 2061 } | 2063 } |
| 2062 } | 2064 } |
| 2063 ASSERT(heap->AllowedToBeMigrated(object, NEW_SPACE)); | 2065 ASSERT(heap->AllowedToBeMigrated(object, NEW_SPACE)); |
| 2064 AllocationResult allocation = | 2066 AllocationResult allocation = |
| 2065 heap->new_space()->AllocateRaw(allocation_size); | 2067 heap->new_space()->AllocateRaw(allocation_size); |
| 2066 heap->promotion_queue()->SetNewLimit(heap->new_space()->top()); | 2068 heap->promotion_queue()->SetNewLimit(heap->new_space()->top()); |
| 2067 HeapObject* target = HeapObject::cast(allocation.ToObjectChecked()); | 2069 HeapObject* target = HeapObject::cast(allocation.ToObjectChecked()); |
| 2068 | 2070 |
| 2069 if (alignment != kObjectAlignment) { | 2071 if (alignment != kObjectAlignment) { |
| 2070 target = EnsureDoubleAligned(heap, target, allocation_size); | 2072 target = EnsureDoubleAligned(heap, target, allocation_size); |
| 2071 } | 2073 } |
| 2072 | 2074 |
| 2073 // Order is important: slot might be inside of the target if target | 2075 // Order is important: slot might be inside of the target if target |
| 2074 // was allocated over a dead object and slot comes from the store | 2076 // was allocated over a dead object and slot comes from the store |
| 2075 // buffer. | 2077 // buffer. |
| 2076 *slot = target; | 2078 *slot = target; |
| 2077 MigrateObject(heap, object, target, object_size); | 2079 MigrateObject(heap, object, target, object_size); |
| 2080 if (FLAG_trace_gc) { | |
|
Michael Starzinger
2014/05/16 11:30:37
nit: Likewise.
Hannes Payer (out of office)
2014/05/20 09:29:14
Done.
| |
| 2081 heap->tracer()->increment_semi_space_copied_object_size(object_size); | |
| 2082 } | |
| 2078 return; | 2083 return; |
| 2079 } | 2084 } |
| 2080 | 2085 |
| 2081 | 2086 |
| 2082 static inline void EvacuateJSFunction(Map* map, | 2087 static inline void EvacuateJSFunction(Map* map, |
| 2083 HeapObject** slot, | 2088 HeapObject** slot, |
| 2084 HeapObject* object) { | 2089 HeapObject* object) { |
| 2085 ObjectEvacuationStrategy<POINTER_OBJECT>:: | 2090 ObjectEvacuationStrategy<POINTER_OBJECT>:: |
| 2086 template VisitSpecialized<JSFunction::kSize>(map, slot, object); | 2091 template VisitSpecialized<JSFunction::kSize>(map, slot, object); |
| 2087 | 2092 |
| (...skipping 3934 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6022 const char* gc_reason, | 6027 const char* gc_reason, |
| 6023 const char* collector_reason) | 6028 const char* collector_reason) |
| 6024 : start_time_(0.0), | 6029 : start_time_(0.0), |
| 6025 start_object_size_(0), | 6030 start_object_size_(0), |
| 6026 start_memory_size_(0), | 6031 start_memory_size_(0), |
| 6027 gc_count_(0), | 6032 gc_count_(0), |
| 6028 full_gc_count_(0), | 6033 full_gc_count_(0), |
| 6029 allocated_since_last_gc_(0), | 6034 allocated_since_last_gc_(0), |
| 6030 spent_in_mutator_(0), | 6035 spent_in_mutator_(0), |
| 6031 promoted_objects_size_(0), | 6036 promoted_objects_size_(0), |
| 6037 semi_space_copied_object_size_(0), | |
| 6032 nodes_died_in_new_space_(0), | 6038 nodes_died_in_new_space_(0), |
| 6033 nodes_copied_in_new_space_(0), | 6039 nodes_copied_in_new_space_(0), |
| 6034 nodes_promoted_(0), | 6040 nodes_promoted_(0), |
| 6035 heap_(heap), | 6041 heap_(heap), |
| 6036 gc_reason_(gc_reason), | 6042 gc_reason_(gc_reason), |
| 6037 collector_reason_(collector_reason) { | 6043 collector_reason_(collector_reason) { |
| 6038 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return; | 6044 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return; |
| 6039 start_time_ = OS::TimeCurrentMillis(); | 6045 start_time_ = OS::TimeCurrentMillis(); |
| 6040 start_object_size_ = heap_->SizeOfObjects(); | 6046 start_object_size_ = heap_->SizeOfObjects(); |
| 6041 start_memory_size_ = heap_->isolate()->memory_allocator()->Size(); | 6047 start_memory_size_ = heap_->isolate()->memory_allocator()->Size(); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6169 scopes_[Scope::MC_WEAKCOLLECTION_CLEAR]); | 6175 scopes_[Scope::MC_WEAKCOLLECTION_CLEAR]); |
| 6170 | 6176 |
| 6171 PrintF("total_size_before=%" V8_PTR_PREFIX "d ", start_object_size_); | 6177 PrintF("total_size_before=%" V8_PTR_PREFIX "d ", start_object_size_); |
| 6172 PrintF("total_size_after=%" V8_PTR_PREFIX "d ", heap_->SizeOfObjects()); | 6178 PrintF("total_size_after=%" V8_PTR_PREFIX "d ", heap_->SizeOfObjects()); |
| 6173 PrintF("holes_size_before=%" V8_PTR_PREFIX "d ", | 6179 PrintF("holes_size_before=%" V8_PTR_PREFIX "d ", |
| 6174 in_free_list_or_wasted_before_gc_); | 6180 in_free_list_or_wasted_before_gc_); |
| 6175 PrintF("holes_size_after=%" V8_PTR_PREFIX "d ", CountTotalHolesSize(heap_)); | 6181 PrintF("holes_size_after=%" V8_PTR_PREFIX "d ", CountTotalHolesSize(heap_)); |
| 6176 | 6182 |
| 6177 PrintF("allocated=%" V8_PTR_PREFIX "d ", allocated_since_last_gc_); | 6183 PrintF("allocated=%" V8_PTR_PREFIX "d ", allocated_since_last_gc_); |
| 6178 PrintF("promoted=%" V8_PTR_PREFIX "d ", promoted_objects_size_); | 6184 PrintF("promoted=%" V8_PTR_PREFIX "d ", promoted_objects_size_); |
| 6185 PrintF("semi_space_copied=%" V8_PTR_PREFIX "d ", | |
| 6186 semi_space_copied_object_size_); | |
| 6179 PrintF("nodes_died_in_new=%d ", nodes_died_in_new_space_); | 6187 PrintF("nodes_died_in_new=%d ", nodes_died_in_new_space_); |
| 6180 PrintF("nodes_copied_in_new=%d ", nodes_copied_in_new_space_); | 6188 PrintF("nodes_copied_in_new=%d ", nodes_copied_in_new_space_); |
| 6181 PrintF("nodes_promoted=%d ", nodes_promoted_); | 6189 PrintF("nodes_promoted=%d ", nodes_promoted_); |
| 6182 PrintF("survived=%.1f%% ", heap_->survival_rate_); | 6190 PrintF("survival_rate=%.1f%% ", heap_->survival_rate_); |
| 6191 PrintF("promotion_rate=%.1f%% ", | |
| 6192 (static_cast<double>(promoted_objects_size_) / | |
| 6193 static_cast<double>(heap_->new_space()->Capacity())) * 100); | |
| 6194 PrintF("semi_space_copy_rate=%.1f%% ", | |
| 6195 (static_cast<double>(semi_space_copied_object_size_) / | |
| 6196 static_cast<double>(heap_->new_space()->Capacity())) * 100); | |
| 6183 | 6197 |
| 6184 if (collector_ == SCAVENGER) { | 6198 if (collector_ == SCAVENGER) { |
| 6185 PrintF("stepscount=%d ", steps_count_since_last_gc_); | 6199 PrintF("stepscount=%d ", steps_count_since_last_gc_); |
| 6186 PrintF("stepstook=%.1f ", steps_took_since_last_gc_); | 6200 PrintF("stepstook=%.1f ", steps_took_since_last_gc_); |
| 6187 } else { | 6201 } else { |
| 6188 PrintF("stepscount=%d ", steps_count_); | 6202 PrintF("stepscount=%d ", steps_count_); |
| 6189 PrintF("stepstook=%.1f ", steps_took_); | 6203 PrintF("stepstook=%.1f ", steps_took_); |
| 6190 PrintF("longeststep=%.1f ", longest_step_); | 6204 PrintF("longeststep=%.1f ", longest_step_); |
| 6191 } | 6205 } |
| 6192 | 6206 |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6466 static_cast<int>(object_sizes_last_time_[index])); | 6480 static_cast<int>(object_sizes_last_time_[index])); |
| 6467 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) | 6481 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) |
| 6468 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 6482 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
| 6469 | 6483 |
| 6470 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 6484 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
| 6471 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 6485 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
| 6472 ClearObjectStats(); | 6486 ClearObjectStats(); |
| 6473 } | 6487 } |
| 6474 | 6488 |
| 6475 } } // namespace v8::internal | 6489 } } // namespace v8::internal |
| OLD | NEW |