| 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 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 // We just initialized the VM, no heap allocation failure yet. | 784 // We just initialized the VM, no heap allocation failure yet. |
| 785 JSArray::Initialize(array, 0); | 785 JSArray::Initialize(array, 0); |
| 786 | 786 |
| 787 // Set array length to 0. | 787 // Set array length to 0. |
| 788 JSArray::SetElementsLength(array, handle(Smi::FromInt(0), isolate)).Check(); | 788 JSArray::SetElementsLength(array, handle(Smi::FromInt(0), isolate)).Check(); |
| 789 CHECK_EQ(Smi::FromInt(0), array->length()); | 789 CHECK_EQ(Smi::FromInt(0), array->length()); |
| 790 // Must be in fast mode. | 790 // Must be in fast mode. |
| 791 CHECK(array->HasFastSmiOrObjectElements()); | 791 CHECK(array->HasFastSmiOrObjectElements()); |
| 792 | 792 |
| 793 // array[length] = name. | 793 // array[length] = name. |
| 794 JSReceiver::SetElement(array, 0, name, NONE, SLOPPY).Check(); | 794 JSReceiver::SetElement(array, 0, name, SLOPPY).Check(); |
| 795 CHECK_EQ(Smi::FromInt(1), array->length()); | 795 CHECK_EQ(Smi::FromInt(1), array->length()); |
| 796 element = i::Object::GetElement(isolate, array, 0).ToHandleChecked(); | 796 element = i::Object::GetElement(isolate, array, 0).ToHandleChecked(); |
| 797 CHECK_EQ(*element, *name); | 797 CHECK_EQ(*element, *name); |
| 798 | 798 |
| 799 // Set array length with larger than smi value. | 799 // Set array length with larger than smi value. |
| 800 Handle<Object> length = | 800 Handle<Object> length = |
| 801 factory->NewNumberFromUint(static_cast<uint32_t>(Smi::kMaxValue) + 1); | 801 factory->NewNumberFromUint(static_cast<uint32_t>(Smi::kMaxValue) + 1); |
| 802 JSArray::SetElementsLength(array, length).Check(); | 802 JSArray::SetElementsLength(array, length).Check(); |
| 803 | 803 |
| 804 uint32_t int_length = 0; | 804 uint32_t int_length = 0; |
| 805 CHECK(length->ToArrayIndex(&int_length)); | 805 CHECK(length->ToArrayIndex(&int_length)); |
| 806 CHECK_EQ(*length, array->length()); | 806 CHECK_EQ(*length, array->length()); |
| 807 CHECK(array->HasDictionaryElements()); // Must be in slow mode. | 807 CHECK(array->HasDictionaryElements()); // Must be in slow mode. |
| 808 | 808 |
| 809 // array[length] = name. | 809 // array[length] = name. |
| 810 JSReceiver::SetElement(array, int_length, name, NONE, SLOPPY).Check(); | 810 JSReceiver::SetElement(array, int_length, name, SLOPPY).Check(); |
| 811 uint32_t new_int_length = 0; | 811 uint32_t new_int_length = 0; |
| 812 CHECK(array->length()->ToArrayIndex(&new_int_length)); | 812 CHECK(array->length()->ToArrayIndex(&new_int_length)); |
| 813 CHECK_EQ(static_cast<double>(int_length), new_int_length - 1); | 813 CHECK_EQ(static_cast<double>(int_length), new_int_length - 1); |
| 814 element = Object::GetElement(isolate, array, int_length).ToHandleChecked(); | 814 element = Object::GetElement(isolate, array, int_length).ToHandleChecked(); |
| 815 CHECK_EQ(*element, *name); | 815 CHECK_EQ(*element, *name); |
| 816 element = Object::GetElement(isolate, array, 0).ToHandleChecked(); | 816 element = Object::GetElement(isolate, array, 0).ToHandleChecked(); |
| 817 CHECK_EQ(*element, *name); | 817 CHECK_EQ(*element, *name); |
| 818 } | 818 } |
| 819 | 819 |
| 820 | 820 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 831 Handle<JSObject> obj = factory->NewJSObject(constructor); | 831 Handle<JSObject> obj = factory->NewJSObject(constructor); |
| 832 Handle<String> first = factory->InternalizeUtf8String("first"); | 832 Handle<String> first = factory->InternalizeUtf8String("first"); |
| 833 Handle<String> second = factory->InternalizeUtf8String("second"); | 833 Handle<String> second = factory->InternalizeUtf8String("second"); |
| 834 | 834 |
| 835 Handle<Smi> one(Smi::FromInt(1), isolate); | 835 Handle<Smi> one(Smi::FromInt(1), isolate); |
| 836 Handle<Smi> two(Smi::FromInt(2), isolate); | 836 Handle<Smi> two(Smi::FromInt(2), isolate); |
| 837 | 837 |
| 838 JSReceiver::SetProperty(obj, first, one, SLOPPY).Check(); | 838 JSReceiver::SetProperty(obj, first, one, SLOPPY).Check(); |
| 839 JSReceiver::SetProperty(obj, second, two, SLOPPY).Check(); | 839 JSReceiver::SetProperty(obj, second, two, SLOPPY).Check(); |
| 840 | 840 |
| 841 JSReceiver::SetElement(obj, 0, first, NONE, SLOPPY).Check(); | 841 JSReceiver::SetElement(obj, 0, first, SLOPPY).Check(); |
| 842 JSReceiver::SetElement(obj, 1, second, NONE, SLOPPY).Check(); | 842 JSReceiver::SetElement(obj, 1, second, SLOPPY).Check(); |
| 843 | 843 |
| 844 // Make the clone. | 844 // Make the clone. |
| 845 Handle<Object> value1, value2; | 845 Handle<Object> value1, value2; |
| 846 Handle<JSObject> clone = factory->CopyJSObject(obj); | 846 Handle<JSObject> clone = factory->CopyJSObject(obj); |
| 847 CHECK(!clone.is_identical_to(obj)); | 847 CHECK(!clone.is_identical_to(obj)); |
| 848 | 848 |
| 849 value1 = Object::GetElement(isolate, obj, 0).ToHandleChecked(); | 849 value1 = Object::GetElement(isolate, obj, 0).ToHandleChecked(); |
| 850 value2 = Object::GetElement(isolate, clone, 0).ToHandleChecked(); | 850 value2 = Object::GetElement(isolate, clone, 0).ToHandleChecked(); |
| 851 CHECK_EQ(*value1, *value2); | 851 CHECK_EQ(*value1, *value2); |
| 852 value1 = Object::GetElement(isolate, obj, 1).ToHandleChecked(); | 852 value1 = Object::GetElement(isolate, obj, 1).ToHandleChecked(); |
| 853 value2 = Object::GetElement(isolate, clone, 1).ToHandleChecked(); | 853 value2 = Object::GetElement(isolate, clone, 1).ToHandleChecked(); |
| 854 CHECK_EQ(*value1, *value2); | 854 CHECK_EQ(*value1, *value2); |
| 855 | 855 |
| 856 value1 = Object::GetProperty(obj, first).ToHandleChecked(); | 856 value1 = Object::GetProperty(obj, first).ToHandleChecked(); |
| 857 value2 = Object::GetProperty(clone, first).ToHandleChecked(); | 857 value2 = Object::GetProperty(clone, first).ToHandleChecked(); |
| 858 CHECK_EQ(*value1, *value2); | 858 CHECK_EQ(*value1, *value2); |
| 859 value1 = Object::GetProperty(obj, second).ToHandleChecked(); | 859 value1 = Object::GetProperty(obj, second).ToHandleChecked(); |
| 860 value2 = Object::GetProperty(clone, second).ToHandleChecked(); | 860 value2 = Object::GetProperty(clone, second).ToHandleChecked(); |
| 861 CHECK_EQ(*value1, *value2); | 861 CHECK_EQ(*value1, *value2); |
| 862 | 862 |
| 863 // Flip the values. | 863 // Flip the values. |
| 864 JSReceiver::SetProperty(clone, first, two, SLOPPY).Check(); | 864 JSReceiver::SetProperty(clone, first, two, SLOPPY).Check(); |
| 865 JSReceiver::SetProperty(clone, second, one, SLOPPY).Check(); | 865 JSReceiver::SetProperty(clone, second, one, SLOPPY).Check(); |
| 866 | 866 |
| 867 JSReceiver::SetElement(clone, 0, second, NONE, SLOPPY).Check(); | 867 JSReceiver::SetElement(clone, 0, second, SLOPPY).Check(); |
| 868 JSReceiver::SetElement(clone, 1, first, NONE, SLOPPY).Check(); | 868 JSReceiver::SetElement(clone, 1, first, SLOPPY).Check(); |
| 869 | 869 |
| 870 value1 = Object::GetElement(isolate, obj, 1).ToHandleChecked(); | 870 value1 = Object::GetElement(isolate, obj, 1).ToHandleChecked(); |
| 871 value2 = Object::GetElement(isolate, clone, 0).ToHandleChecked(); | 871 value2 = Object::GetElement(isolate, clone, 0).ToHandleChecked(); |
| 872 CHECK_EQ(*value1, *value2); | 872 CHECK_EQ(*value1, *value2); |
| 873 value1 = Object::GetElement(isolate, obj, 0).ToHandleChecked(); | 873 value1 = Object::GetElement(isolate, obj, 0).ToHandleChecked(); |
| 874 value2 = Object::GetElement(isolate, clone, 1).ToHandleChecked(); | 874 value2 = Object::GetElement(isolate, clone, 1).ToHandleChecked(); |
| 875 CHECK_EQ(*value1, *value2); | 875 CHECK_EQ(*value1, *value2); |
| 876 | 876 |
| 877 value1 = Object::GetProperty(obj, second).ToHandleChecked(); | 877 value1 = Object::GetProperty(obj, second).ToHandleChecked(); |
| 878 value2 = Object::GetProperty(clone, first).ToHandleChecked(); | 878 value2 = Object::GetProperty(clone, first).ToHandleChecked(); |
| (...skipping 5084 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5963 size_t counter2 = 2000; | 5963 size_t counter2 = 2000; |
| 5964 tracer->SampleAllocation(time2, counter2, counter2); | 5964 tracer->SampleAllocation(time2, counter2, counter2); |
| 5965 size_t throughput = tracer->AllocationThroughputInBytesPerMillisecond(100); | 5965 size_t throughput = tracer->AllocationThroughputInBytesPerMillisecond(100); |
| 5966 CHECK_EQ(2 * (counter2 - counter1) / (time2 - time1), throughput); | 5966 CHECK_EQ(2 * (counter2 - counter1) / (time2 - time1), throughput); |
| 5967 int time3 = 1000; | 5967 int time3 = 1000; |
| 5968 size_t counter3 = 30000; | 5968 size_t counter3 = 30000; |
| 5969 tracer->SampleAllocation(time3, counter3, counter3); | 5969 tracer->SampleAllocation(time3, counter3, counter3); |
| 5970 throughput = tracer->AllocationThroughputInBytesPerMillisecond(100); | 5970 throughput = tracer->AllocationThroughputInBytesPerMillisecond(100); |
| 5971 CHECK_EQ(2 * (counter3 - counter1) / (time3 - time1), throughput); | 5971 CHECK_EQ(2 * (counter3 - counter1) / (time3 - time1), throughput); |
| 5972 } | 5972 } |
| OLD | NEW |