| Index: src/profile-generator.cc
|
| diff --git a/src/profile-generator.cc b/src/profile-generator.cc
|
| index c3b7622b09c9089b48876803e4d22dd368634d25..64abc7dac896159185dba9864572c7d55accfbd1 100644
|
| --- a/src/profile-generator.cc
|
| +++ b/src/profile-generator.cc
|
| @@ -2009,20 +2009,33 @@ void V8HeapExplorer::ExtractMapReferences(int entry, Map* map) {
|
| Map::kConstructorOffset);
|
| if (map->HasTransitionArray()) {
|
| TransitionArray* transitions = map->transitions();
|
| - if (!transitions->descriptors()->IsEmpty()) {
|
| - DescriptorArray* descriptors = transitions->descriptors();
|
| - TagObject(descriptors, "(map descriptors)");
|
| - SetInternalReference(transitions, entry,
|
| - "descriptors", descriptors,
|
| - TransitionArray::kDescriptorsOffset);
|
| - IndexedReferencesExtractor refs_extractor(
|
| - this, transitions, entry);
|
| - transitions->Iterate(&refs_extractor);
|
| - }
|
| + JSGlobalPropertyCell* pointer = transitions->descriptors_pointer();
|
| + DescriptorArray* descriptors = transitions->descriptors();
|
| + TagObject(descriptors, "(map descriptors)");
|
| + SetInternalReference(pointer, entry,
|
| + "descriptors", descriptors,
|
| + JSGlobalPropertyCell::kValueOffset);
|
| + IndexedReferencesExtractor pointer_refs(this, pointer, entry);
|
| + pointer->Iterate(&pointer_refs);
|
| +
|
| + Object* back_pointer = transitions->back_pointer_storage();
|
| + TagObject(transitions->back_pointer_storage(), "(back pointer)");
|
| + SetInternalReference(transitions, entry,
|
| + "backpointer", back_pointer,
|
| + TransitionArray::kBackPointerStorageOffset);
|
| + IndexedReferencesExtractor transitions_refs(this, transitions, entry);
|
| + transitions->Iterate(&transitions_refs);
|
| +
|
| TagObject(transitions, "(transition array)");
|
| SetInternalReference(map, entry,
|
| "transitions", transitions,
|
| Map::kTransitionsOrBackPointerOffset);
|
| + } else {
|
| + Object* back_pointer = map->GetBackPointer();
|
| + TagObject(back_pointer, "(back pointer)");
|
| + SetInternalReference(map, entry,
|
| + "backpointer", back_pointer,
|
| + Map::kTransitionsOrBackPointerOffset);
|
| }
|
| SetInternalReference(map, entry,
|
| "code_cache", map->code_cache(),
|
| @@ -2179,7 +2192,9 @@ void V8HeapExplorer::ExtractClosureReferences(JSObject* js_obj, int entry) {
|
| void V8HeapExplorer::ExtractPropertyReferences(JSObject* js_obj, int entry) {
|
| if (js_obj->HasFastProperties()) {
|
| DescriptorArray* descs = js_obj->map()->instance_descriptors();
|
| + int real_size = js_obj->map()->NumberOfOwnDescriptors();
|
| for (int i = 0; i < descs->number_of_descriptors(); i++) {
|
| + if (descs->GetDetails(i).descriptor_index() > real_size) continue;
|
| switch (descs->GetType(i)) {
|
| case FIELD: {
|
| int index = descs->GetFieldIndex(i);
|
|
|