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

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

Issue 1159513003: Even without --trace-gc dump the last few GC messages on OOM (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 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/heap.h ('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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 mark_compact_collector_(this), 137 mark_compact_collector_(this),
138 store_buffer_(this), 138 store_buffer_(this),
139 marking_(this), 139 marking_(this),
140 incremental_marking_(this), 140 incremental_marking_(this),
141 gc_count_at_last_idle_gc_(0), 141 gc_count_at_last_idle_gc_(0),
142 full_codegen_bytes_generated_(0), 142 full_codegen_bytes_generated_(0),
143 crankshaft_codegen_bytes_generated_(0), 143 crankshaft_codegen_bytes_generated_(0),
144 new_space_allocation_counter_(0), 144 new_space_allocation_counter_(0),
145 gcs_since_last_deopt_(0), 145 gcs_since_last_deopt_(0),
146 allocation_sites_scratchpad_length_(0), 146 allocation_sites_scratchpad_length_(0),
147 ring_buffer_full_(false),
148 ring_buffer_end_(0),
147 promotion_queue_(this), 149 promotion_queue_(this),
148 configured_(false), 150 configured_(false),
149 external_string_table_(this), 151 external_string_table_(this),
150 chunks_queued_for_free_(NULL), 152 chunks_queued_for_free_(NULL),
151 gc_callbacks_depth_(0), 153 gc_callbacks_depth_(0),
152 deserialization_complete_(false), 154 deserialization_complete_(false),
153 concurrent_sweeping_enabled_(false), 155 concurrent_sweeping_enabled_(false),
154 strong_roots_list_(NULL) { 156 strong_roots_list_(NULL) {
155 // Allow build-time customization of the max semispace size. Building 157 // Allow build-time customization of the max semispace size. Building
156 // V8 with snapshots and a non-default max semispace size is much 158 // V8 with snapshots and a non-default max semispace size is much
(...skipping 5096 matching lines...) Expand 10 before | Expand all | Expand 10 after
5253 FixedArray::SizeFor(JSObject::kInitialMaxFastElementArray) + 5255 FixedArray::SizeFor(JSObject::kInitialMaxFastElementArray) +
5254 AllocationMemento::kSize)); 5256 AllocationMemento::kSize));
5255 5257
5256 code_range_size_ = code_range_size * MB; 5258 code_range_size_ = code_range_size * MB;
5257 5259
5258 configured_ = true; 5260 configured_ = true;
5259 return true; 5261 return true;
5260 } 5262 }
5261 5263
5262 5264
5265 void Heap::AddToRingBuffer(const char* string) {
5266 size_t first_part =
5267 Min(strlen(string), kTraceRingBufferSize - ring_buffer_end_);
5268 memcpy(trace_ring_buffer_ + ring_buffer_end_, string, first_part);
5269 ring_buffer_end_ += first_part;
5270 if (first_part < strlen(string)) {
5271 ring_buffer_full_ = true;
5272 size_t second_part = strlen(string) - first_part;
5273 memcpy(trace_ring_buffer_, string + first_part, second_part);
5274 ring_buffer_end_ = second_part;
5275 }
5276 }
5277
5278
5279 void Heap::GetFromRingBuffer(char* buffer) {
5280 size_t copied = 0;
5281 if (ring_buffer_full_) {
5282 copied = kTraceRingBufferSize - ring_buffer_end_;
5283 memcpy(buffer, trace_ring_buffer_ + ring_buffer_end_, copied);
5284 }
5285 memcpy(buffer + copied, trace_ring_buffer_, ring_buffer_end_);
5286 }
5287
5288
5263 bool Heap::ConfigureHeapDefault() { return ConfigureHeap(0, 0, 0, 0); } 5289 bool Heap::ConfigureHeapDefault() { return ConfigureHeap(0, 0, 0, 0); }
5264 5290
5265 5291
5266 void Heap::RecordStats(HeapStats* stats, bool take_snapshot) { 5292 void Heap::RecordStats(HeapStats* stats, bool take_snapshot) {
5267 *stats->start_marker = HeapStats::kStartMarker; 5293 *stats->start_marker = HeapStats::kStartMarker;
5268 *stats->end_marker = HeapStats::kEndMarker; 5294 *stats->end_marker = HeapStats::kEndMarker;
5269 *stats->new_space_size = new_space_.SizeAsInt(); 5295 *stats->new_space_size = new_space_.SizeAsInt();
5270 *stats->new_space_capacity = static_cast<int>(new_space_.Capacity()); 5296 *stats->new_space_capacity = static_cast<int>(new_space_.Capacity());
5271 *stats->old_space_size = old_space_->SizeOfObjects(); 5297 *stats->old_space_size = old_space_->SizeOfObjects();
5272 *stats->old_space_capacity = old_space_->Capacity(); 5298 *stats->old_space_capacity = old_space_->Capacity();
(...skipping 12 matching lines...) Expand all
5285 if (take_snapshot) { 5311 if (take_snapshot) {
5286 HeapIterator iterator(this); 5312 HeapIterator iterator(this);
5287 for (HeapObject* obj = iterator.next(); obj != NULL; 5313 for (HeapObject* obj = iterator.next(); obj != NULL;
5288 obj = iterator.next()) { 5314 obj = iterator.next()) {
5289 InstanceType type = obj->map()->instance_type(); 5315 InstanceType type = obj->map()->instance_type();
5290 DCHECK(0 <= type && type <= LAST_TYPE); 5316 DCHECK(0 <= type && type <= LAST_TYPE);
5291 stats->objects_per_type[type]++; 5317 stats->objects_per_type[type]++;
5292 stats->size_per_type[type] += obj->Size(); 5318 stats->size_per_type[type] += obj->Size();
5293 } 5319 }
5294 } 5320 }
5321 if (stats->last_few_messages != NULL)
5322 GetFromRingBuffer(stats->last_few_messages);
5295 } 5323 }
5296 5324
5297 5325
5298 intptr_t Heap::PromotedSpaceSizeOfObjects() { 5326 intptr_t Heap::PromotedSpaceSizeOfObjects() {
5299 return old_space_->SizeOfObjects() + code_space_->SizeOfObjects() + 5327 return old_space_->SizeOfObjects() + code_space_->SizeOfObjects() +
5300 map_space_->SizeOfObjects() + lo_space_->SizeOfObjects(); 5328 map_space_->SizeOfObjects() + lo_space_->SizeOfObjects();
5301 } 5329 }
5302 5330
5303 5331
5304 int64_t Heap::PromotedExternalMemorySize() { 5332 int64_t Heap::PromotedExternalMemorySize() {
(...skipping 1285 matching lines...) Expand 10 before | Expand all | Expand 10 after
6590 *object_type = "CODE_TYPE"; \ 6618 *object_type = "CODE_TYPE"; \
6591 *object_sub_type = "CODE_AGE/" #name; \ 6619 *object_sub_type = "CODE_AGE/" #name; \
6592 return true; 6620 return true;
6593 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) 6621 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME)
6594 #undef COMPARE_AND_RETURN_NAME 6622 #undef COMPARE_AND_RETURN_NAME
6595 } 6623 }
6596 return false; 6624 return false;
6597 } 6625 }
6598 } 6626 }
6599 } // namespace v8::internal 6627 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap/heap.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698