| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 706 CHECK(WeakPointerCleared); | 706 CHECK(WeakPointerCleared); |
| 707 } | 707 } |
| 708 | 708 |
| 709 | 709 |
| 710 TEST(BytecodeArray) { | 710 TEST(BytecodeArray) { |
| 711 static const uint8_t kRawBytes[] = {0xc3, 0x7e, 0xa5, 0x5a}; | 711 static const uint8_t kRawBytes[] = {0xc3, 0x7e, 0xa5, 0x5a}; |
| 712 static const int kRawBytesSize = sizeof(kRawBytes); | 712 static const int kRawBytesSize = sizeof(kRawBytes); |
| 713 static const int kFrameSize = 32; | 713 static const int kFrameSize = 32; |
| 714 static const int kParameterCount = 2; | 714 static const int kParameterCount = 2; |
| 715 | 715 |
| 716 i::FLAG_manual_evacuation_candidates_selection = true; |
| 716 CcTest::InitializeVM(); | 717 CcTest::InitializeVM(); |
| 717 Isolate* isolate = CcTest::i_isolate(); | 718 Isolate* isolate = CcTest::i_isolate(); |
| 718 Heap* heap = isolate->heap(); | 719 Heap* heap = isolate->heap(); |
| 719 Factory* factory = isolate->factory(); | 720 Factory* factory = isolate->factory(); |
| 720 HandleScope scope(isolate); | 721 HandleScope scope(isolate); |
| 721 | 722 |
| 723 SimulateFullSpace(heap->old_space()); |
| 724 Handle<FixedArray> constant_pool = factory->NewFixedArray(5, TENURED); |
| 725 for (int i = 0; i < 5; i++) { |
| 726 constant_pool->set(i, *factory->NewHeapNumber(i)); |
| 727 } |
| 728 |
| 722 // Allocate and initialize BytecodeArray | 729 // Allocate and initialize BytecodeArray |
| 723 Handle<BytecodeArray> array = factory->NewBytecodeArray( | 730 Handle<BytecodeArray> array = factory->NewBytecodeArray( |
| 724 kRawBytesSize, kRawBytes, kFrameSize, kParameterCount); | 731 kRawBytesSize, kRawBytes, kFrameSize, kParameterCount, constant_pool); |
| 725 | 732 |
| 726 CHECK(array->IsBytecodeArray()); | 733 CHECK(array->IsBytecodeArray()); |
| 727 CHECK_EQ(array->length(), (int)sizeof(kRawBytes)); | 734 CHECK_EQ(array->length(), (int)sizeof(kRawBytes)); |
| 728 CHECK_EQ(array->frame_size(), kFrameSize); | 735 CHECK_EQ(array->frame_size(), kFrameSize); |
| 729 CHECK_EQ(array->parameter_count(), kParameterCount); | 736 CHECK_EQ(array->parameter_count(), kParameterCount); |
| 737 CHECK_EQ(array->constant_pool(), *constant_pool); |
| 730 CHECK_LE(array->address(), array->GetFirstBytecodeAddress()); | 738 CHECK_LE(array->address(), array->GetFirstBytecodeAddress()); |
| 731 CHECK_GE(array->address() + array->BytecodeArraySize(), | 739 CHECK_GE(array->address() + array->BytecodeArraySize(), |
| 732 array->GetFirstBytecodeAddress() + array->length()); | 740 array->GetFirstBytecodeAddress() + array->length()); |
| 733 for (int i = 0; i < kRawBytesSize; i++) { | 741 for (int i = 0; i < kRawBytesSize; i++) { |
| 734 CHECK_EQ(array->GetFirstBytecodeAddress()[i], kRawBytes[i]); | 742 CHECK_EQ(array->GetFirstBytecodeAddress()[i], kRawBytes[i]); |
| 735 CHECK_EQ(array->get(i), kRawBytes[i]); | 743 CHECK_EQ(array->get(i), kRawBytes[i]); |
| 736 } | 744 } |
| 737 | 745 |
| 738 // Full garbage collection | 746 FixedArray* old_constant_pool_address = *constant_pool; |
| 747 |
| 748 // Perform a full garbage collection and force the constant pool to be on an |
| 749 // evacuation candidate. |
| 750 Page* evac_page = Page::FromAddress(constant_pool->address()); |
| 751 evac_page->SetFlag(MemoryChunk::FORCE_EVACUATION_CANDIDATE_FOR_TESTING); |
| 739 heap->CollectAllGarbage(); | 752 heap->CollectAllGarbage(); |
| 740 | 753 |
| 741 // BytecodeArray should survive | 754 // BytecodeArray should survive. |
| 742 CHECK_EQ(array->length(), kRawBytesSize); | 755 CHECK_EQ(array->length(), kRawBytesSize); |
| 743 CHECK_EQ(array->frame_size(), kFrameSize); | 756 CHECK_EQ(array->frame_size(), kFrameSize); |
| 744 | |
| 745 for (int i = 0; i < kRawBytesSize; i++) { | 757 for (int i = 0; i < kRawBytesSize; i++) { |
| 746 CHECK_EQ(array->get(i), kRawBytes[i]); | 758 CHECK_EQ(array->get(i), kRawBytes[i]); |
| 747 CHECK_EQ(array->GetFirstBytecodeAddress()[i], kRawBytes[i]); | 759 CHECK_EQ(array->GetFirstBytecodeAddress()[i], kRawBytes[i]); |
| 748 } | 760 } |
| 761 |
| 762 // Constant pool should have been migrated. |
| 763 CHECK_EQ(array->constant_pool(), *constant_pool); |
| 764 CHECK_NE(array->constant_pool(), old_constant_pool_address); |
| 749 } | 765 } |
| 750 | 766 |
| 751 | 767 |
| 752 static const char* not_so_random_string_table[] = { | 768 static const char* not_so_random_string_table[] = { |
| 753 "abstract", | 769 "abstract", |
| 754 "boolean", | 770 "boolean", |
| 755 "break", | 771 "break", |
| 756 "byte", | 772 "byte", |
| 757 "case", | 773 "case", |
| 758 "catch", | 774 "catch", |
| (...skipping 5809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6568 { | 6584 { |
| 6569 SharedFunctionInfo::Iterator iterator(isolate); | 6585 SharedFunctionInfo::Iterator iterator(isolate); |
| 6570 while (iterator.Next()) sfi_count--; | 6586 while (iterator.Next()) sfi_count--; |
| 6571 } | 6587 } |
| 6572 | 6588 |
| 6573 CHECK_EQ(0, sfi_count); | 6589 CHECK_EQ(0, sfi_count); |
| 6574 } | 6590 } |
| 6575 | 6591 |
| 6576 } // namespace internal | 6592 } // namespace internal |
| 6577 } // namespace v8 | 6593 } // namespace v8 |
| OLD | NEW |