diff options
Diffstat (limited to 'deps/v8/src/heap-snapshot-generator.cc')
-rw-r--r-- | deps/v8/src/heap-snapshot-generator.cc | 105 |
1 files changed, 20 insertions, 85 deletions
diff --git a/deps/v8/src/heap-snapshot-generator.cc b/deps/v8/src/heap-snapshot-generator.cc index b67aa0f376..ccfbfb8d03 100644 --- a/deps/v8/src/heap-snapshot-generator.cc +++ b/deps/v8/src/heap-snapshot-generator.cc @@ -34,7 +34,6 @@ #include "heap-profiler.h" #include "debug.h" #include "types.h" -#include "v8conversions.h" namespace v8 { namespace internal { @@ -73,7 +72,7 @@ HeapEntry::HeapEntry(HeapSnapshot* snapshot, Type type, const char* name, SnapshotObjectId id, - size_t self_size) + int self_size) : type_(type), children_count_(0), children_index_(-1), @@ -104,7 +103,7 @@ void HeapEntry::SetIndexedReference(HeapGraphEdge::Type type, void HeapEntry::Print( const char* prefix, const char* edge_name, int max_depth, int indent) { STATIC_CHECK(sizeof(unsigned) == sizeof(id())); - OS::Print("%6" V8PRIuPTR " @%6u %*c %s%s: ", + OS::Print("%6d @%6u %*c %s%s: ", self_size(), id(), indent, ' ', prefix, edge_name); if (type() != kString) { OS::Print("%s %.40s\n", TypeAsString(), name_); @@ -194,7 +193,7 @@ template <> struct SnapshotSizeConstants<4> { template <> struct SnapshotSizeConstants<8> { static const int kExpectedHeapGraphEdgeSize = 24; - static const int kExpectedHeapEntrySize = 40; + static const int kExpectedHeapEntrySize = 32; }; } // namespace @@ -277,7 +276,7 @@ HeapEntry* HeapSnapshot::AddGcSubrootEntry(int tag) { HeapEntry* HeapSnapshot::AddEntry(HeapEntry::Type type, const char* name, SnapshotObjectId id, - size_t size) { + int size) { HeapEntry entry(this, type, name, id, size); entries_.Add(entry); return &entries_.last(); @@ -900,17 +899,10 @@ HeapEntry* V8HeapExplorer::AddEntry(HeapObject* object) { HeapEntry* V8HeapExplorer::AddEntry(HeapObject* object, HeapEntry::Type type, const char* name) { - return AddEntry(object->address(), type, name, object->Size()); -} - - -HeapEntry* V8HeapExplorer::AddEntry(Address address, - HeapEntry::Type type, - const char* name, - size_t size) { - SnapshotObjectId object_id = heap_object_map_->FindOrAddEntry( - address, static_cast<unsigned int>(size)); - return snapshot_->AddEntry(type, name, object_id, size); + int object_size = object->Size(); + SnapshotObjectId object_id = + heap_object_map_->FindOrAddEntry(object->address(), object_size); + return snapshot_->AddEntry(type, name, object_id, object_size); } @@ -1037,8 +1029,6 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) { if (obj->IsJSGlobalProxy()) { ExtractJSGlobalProxyReferences(entry, JSGlobalProxy::cast(obj)); - } else if (obj->IsJSArrayBuffer()) { - ExtractJSArrayBufferReferences(entry, JSArrayBuffer::cast(obj)); } else if (obj->IsJSObject()) { ExtractJSObjectReferences(entry, JSObject::cast(obj)); } else if (obj->IsString()) { @@ -1157,6 +1147,13 @@ void V8HeapExplorer::ExtractJSObjectReferences( JSArrayBufferView::kBufferOffset); SetWeakReference(view, entry, "weak_next", view->weak_next(), JSArrayBufferView::kWeakNextOffset); + } else if (obj->IsJSArrayBuffer()) { + JSArrayBuffer* buffer = JSArrayBuffer::cast(obj); + SetWeakReference(buffer, entry, "weak_next", buffer->weak_next(), + JSArrayBuffer::kWeakNextOffset); + SetWeakReference(buffer, entry, + "weak_first_view", buffer->weak_first_view(), + JSArrayBuffer::kWeakFirstViewOffset); } TagObject(js_obj->properties(), "(object properties)"); SetInternalReference(obj, entry, @@ -1457,42 +1454,6 @@ void V8HeapExplorer::ExtractAllocationSiteReferences(int entry, } -class JSArrayBufferDataEntryAllocator : public HeapEntriesAllocator { - public: - JSArrayBufferDataEntryAllocator(size_t size, V8HeapExplorer* explorer) - : size_(size) - , explorer_(explorer) { - } - virtual HeapEntry* AllocateEntry(HeapThing ptr) { - return explorer_->AddEntry( - static_cast<Address>(ptr), - HeapEntry::kNative, "system / JSArrayBufferData", size_); - } - private: - size_t size_; - V8HeapExplorer* explorer_; -}; - - -void V8HeapExplorer::ExtractJSArrayBufferReferences( - int entry, JSArrayBuffer* buffer) { - SetWeakReference(buffer, entry, "weak_next", buffer->weak_next(), - JSArrayBuffer::kWeakNextOffset); - SetWeakReference(buffer, entry, - "weak_first_view", buffer->weak_first_view(), - JSArrayBuffer::kWeakFirstViewOffset); - // Setup a reference to a native memory backing_store object. - if (!buffer->backing_store()) - return; - size_t data_size = NumberToSize(heap_->isolate(), buffer->byte_length()); - JSArrayBufferDataEntryAllocator allocator(data_size, this); - HeapEntry* data_entry = - filler_->FindOrAddEntry(buffer->backing_store(), &allocator); - filler_->SetNamedReference(HeapGraphEdge::kInternal, - entry, "backing_store", data_entry); -} - - void V8HeapExplorer::ExtractClosureReferences(JSObject* js_obj, int entry) { if (!js_obj->IsJSFunction()) return; @@ -2702,26 +2663,9 @@ int HeapSnapshotJSONSerializer::GetStringId(const char* s) { } -namespace { - -template<size_t size> struct ToUnsigned; - -template<> struct ToUnsigned<4> { - typedef uint32_t Type; -}; - -template<> struct ToUnsigned<8> { - typedef uint64_t Type; -}; - -} // namespace - - -template<typename T> -static int utoa_impl(T value, const Vector<char>& buffer, int buffer_pos) { - STATIC_CHECK(static_cast<T>(-1) > 0); // Check that T is unsigned +static int utoa(unsigned value, const Vector<char>& buffer, int buffer_pos) { int number_of_digits = 0; - T t = value; + unsigned t = value; do { ++number_of_digits; } while (t /= 10); @@ -2729,7 +2673,7 @@ static int utoa_impl(T value, const Vector<char>& buffer, int buffer_pos) { buffer_pos += number_of_digits; int result = buffer_pos; do { - int last_digit = static_cast<int>(value % 10); + int last_digit = value % 10; buffer[--buffer_pos] = '0' + last_digit; value /= 10; } while (value); @@ -2737,14 +2681,6 @@ static int utoa_impl(T value, const Vector<char>& buffer, int buffer_pos) { } -template<typename T> -static int utoa(T value, const Vector<char>& buffer, int buffer_pos) { - typename ToUnsigned<sizeof(value)>::Type unsigned_value = value; - STATIC_CHECK(sizeof(value) == sizeof(unsigned_value)); - return utoa_impl(unsigned_value, buffer, buffer_pos); -} - - void HeapSnapshotJSONSerializer::SerializeEdge(HeapGraphEdge* edge, bool first_edge) { // The buffer needs space for 3 unsigned ints, 3 commas, \n and \0 @@ -2781,10 +2717,9 @@ void HeapSnapshotJSONSerializer::SerializeEdges() { void HeapSnapshotJSONSerializer::SerializeNode(HeapEntry* entry) { - // The buffer needs space for 4 unsigned ints, 1 size_t, 5 commas, \n and \0 + // The buffer needs space for 5 unsigned ints, 5 commas, \n and \0 static const int kBufferSize = - 4 * MaxDecimalDigitsIn<sizeof(unsigned)>::kUnsigned // NOLINT - + MaxDecimalDigitsIn<sizeof(size_t)>::kUnsigned // NOLINT + 5 * MaxDecimalDigitsIn<sizeof(unsigned)>::kUnsigned // NOLINT + 5 + 1 + 1; EmbeddedVector<char, kBufferSize> buffer; int buffer_pos = 0; |