| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 FOR_EACH_LIVE_OBJECT_TYPE(CHECK_OBJECT_TYPE) | 177 FOR_EACH_LIVE_OBJECT_TYPE(CHECK_OBJECT_TYPE) |
| 178 #undef CHECK_OBJECT_TYPE | 178 #undef CHECK_OBJECT_TYPE |
| 179 | 179 |
| 180 return false; | 180 return false; |
| 181 } | 181 } |
| 182 | 182 |
| 183 | 183 |
| 184 const AllocationSpace kInvalidSpace = static_cast<AllocationSpace>(-1); | 184 const AllocationSpace kInvalidSpace = static_cast<AllocationSpace>(-1); |
| 185 | 185 |
| 186 static AllocationSpace FindSpaceFor(String* space_str) { | 186 static AllocationSpace FindSpaceFor(String* space_str) { |
| 187 SmartPointer<char> s = | 187 SmartArrayPointer<char> s = |
| 188 space_str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 188 space_str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 189 | 189 |
| 190 const char* key_str = *s; | 190 const char* key_str = *s; |
| 191 switch (key_str[0]) { | 191 switch (key_str[0]) { |
| 192 case 'c': | 192 case 'c': |
| 193 if (strcmp(key_str, "cell") == 0) return CELL_SPACE; | 193 if (strcmp(key_str, "cell") == 0) return CELL_SPACE; |
| 194 if (strcmp(key_str, "code") == 0) return CODE_SPACE; | 194 if (strcmp(key_str, "code") == 0) return CODE_SPACE; |
| 195 break; | 195 break; |
| 196 case 'l': | 196 case 'l': |
| 197 if (strcmp(key_str, "lo") == 0) return LO_SPACE; | 197 if (strcmp(key_str, "lo") == 0) return LO_SPACE; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 if (heap->InSpace(heap_obj, static_cast<AllocationSpace>(sp))) { | 229 if (heap->InSpace(heap_obj, static_cast<AllocationSpace>(sp))) { |
| 230 return false; | 230 return false; |
| 231 } | 231 } |
| 232 } | 232 } |
| 233 SLOW_ASSERT(heap->InSpace(heap_obj, LO_SPACE)); | 233 SLOW_ASSERT(heap->InSpace(heap_obj, LO_SPACE)); |
| 234 return true; | 234 return true; |
| 235 } | 235 } |
| 236 | 236 |
| 237 | 237 |
| 238 static LiveObjectType FindTypeFor(String* type_str) { | 238 static LiveObjectType FindTypeFor(String* type_str) { |
| 239 SmartPointer<char> s = | 239 SmartArrayPointer<char> s = |
| 240 type_str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 240 type_str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 241 | 241 |
| 242 #define CHECK_OBJECT_TYPE(type_, name) { \ | 242 #define CHECK_OBJECT_TYPE(type_, name) { \ |
| 243 const char* type_desc = GetObjectTypeDesc(kType##type_); \ | 243 const char* type_desc = GetObjectTypeDesc(kType##type_); \ |
| 244 const char* key_str = *s; \ | 244 const char* key_str = *s; \ |
| 245 if (strstr(type_desc, key_str) != NULL) return kType##type_; \ | 245 if (strstr(type_desc, key_str) != NULL) return kType##type_; \ |
| 246 } | 246 } |
| 247 FOR_EACH_LIVE_OBJECT_TYPE(CHECK_OBJECT_TYPE) | 247 FOR_EACH_LIVE_OBJECT_TYPE(CHECK_OBJECT_TYPE) |
| 248 #undef CHECK_OBJECT_TYPE | 248 #undef CHECK_OBJECT_TYPE |
| 249 | 249 |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 reinterpret_cast<void*>(obj), | 496 reinterpret_cast<void*>(obj), |
| 497 GetObjectTypeDesc(obj), | 497 GetObjectTypeDesc(obj), |
| 498 length); | 498 length); |
| 499 | 499 |
| 500 } else if (obj->IsString()) { | 500 } else if (obj->IsString()) { |
| 501 String *str = String::cast(obj); | 501 String *str = String::cast(obj); |
| 502 // Only grab up to 160 chars in case they are double byte. | 502 // Only grab up to 160 chars in case they are double byte. |
| 503 // We'll only dump 80 of them after we compact them. | 503 // We'll only dump 80 of them after we compact them. |
| 504 const int kMaxCharToDump = 80; | 504 const int kMaxCharToDump = 80; |
| 505 const int kMaxBufferSize = kMaxCharToDump * 2; | 505 const int kMaxBufferSize = kMaxCharToDump * 2; |
| 506 SmartPointer<char> str_sp = str->ToCString(DISALLOW_NULLS, | 506 SmartArrayPointer<char> str_sp = str->ToCString(DISALLOW_NULLS, |
| 507 ROBUST_STRING_TRAVERSAL, | 507 ROBUST_STRING_TRAVERSAL, |
| 508 0, | 508 0, |
| 509 kMaxBufferSize); | 509 kMaxBufferSize); |
| 510 char* str_cstr = *str_sp; | 510 char* str_cstr = *str_sp; |
| 511 int length = CompactString(str_cstr); | 511 int length = CompactString(str_cstr); |
| 512 OS::SNPrintF(buffer_v, | 512 OS::SNPrintF(buffer_v, |
| 513 "%p <%s> '%.80s%s'", | 513 "%p <%s> '%.80s%s'", |
| 514 reinterpret_cast<void*>(obj), | 514 reinterpret_cast<void*>(obj), |
| 515 GetObjectTypeDesc(obj), | 515 GetObjectTypeDesc(obj), |
| 516 str_cstr, | 516 str_cstr, |
| 517 (length > kMaxCharToDump) ? "..." : ""); | 517 (length > kMaxCharToDump) ? "..." : ""); |
| 518 | 518 |
| 519 } else if (obj->IsJSFunction() || obj->IsSharedFunctionInfo()) { | 519 } else if (obj->IsJSFunction() || obj->IsSharedFunctionInfo()) { |
| 520 SharedFunctionInfo* sinfo; | 520 SharedFunctionInfo* sinfo; |
| 521 if (obj->IsJSFunction()) { | 521 if (obj->IsJSFunction()) { |
| 522 JSFunction* func = JSFunction::cast(obj); | 522 JSFunction* func = JSFunction::cast(obj); |
| 523 sinfo = func->shared(); | 523 sinfo = func->shared(); |
| 524 } else { | 524 } else { |
| 525 sinfo = SharedFunctionInfo::cast(obj); | 525 sinfo = SharedFunctionInfo::cast(obj); |
| 526 } | 526 } |
| 527 | 527 |
| 528 String* name = sinfo->DebugName(); | 528 String* name = sinfo->DebugName(); |
| 529 SmartPointer<char> name_sp = | 529 SmartArrayPointer<char> name_sp = |
| 530 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 530 name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 531 char* name_cstr = *name_sp; | 531 char* name_cstr = *name_sp; |
| 532 | 532 |
| 533 HeapStringAllocator string_allocator; | 533 HeapStringAllocator string_allocator; |
| 534 StringStream stream(&string_allocator); | 534 StringStream stream(&string_allocator); |
| 535 sinfo->SourceCodePrint(&stream, 50); | 535 sinfo->SourceCodePrint(&stream, 50); |
| 536 SmartPointer<const char> source_sp = stream.ToCString(); | 536 SmartArrayPointer<const char> source_sp = stream.ToCString(); |
| 537 const char* source_cstr = *source_sp; | 537 const char* source_cstr = *source_sp; |
| 538 | 538 |
| 539 OS::SNPrintF(buffer_v, | 539 OS::SNPrintF(buffer_v, |
| 540 "%p <%s> '%s' %s", | 540 "%p <%s> '%s' %s", |
| 541 reinterpret_cast<void*>(obj), | 541 reinterpret_cast<void*>(obj), |
| 542 GetObjectTypeDesc(obj), | 542 GetObjectTypeDesc(obj), |
| 543 name_cstr, | 543 name_cstr, |
| 544 source_cstr); | 544 source_cstr); |
| 545 | 545 |
| 546 } else if (obj->IsFixedArray()) { | 546 } else if (obj->IsFixedArray()) { |
| (...skipping 1102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1649 Element* element = FindElementFor<HeapObject*>(GetElementObj, hobj); | 1649 Element* element = FindElementFor<HeapObject*>(GetElementObj, hobj); |
| 1650 if (element != NULL) { | 1650 if (element != NULL) { |
| 1651 return element->id_; | 1651 return element->id_; |
| 1652 } | 1652 } |
| 1653 return 0; // Invalid address. | 1653 return 0; // Invalid address. |
| 1654 } | 1654 } |
| 1655 | 1655 |
| 1656 | 1656 |
| 1657 // Gets the obj id for the specified address if valid. | 1657 // Gets the obj id for the specified address if valid. |
| 1658 Object* LiveObjectList::GetObjId(Handle<String> address) { | 1658 Object* LiveObjectList::GetObjId(Handle<String> address) { |
| 1659 SmartPointer<char> addr_str = | 1659 SmartArrayPointer<char> addr_str = |
| 1660 address->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 1660 address->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 1661 | 1661 |
| 1662 Isolate* isolate = Isolate::Current(); | 1662 Isolate* isolate = Isolate::Current(); |
| 1663 | 1663 |
| 1664 // Extract the address value from the string. | 1664 // Extract the address value from the string. |
| 1665 int value = | 1665 int value = |
| 1666 static_cast<int>(StringToInt(isolate->unicode_cache(), *address, 16)); | 1666 static_cast<int>(StringToInt(isolate->unicode_cache(), *address, 16)); |
| 1667 Object* obj = reinterpret_cast<Object*>(value); | 1667 Object* obj = reinterpret_cast<Object*>(value); |
| 1668 return Smi::FromInt(GetObjId(obj)); | 1668 return Smi::FromInt(GetObjId(obj)); |
| 1669 } | 1669 } |
| (...skipping 946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2616 i++, heap_obj, heap->new_space()->FromSpaceLow()); | 2616 i++, heap_obj, heap->new_space()->FromSpaceLow()); |
| 2617 } | 2617 } |
| 2618 } | 2618 } |
| 2619 } | 2619 } |
| 2620 #endif // VERIFY_LOL | 2620 #endif // VERIFY_LOL |
| 2621 | 2621 |
| 2622 | 2622 |
| 2623 } } // namespace v8::internal | 2623 } } // namespace v8::internal |
| 2624 | 2624 |
| 2625 #endif // LIVE_OBJECT_LIST | 2625 #endif // LIVE_OBJECT_LIST |
| OLD | NEW |