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 15687 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15698 } | 15698 } |
15699 | 15699 |
15700 | 15700 |
15701 THREADED_TEST(PixelArray) { | 15701 THREADED_TEST(PixelArray) { |
15702 LocalContext context; | 15702 LocalContext context; |
15703 i::Isolate* isolate = CcTest::i_isolate(); | 15703 i::Isolate* isolate = CcTest::i_isolate(); |
15704 i::Factory* factory = isolate->factory(); | 15704 i::Factory* factory = isolate->factory(); |
15705 v8::HandleScope scope(context->GetIsolate()); | 15705 v8::HandleScope scope(context->GetIsolate()); |
15706 const int kElementCount = 260; | 15706 const int kElementCount = 260; |
15707 uint8_t* pixel_data = reinterpret_cast<uint8_t*>(malloc(kElementCount)); | 15707 uint8_t* pixel_data = reinterpret_cast<uint8_t*>(malloc(kElementCount)); |
15708 i::Handle<i::ExternalPixelArray> pixels = | 15708 i::Handle<i::ExternalUint8ClampedArray> pixels = |
15709 i::Handle<i::ExternalPixelArray>::cast( | 15709 i::Handle<i::ExternalUint8ClampedArray>::cast( |
15710 factory->NewExternalArray(kElementCount, | 15710 factory->NewExternalArray(kElementCount, |
15711 v8::kExternalPixelArray, | 15711 v8::kExternalUint8ClampedArray, |
15712 pixel_data)); | 15712 pixel_data)); |
15713 // Force GC to trigger verification. | 15713 // Force GC to trigger verification. |
15714 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | 15714 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
15715 for (int i = 0; i < kElementCount; i++) { | 15715 for (int i = 0; i < kElementCount; i++) { |
15716 pixels->set(i, i % 256); | 15716 pixels->set(i, i % 256); |
15717 } | 15717 } |
15718 // Force GC to trigger verification. | 15718 // Force GC to trigger verification. |
15719 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | 15719 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
15720 for (int i = 0; i < kElementCount; i++) { | 15720 for (int i = 0; i < kElementCount; i++) { |
15721 CHECK_EQ(i % 256, pixels->get_scalar(i)); | 15721 CHECK_EQ(i % 256, pixels->get_scalar(i)); |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16112 } | 16112 } |
16113 | 16113 |
16114 | 16114 |
16115 THREADED_TEST(PixelArrayWithInterceptor) { | 16115 THREADED_TEST(PixelArrayWithInterceptor) { |
16116 LocalContext context; | 16116 LocalContext context; |
16117 i::Factory* factory = CcTest::i_isolate()->factory(); | 16117 i::Factory* factory = CcTest::i_isolate()->factory(); |
16118 v8::Isolate* isolate = context->GetIsolate(); | 16118 v8::Isolate* isolate = context->GetIsolate(); |
16119 v8::HandleScope scope(isolate); | 16119 v8::HandleScope scope(isolate); |
16120 const int kElementCount = 260; | 16120 const int kElementCount = 260; |
16121 uint8_t* pixel_data = reinterpret_cast<uint8_t*>(malloc(kElementCount)); | 16121 uint8_t* pixel_data = reinterpret_cast<uint8_t*>(malloc(kElementCount)); |
16122 i::Handle<i::ExternalPixelArray> pixels = | 16122 i::Handle<i::ExternalUint8ClampedArray> pixels = |
16123 i::Handle<i::ExternalPixelArray>::cast( | 16123 i::Handle<i::ExternalUint8ClampedArray>::cast( |
16124 factory->NewExternalArray(kElementCount, | 16124 factory->NewExternalArray(kElementCount, |
16125 v8::kExternalPixelArray, | 16125 v8::kExternalUint8ClampedArray, |
16126 pixel_data)); | 16126 pixel_data)); |
16127 for (int i = 0; i < kElementCount; i++) { | 16127 for (int i = 0; i < kElementCount; i++) { |
16128 pixels->set(i, i % 256); | 16128 pixels->set(i, i % 256); |
16129 } | 16129 } |
16130 v8::Handle<v8::ObjectTemplate> templ = | 16130 v8::Handle<v8::ObjectTemplate> templ = |
16131 v8::ObjectTemplate::New(context->GetIsolate()); | 16131 v8::ObjectTemplate::New(context->GetIsolate()); |
16132 templ->SetIndexedPropertyHandler(NotHandledIndexedPropertyGetter, | 16132 templ->SetIndexedPropertyHandler(NotHandledIndexedPropertyGetter, |
16133 NotHandledIndexedPropertySetter); | 16133 NotHandledIndexedPropertySetter); |
16134 v8::Handle<v8::Object> obj = templ->NewInstance(); | 16134 v8::Handle<v8::Object> obj = templ->NewInstance(); |
16135 obj->SetIndexedPropertiesToPixelData(pixel_data, kElementCount); | 16135 obj->SetIndexedPropertiesToPixelData(pixel_data, kElementCount); |
16136 context->Global()->Set(v8_str("pixels"), obj); | 16136 context->Global()->Set(v8_str("pixels"), obj); |
16137 v8::Handle<v8::Value> result = CompileRun("pixels[1]"); | 16137 v8::Handle<v8::Value> result = CompileRun("pixels[1]"); |
16138 CHECK_EQ(1, result->Int32Value()); | 16138 CHECK_EQ(1, result->Int32Value()); |
16139 result = CompileRun("var sum = 0;" | 16139 result = CompileRun("var sum = 0;" |
16140 "for (var i = 0; i < 8; i++) {" | 16140 "for (var i = 0; i < 8; i++) {" |
16141 " sum += pixels[i] = pixels[i] = -i;" | 16141 " sum += pixels[i] = pixels[i] = -i;" |
16142 "}" | 16142 "}" |
16143 "sum;"); | 16143 "sum;"); |
16144 CHECK_EQ(-28, result->Int32Value()); | 16144 CHECK_EQ(-28, result->Int32Value()); |
16145 result = CompileRun("pixels.hasOwnProperty('1')"); | 16145 result = CompileRun("pixels.hasOwnProperty('1')"); |
16146 CHECK(result->BooleanValue()); | 16146 CHECK(result->BooleanValue()); |
16147 free(pixel_data); | 16147 free(pixel_data); |
16148 } | 16148 } |
16149 | 16149 |
16150 | 16150 |
16151 static int ExternalArrayElementSize(v8::ExternalArrayType array_type) { | 16151 static int ExternalArrayElementSize(v8::ExternalArrayType array_type) { |
16152 switch (array_type) { | 16152 switch (array_type) { |
16153 case v8::kExternalByteArray: | 16153 case v8::kExternalInt8Array: |
16154 case v8::kExternalUnsignedByteArray: | 16154 case v8::kExternalUint8Array: |
16155 case v8::kExternalPixelArray: | 16155 case v8::kExternalUint8ClampedArray: |
16156 return 1; | 16156 return 1; |
16157 break; | 16157 break; |
16158 case v8::kExternalShortArray: | 16158 case v8::kExternalInt16Array: |
16159 case v8::kExternalUnsignedShortArray: | 16159 case v8::kExternalUint16Array: |
16160 return 2; | 16160 return 2; |
16161 break; | 16161 break; |
16162 case v8::kExternalIntArray: | 16162 case v8::kExternalInt32Array: |
16163 case v8::kExternalUnsignedIntArray: | 16163 case v8::kExternalUint32Array: |
16164 case v8::kExternalFloatArray: | 16164 case v8::kExternalFloat32Array: |
16165 return 4; | 16165 return 4; |
16166 break; | 16166 break; |
16167 case v8::kExternalDoubleArray: | 16167 case v8::kExternalFloat64Array: |
16168 return 8; | 16168 return 8; |
16169 break; | 16169 break; |
16170 default: | 16170 default: |
16171 UNREACHABLE(); | 16171 UNREACHABLE(); |
16172 return -1; | 16172 return -1; |
16173 } | 16173 } |
16174 UNREACHABLE(); | 16174 UNREACHABLE(); |
16175 return -1; | 16175 return -1; |
16176 } | 16176 } |
16177 | 16177 |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16319 element_count); | 16319 element_count); |
16320 result = CompileRun(test_buf.start()); | 16320 result = CompileRun(test_buf.start()); |
16321 CHECK_EQ(false, result->BooleanValue()); | 16321 CHECK_EQ(false, result->BooleanValue()); |
16322 | 16322 |
16323 // Check other boundary conditions, values and operations. | 16323 // Check other boundary conditions, values and operations. |
16324 result = CompileRun("for (var i = 0; i < 8; i++) {" | 16324 result = CompileRun("for (var i = 0; i < 8; i++) {" |
16325 " ext_array[7] = undefined;" | 16325 " ext_array[7] = undefined;" |
16326 "}" | 16326 "}" |
16327 "ext_array[7];"); | 16327 "ext_array[7];"); |
16328 CHECK_EQ(0, result->Int32Value()); | 16328 CHECK_EQ(0, result->Int32Value()); |
16329 if (array_type == v8::kExternalDoubleArray || | 16329 if (array_type == v8::kExternalFloat64Array || |
16330 array_type == v8::kExternalFloatArray) { | 16330 array_type == v8::kExternalFloat32Array) { |
16331 CHECK_EQ(static_cast<int>(i::OS::nan_value()), | 16331 CHECK_EQ(static_cast<int>(i::OS::nan_value()), |
16332 static_cast<int>( | 16332 static_cast<int>( |
16333 jsobj->GetElement(isolate, 7)->ToObjectChecked()->Number())); | 16333 jsobj->GetElement(isolate, 7)->ToObjectChecked()->Number())); |
16334 } else { | 16334 } else { |
16335 CheckElementValue(isolate, 0, jsobj, 7); | 16335 CheckElementValue(isolate, 0, jsobj, 7); |
16336 } | 16336 } |
16337 | 16337 |
16338 result = CompileRun("for (var i = 0; i < 8; i++) {" | 16338 result = CompileRun("for (var i = 0; i < 8; i++) {" |
16339 " ext_array[6] = '2.3';" | 16339 " ext_array[6] = '2.3';" |
16340 "}" | 16340 "}" |
16341 "ext_array[6];"); | 16341 "ext_array[6];"); |
16342 CHECK_EQ(2, result->Int32Value()); | 16342 CHECK_EQ(2, result->Int32Value()); |
16343 CHECK_EQ(2, | 16343 CHECK_EQ(2, |
16344 static_cast<int>( | 16344 static_cast<int>( |
16345 jsobj->GetElement(isolate, 6)->ToObjectChecked()->Number())); | 16345 jsobj->GetElement(isolate, 6)->ToObjectChecked()->Number())); |
16346 | 16346 |
16347 if (array_type != v8::kExternalFloatArray && | 16347 if (array_type != v8::kExternalFloat32Array && |
16348 array_type != v8::kExternalDoubleArray) { | 16348 array_type != v8::kExternalFloat64Array) { |
16349 // Though the specification doesn't state it, be explicit about | 16349 // Though the specification doesn't state it, be explicit about |
16350 // converting NaNs and +/-Infinity to zero. | 16350 // converting NaNs and +/-Infinity to zero. |
16351 result = CompileRun("for (var i = 0; i < 8; i++) {" | 16351 result = CompileRun("for (var i = 0; i < 8; i++) {" |
16352 " ext_array[i] = 5;" | 16352 " ext_array[i] = 5;" |
16353 "}" | 16353 "}" |
16354 "for (var i = 0; i < 8; i++) {" | 16354 "for (var i = 0; i < 8; i++) {" |
16355 " ext_array[i] = NaN;" | 16355 " ext_array[i] = NaN;" |
16356 "}" | 16356 "}" |
16357 "ext_array[5];"); | 16357 "ext_array[5];"); |
16358 CHECK_EQ(0, result->Int32Value()); | 16358 CHECK_EQ(0, result->Int32Value()); |
16359 CheckElementValue(isolate, 0, jsobj, 5); | 16359 CheckElementValue(isolate, 0, jsobj, 5); |
16360 | 16360 |
16361 result = CompileRun("for (var i = 0; i < 8; i++) {" | 16361 result = CompileRun("for (var i = 0; i < 8; i++) {" |
16362 " ext_array[i] = 5;" | 16362 " ext_array[i] = 5;" |
16363 "}" | 16363 "}" |
16364 "for (var i = 0; i < 8; i++) {" | 16364 "for (var i = 0; i < 8; i++) {" |
16365 " ext_array[i] = Infinity;" | 16365 " ext_array[i] = Infinity;" |
16366 "}" | 16366 "}" |
16367 "ext_array[5];"); | 16367 "ext_array[5];"); |
16368 int expected_value = | 16368 int expected_value = |
16369 (array_type == v8::kExternalPixelArray) ? 255 : 0; | 16369 (array_type == v8::kExternalUint8ClampedArray) ? 255 : 0; |
16370 CHECK_EQ(expected_value, result->Int32Value()); | 16370 CHECK_EQ(expected_value, result->Int32Value()); |
16371 CheckElementValue(isolate, expected_value, jsobj, 5); | 16371 CheckElementValue(isolate, expected_value, jsobj, 5); |
16372 | 16372 |
16373 result = CompileRun("for (var i = 0; i < 8; i++) {" | 16373 result = CompileRun("for (var i = 0; i < 8; i++) {" |
16374 " ext_array[i] = 5;" | 16374 " ext_array[i] = 5;" |
16375 "}" | 16375 "}" |
16376 "for (var i = 0; i < 8; i++) {" | 16376 "for (var i = 0; i < 8; i++) {" |
16377 " ext_array[i] = -Infinity;" | 16377 " ext_array[i] = -Infinity;" |
16378 "}" | 16378 "}" |
16379 "ext_array[5];"); | 16379 "ext_array[5];"); |
16380 CHECK_EQ(0, result->Int32Value()); | 16380 CHECK_EQ(0, result->Int32Value()); |
16381 CheckElementValue(isolate, 0, jsobj, 5); | 16381 CheckElementValue(isolate, 0, jsobj, 5); |
16382 | 16382 |
16383 // Check truncation behavior of integral arrays. | 16383 // Check truncation behavior of integral arrays. |
16384 const char* unsigned_data = | 16384 const char* unsigned_data = |
16385 "var source_data = [0.6, 10.6];" | 16385 "var source_data = [0.6, 10.6];" |
16386 "var expected_results = [0, 10];"; | 16386 "var expected_results = [0, 10];"; |
16387 const char* signed_data = | 16387 const char* signed_data = |
16388 "var source_data = [0.6, 10.6, -0.6, -10.6];" | 16388 "var source_data = [0.6, 10.6, -0.6, -10.6];" |
16389 "var expected_results = [0, 10, 0, -10];"; | 16389 "var expected_results = [0, 10, 0, -10];"; |
16390 const char* pixel_data = | 16390 const char* pixel_data = |
16391 "var source_data = [0.6, 10.6];" | 16391 "var source_data = [0.6, 10.6];" |
16392 "var expected_results = [1, 11];"; | 16392 "var expected_results = [1, 11];"; |
16393 bool is_unsigned = | 16393 bool is_unsigned = |
16394 (array_type == v8::kExternalUnsignedByteArray || | 16394 (array_type == v8::kExternalUint8Array || |
16395 array_type == v8::kExternalUnsignedShortArray || | 16395 array_type == v8::kExternalUint16Array || |
16396 array_type == v8::kExternalUnsignedIntArray); | 16396 array_type == v8::kExternalUint32Array); |
16397 bool is_pixel_data = array_type == v8::kExternalPixelArray; | 16397 bool is_pixel_data = array_type == v8::kExternalUint8ClampedArray; |
16398 | 16398 |
16399 i::OS::SNPrintF(test_buf, | 16399 i::OS::SNPrintF(test_buf, |
16400 "%s" | 16400 "%s" |
16401 "var all_passed = true;" | 16401 "var all_passed = true;" |
16402 "for (var i = 0; i < source_data.length; i++) {" | 16402 "for (var i = 0; i < source_data.length; i++) {" |
16403 " for (var j = 0; j < 8; j++) {" | 16403 " for (var j = 0; j < 8; j++) {" |
16404 " ext_array[j] = source_data[i];" | 16404 " ext_array[j] = source_data[i];" |
16405 " }" | 16405 " }" |
16406 " all_passed = all_passed &&" | 16406 " all_passed = all_passed &&" |
16407 " (ext_array[5] == expected_results[i]);" | 16407 " (ext_array[5] == expected_results[i]);" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16517 | 16517 |
16518 ObjectWithExternalArrayTestHelper<FixedTypedArrayClass, ElementType>( | 16518 ObjectWithExternalArrayTestHelper<FixedTypedArrayClass, ElementType>( |
16519 context.local(), obj, kElementCount, array_type, | 16519 context.local(), obj, kElementCount, array_type, |
16520 static_cast<int64_t>(low), | 16520 static_cast<int64_t>(low), |
16521 static_cast<int64_t>(high)); | 16521 static_cast<int64_t>(high)); |
16522 } | 16522 } |
16523 | 16523 |
16524 | 16524 |
16525 THREADED_TEST(FixedUint8Array) { | 16525 THREADED_TEST(FixedUint8Array) { |
16526 FixedTypedArrayTestHelper<i::FixedUint8Array, i::UINT8_ELEMENTS, uint8_t>( | 16526 FixedTypedArrayTestHelper<i::FixedUint8Array, i::UINT8_ELEMENTS, uint8_t>( |
16527 v8::kExternalUnsignedByteArray, | 16527 v8::kExternalUint8Array, |
16528 0x0, 0xFF); | 16528 0x0, 0xFF); |
16529 } | 16529 } |
16530 | 16530 |
16531 | 16531 |
16532 THREADED_TEST(FixedUint8ClampedArray) { | 16532 THREADED_TEST(FixedUint8ClampedArray) { |
16533 FixedTypedArrayTestHelper<i::FixedUint8ClampedArray, | 16533 FixedTypedArrayTestHelper<i::FixedUint8ClampedArray, |
16534 i::UINT8_CLAMPED_ELEMENTS, uint8_t>( | 16534 i::UINT8_CLAMPED_ELEMENTS, uint8_t>( |
16535 v8::kExternalPixelArray, | 16535 v8::kExternalUint8ClampedArray, |
16536 0x0, 0xFF); | 16536 0x0, 0xFF); |
16537 } | 16537 } |
16538 | 16538 |
16539 | 16539 |
16540 THREADED_TEST(FixedInt8Array) { | 16540 THREADED_TEST(FixedInt8Array) { |
16541 FixedTypedArrayTestHelper<i::FixedInt8Array, i::INT8_ELEMENTS, int8_t>( | 16541 FixedTypedArrayTestHelper<i::FixedInt8Array, i::INT8_ELEMENTS, int8_t>( |
16542 v8::kExternalByteArray, | 16542 v8::kExternalInt8Array, |
16543 -0x80, 0x7F); | 16543 -0x80, 0x7F); |
16544 } | 16544 } |
16545 | 16545 |
16546 | 16546 |
16547 THREADED_TEST(FixedUint16Array) { | 16547 THREADED_TEST(FixedUint16Array) { |
16548 FixedTypedArrayTestHelper<i::FixedUint16Array, i::UINT16_ELEMENTS, uint16_t>( | 16548 FixedTypedArrayTestHelper<i::FixedUint16Array, i::UINT16_ELEMENTS, uint16_t>( |
16549 v8::kExternalUnsignedShortArray, | 16549 v8::kExternalUint16Array, |
16550 0x0, 0xFFFF); | 16550 0x0, 0xFFFF); |
16551 } | 16551 } |
16552 | 16552 |
16553 | 16553 |
16554 THREADED_TEST(FixedInt16Array) { | 16554 THREADED_TEST(FixedInt16Array) { |
16555 FixedTypedArrayTestHelper<i::FixedInt16Array, i::INT16_ELEMENTS, int16_t>( | 16555 FixedTypedArrayTestHelper<i::FixedInt16Array, i::INT16_ELEMENTS, int16_t>( |
16556 v8::kExternalShortArray, | 16556 v8::kExternalInt16Array, |
16557 -0x8000, 0x7FFF); | 16557 -0x8000, 0x7FFF); |
16558 } | 16558 } |
16559 | 16559 |
16560 | 16560 |
16561 THREADED_TEST(FixedUint32Array) { | 16561 THREADED_TEST(FixedUint32Array) { |
16562 FixedTypedArrayTestHelper<i::FixedUint32Array, i::UINT32_ELEMENTS, uint32_t>( | 16562 FixedTypedArrayTestHelper<i::FixedUint32Array, i::UINT32_ELEMENTS, uint32_t>( |
16563 v8::kExternalUnsignedIntArray, | 16563 v8::kExternalUint32Array, |
16564 0x0, UINT_MAX); | 16564 0x0, UINT_MAX); |
16565 } | 16565 } |
16566 | 16566 |
16567 | 16567 |
16568 THREADED_TEST(FixedInt32Array) { | 16568 THREADED_TEST(FixedInt32Array) { |
16569 FixedTypedArrayTestHelper<i::FixedInt32Array, i::INT32_ELEMENTS, int32_t>( | 16569 FixedTypedArrayTestHelper<i::FixedInt32Array, i::INT32_ELEMENTS, int32_t>( |
16570 v8::kExternalIntArray, | 16570 v8::kExternalInt32Array, |
16571 INT_MIN, INT_MAX); | 16571 INT_MIN, INT_MAX); |
16572 } | 16572 } |
16573 | 16573 |
16574 | 16574 |
16575 THREADED_TEST(FixedFloat32Array) { | 16575 THREADED_TEST(FixedFloat32Array) { |
16576 FixedTypedArrayTestHelper<i::FixedFloat32Array, i::FLOAT32_ELEMENTS, float>( | 16576 FixedTypedArrayTestHelper<i::FixedFloat32Array, i::FLOAT32_ELEMENTS, float>( |
16577 v8::kExternalFloatArray, | 16577 v8::kExternalFloat32Array, |
16578 -500, 500); | 16578 -500, 500); |
16579 } | 16579 } |
16580 | 16580 |
16581 | 16581 |
16582 THREADED_TEST(FixedFloat64Array) { | 16582 THREADED_TEST(FixedFloat64Array) { |
16583 FixedTypedArrayTestHelper<i::FixedFloat64Array, i::FLOAT64_ELEMENTS, float>( | 16583 FixedTypedArrayTestHelper<i::FixedFloat64Array, i::FLOAT64_ELEMENTS, float>( |
16584 v8::kExternalDoubleArray, | 16584 v8::kExternalFloat64Array, |
16585 -500, 500); | 16585 -500, 500); |
16586 } | 16586 } |
16587 | 16587 |
16588 | 16588 |
16589 template <class ExternalArrayClass, class ElementType> | 16589 template <class ExternalArrayClass, class ElementType> |
16590 static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, | 16590 static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
16591 int64_t low, | 16591 int64_t low, |
16592 int64_t high) { | 16592 int64_t high) { |
16593 LocalContext context; | 16593 LocalContext context; |
16594 i::Isolate* isolate = CcTest::i_isolate(); | 16594 i::Isolate* isolate = CcTest::i_isolate(); |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16796 v8::Int32::New(context->GetIsolate(), 256)); | 16796 v8::Int32::New(context->GetIsolate(), 256)); |
16797 context->Global()->Set(v8_str("ext_array"), obj2); | 16797 context->Global()->Set(v8_str("ext_array"), obj2); |
16798 result = CompileRun("ext_array[''] = function() {return 1503;};" | 16798 result = CompileRun("ext_array[''] = function() {return 1503;};" |
16799 "ext_array['']();"); | 16799 "ext_array['']();"); |
16800 } | 16800 } |
16801 | 16801 |
16802 free(array_data); | 16802 free(array_data); |
16803 } | 16803 } |
16804 | 16804 |
16805 | 16805 |
16806 THREADED_TEST(ExternalByteArray) { | 16806 THREADED_TEST(ExternalInt8Array) { |
16807 ExternalArrayTestHelper<i::ExternalByteArray, int8_t>( | 16807 ExternalArrayTestHelper<i::ExternalInt8Array, int8_t>( |
16808 v8::kExternalByteArray, | 16808 v8::kExternalInt8Array, |
16809 -128, | 16809 -128, |
16810 127); | 16810 127); |
16811 } | 16811 } |
16812 | 16812 |
16813 | 16813 |
16814 THREADED_TEST(ExternalUnsignedByteArray) { | 16814 THREADED_TEST(ExternalUint8Array) { |
16815 ExternalArrayTestHelper<i::ExternalUnsignedByteArray, uint8_t>( | 16815 ExternalArrayTestHelper<i::ExternalUint8Array, uint8_t>( |
16816 v8::kExternalUnsignedByteArray, | 16816 v8::kExternalUint8Array, |
16817 0, | 16817 0, |
16818 255); | 16818 255); |
16819 } | 16819 } |
16820 | 16820 |
16821 | 16821 |
16822 THREADED_TEST(ExternalPixelArray) { | 16822 THREADED_TEST(ExternalUint8ClampedArray) { |
16823 ExternalArrayTestHelper<i::ExternalPixelArray, uint8_t>( | 16823 ExternalArrayTestHelper<i::ExternalUint8ClampedArray, uint8_t>( |
16824 v8::kExternalPixelArray, | 16824 v8::kExternalUint8ClampedArray, |
16825 0, | 16825 0, |
16826 255); | 16826 255); |
16827 } | 16827 } |
16828 | 16828 |
16829 | 16829 |
16830 THREADED_TEST(ExternalShortArray) { | 16830 THREADED_TEST(ExternalInt16Array) { |
16831 ExternalArrayTestHelper<i::ExternalShortArray, int16_t>( | 16831 ExternalArrayTestHelper<i::ExternalInt16Array, int16_t>( |
16832 v8::kExternalShortArray, | 16832 v8::kExternalInt16Array, |
16833 -32768, | 16833 -32768, |
16834 32767); | 16834 32767); |
16835 } | 16835 } |
16836 | 16836 |
16837 | 16837 |
16838 THREADED_TEST(ExternalUnsignedShortArray) { | 16838 THREADED_TEST(ExternalUint16Array) { |
16839 ExternalArrayTestHelper<i::ExternalUnsignedShortArray, uint16_t>( | 16839 ExternalArrayTestHelper<i::ExternalUint16Array, uint16_t>( |
16840 v8::kExternalUnsignedShortArray, | 16840 v8::kExternalUint16Array, |
16841 0, | 16841 0, |
16842 65535); | 16842 65535); |
16843 } | 16843 } |
16844 | 16844 |
16845 | 16845 |
16846 THREADED_TEST(ExternalIntArray) { | 16846 THREADED_TEST(ExternalInt32Array) { |
16847 ExternalArrayTestHelper<i::ExternalIntArray, int32_t>( | 16847 ExternalArrayTestHelper<i::ExternalInt32Array, int32_t>( |
16848 v8::kExternalIntArray, | 16848 v8::kExternalInt32Array, |
16849 INT_MIN, // -2147483648 | 16849 INT_MIN, // -2147483648 |
16850 INT_MAX); // 2147483647 | 16850 INT_MAX); // 2147483647 |
16851 } | 16851 } |
16852 | 16852 |
16853 | 16853 |
16854 THREADED_TEST(ExternalUnsignedIntArray) { | 16854 THREADED_TEST(ExternalUint32Array) { |
16855 ExternalArrayTestHelper<i::ExternalUnsignedIntArray, uint32_t>( | 16855 ExternalArrayTestHelper<i::ExternalUint32Array, uint32_t>( |
16856 v8::kExternalUnsignedIntArray, | 16856 v8::kExternalUint32Array, |
16857 0, | 16857 0, |
16858 UINT_MAX); // 4294967295 | 16858 UINT_MAX); // 4294967295 |
16859 } | 16859 } |
16860 | 16860 |
16861 | 16861 |
16862 THREADED_TEST(ExternalFloatArray) { | 16862 THREADED_TEST(ExternalFloat32Array) { |
16863 ExternalArrayTestHelper<i::ExternalFloatArray, float>( | 16863 ExternalArrayTestHelper<i::ExternalFloat32Array, float>( |
16864 v8::kExternalFloatArray, | 16864 v8::kExternalFloat32Array, |
16865 -500, | 16865 -500, |
16866 500); | 16866 500); |
16867 } | 16867 } |
16868 | 16868 |
16869 | 16869 |
16870 THREADED_TEST(ExternalDoubleArray) { | 16870 THREADED_TEST(ExternalFloat64Array) { |
16871 ExternalArrayTestHelper<i::ExternalDoubleArray, double>( | 16871 ExternalArrayTestHelper<i::ExternalFloat64Array, double>( |
16872 v8::kExternalDoubleArray, | 16872 v8::kExternalFloat64Array, |
16873 -500, | 16873 -500, |
16874 500); | 16874 500); |
16875 } | 16875 } |
16876 | 16876 |
16877 | 16877 |
16878 THREADED_TEST(ExternalArrays) { | 16878 THREADED_TEST(ExternalArrays) { |
16879 TestExternalByteArray(); | 16879 TestExternalInt8Array(); |
16880 TestExternalUnsignedByteArray(); | 16880 TestExternalUint8Array(); |
16881 TestExternalShortArray(); | 16881 TestExternalInt16Array(); |
16882 TestExternalUnsignedShortArray(); | 16882 TestExternalUint16Array(); |
16883 TestExternalIntArray(); | 16883 TestExternalInt32Array(); |
16884 TestExternalUnsignedIntArray(); | 16884 TestExternalUint32Array(); |
16885 TestExternalFloatArray(); | 16885 TestExternalFloat32Array(); |
16886 } | 16886 } |
16887 | 16887 |
16888 | 16888 |
16889 void ExternalArrayInfoTestHelper(v8::ExternalArrayType array_type) { | 16889 void ExternalArrayInfoTestHelper(v8::ExternalArrayType array_type) { |
16890 LocalContext context; | 16890 LocalContext context; |
16891 v8::HandleScope scope(context->GetIsolate()); | 16891 v8::HandleScope scope(context->GetIsolate()); |
16892 for (int size = 0; size < 100; size += 10) { | 16892 for (int size = 0; size < 100; size += 10) { |
16893 int element_size = ExternalArrayElementSize(array_type); | 16893 int element_size = ExternalArrayElementSize(array_type); |
16894 void* external_data = malloc(size * element_size); | 16894 void* external_data = malloc(size * element_size); |
16895 v8::Handle<v8::Object> obj = v8::Object::New(context->GetIsolate()); | 16895 v8::Handle<v8::Object> obj = v8::Object::New(context->GetIsolate()); |
16896 obj->SetIndexedPropertiesToExternalArrayData( | 16896 obj->SetIndexedPropertiesToExternalArrayData( |
16897 external_data, array_type, size); | 16897 external_data, array_type, size); |
16898 CHECK(obj->HasIndexedPropertiesInExternalArrayData()); | 16898 CHECK(obj->HasIndexedPropertiesInExternalArrayData()); |
16899 CHECK_EQ(external_data, obj->GetIndexedPropertiesExternalArrayData()); | 16899 CHECK_EQ(external_data, obj->GetIndexedPropertiesExternalArrayData()); |
16900 CHECK_EQ(array_type, obj->GetIndexedPropertiesExternalArrayDataType()); | 16900 CHECK_EQ(array_type, obj->GetIndexedPropertiesExternalArrayDataType()); |
16901 CHECK_EQ(size, obj->GetIndexedPropertiesExternalArrayDataLength()); | 16901 CHECK_EQ(size, obj->GetIndexedPropertiesExternalArrayDataLength()); |
16902 free(external_data); | 16902 free(external_data); |
16903 } | 16903 } |
16904 } | 16904 } |
16905 | 16905 |
16906 | 16906 |
16907 THREADED_TEST(ExternalArrayInfo) { | 16907 THREADED_TEST(ExternalArrayInfo) { |
16908 ExternalArrayInfoTestHelper(v8::kExternalByteArray); | 16908 ExternalArrayInfoTestHelper(v8::kExternalInt8Array); |
16909 ExternalArrayInfoTestHelper(v8::kExternalUnsignedByteArray); | 16909 ExternalArrayInfoTestHelper(v8::kExternalUint8Array); |
16910 ExternalArrayInfoTestHelper(v8::kExternalShortArray); | 16910 ExternalArrayInfoTestHelper(v8::kExternalInt16Array); |
16911 ExternalArrayInfoTestHelper(v8::kExternalUnsignedShortArray); | 16911 ExternalArrayInfoTestHelper(v8::kExternalUint16Array); |
16912 ExternalArrayInfoTestHelper(v8::kExternalIntArray); | 16912 ExternalArrayInfoTestHelper(v8::kExternalInt32Array); |
16913 ExternalArrayInfoTestHelper(v8::kExternalUnsignedIntArray); | 16913 ExternalArrayInfoTestHelper(v8::kExternalUint32Array); |
16914 ExternalArrayInfoTestHelper(v8::kExternalFloatArray); | 16914 ExternalArrayInfoTestHelper(v8::kExternalFloat32Array); |
16915 ExternalArrayInfoTestHelper(v8::kExternalDoubleArray); | 16915 ExternalArrayInfoTestHelper(v8::kExternalFloat64Array); |
16916 ExternalArrayInfoTestHelper(v8::kExternalPixelArray); | 16916 ExternalArrayInfoTestHelper(v8::kExternalUint8ClampedArray); |
16917 } | 16917 } |
16918 | 16918 |
16919 | 16919 |
16920 void ExtArrayLimitsHelper(v8::Isolate* isolate, | 16920 void ExtArrayLimitsHelper(v8::Isolate* isolate, |
16921 v8::ExternalArrayType array_type, | 16921 v8::ExternalArrayType array_type, |
16922 int size) { | 16922 int size) { |
16923 v8::Handle<v8::Object> obj = v8::Object::New(isolate); | 16923 v8::Handle<v8::Object> obj = v8::Object::New(isolate); |
16924 v8::V8::SetFatalErrorHandler(StoringErrorCallback); | 16924 v8::V8::SetFatalErrorHandler(StoringErrorCallback); |
16925 last_location = last_message = NULL; | 16925 last_location = last_message = NULL; |
16926 obj->SetIndexedPropertiesToExternalArrayData(NULL, array_type, size); | 16926 obj->SetIndexedPropertiesToExternalArrayData(NULL, array_type, size); |
16927 CHECK(!obj->HasIndexedPropertiesInExternalArrayData()); | 16927 CHECK(!obj->HasIndexedPropertiesInExternalArrayData()); |
16928 CHECK_NE(NULL, last_location); | 16928 CHECK_NE(NULL, last_location); |
16929 CHECK_NE(NULL, last_message); | 16929 CHECK_NE(NULL, last_message); |
16930 } | 16930 } |
16931 | 16931 |
16932 | 16932 |
16933 TEST(ExternalArrayLimits) { | 16933 TEST(ExternalArrayLimits) { |
16934 LocalContext context; | 16934 LocalContext context; |
16935 v8::Isolate* isolate = context->GetIsolate(); | 16935 v8::Isolate* isolate = context->GetIsolate(); |
16936 v8::HandleScope scope(isolate); | 16936 v8::HandleScope scope(isolate); |
16937 ExtArrayLimitsHelper(isolate, v8::kExternalByteArray, 0x40000000); | 16937 ExtArrayLimitsHelper(isolate, v8::kExternalInt8Array, 0x40000000); |
16938 ExtArrayLimitsHelper(isolate, v8::kExternalByteArray, 0xffffffff); | 16938 ExtArrayLimitsHelper(isolate, v8::kExternalInt8Array, 0xffffffff); |
16939 ExtArrayLimitsHelper(isolate, v8::kExternalUnsignedByteArray, 0x40000000); | 16939 ExtArrayLimitsHelper(isolate, v8::kExternalUint8Array, 0x40000000); |
16940 ExtArrayLimitsHelper(isolate, v8::kExternalUnsignedByteArray, 0xffffffff); | 16940 ExtArrayLimitsHelper(isolate, v8::kExternalUint8Array, 0xffffffff); |
16941 ExtArrayLimitsHelper(isolate, v8::kExternalShortArray, 0x40000000); | 16941 ExtArrayLimitsHelper(isolate, v8::kExternalInt16Array, 0x40000000); |
16942 ExtArrayLimitsHelper(isolate, v8::kExternalShortArray, 0xffffffff); | 16942 ExtArrayLimitsHelper(isolate, v8::kExternalInt16Array, 0xffffffff); |
16943 ExtArrayLimitsHelper(isolate, v8::kExternalUnsignedShortArray, 0x40000000); | 16943 ExtArrayLimitsHelper(isolate, v8::kExternalUint16Array, 0x40000000); |
16944 ExtArrayLimitsHelper(isolate, v8::kExternalUnsignedShortArray, 0xffffffff); | 16944 ExtArrayLimitsHelper(isolate, v8::kExternalUint16Array, 0xffffffff); |
16945 ExtArrayLimitsHelper(isolate, v8::kExternalIntArray, 0x40000000); | 16945 ExtArrayLimitsHelper(isolate, v8::kExternalInt32Array, 0x40000000); |
16946 ExtArrayLimitsHelper(isolate, v8::kExternalIntArray, 0xffffffff); | 16946 ExtArrayLimitsHelper(isolate, v8::kExternalInt32Array, 0xffffffff); |
16947 ExtArrayLimitsHelper(isolate, v8::kExternalUnsignedIntArray, 0x40000000); | 16947 ExtArrayLimitsHelper(isolate, v8::kExternalUint32Array, 0x40000000); |
16948 ExtArrayLimitsHelper(isolate, v8::kExternalUnsignedIntArray, 0xffffffff); | 16948 ExtArrayLimitsHelper(isolate, v8::kExternalUint32Array, 0xffffffff); |
16949 ExtArrayLimitsHelper(isolate, v8::kExternalFloatArray, 0x40000000); | 16949 ExtArrayLimitsHelper(isolate, v8::kExternalFloat32Array, 0x40000000); |
16950 ExtArrayLimitsHelper(isolate, v8::kExternalFloatArray, 0xffffffff); | 16950 ExtArrayLimitsHelper(isolate, v8::kExternalFloat32Array, 0xffffffff); |
16951 ExtArrayLimitsHelper(isolate, v8::kExternalDoubleArray, 0x40000000); | 16951 ExtArrayLimitsHelper(isolate, v8::kExternalFloat64Array, 0x40000000); |
16952 ExtArrayLimitsHelper(isolate, v8::kExternalDoubleArray, 0xffffffff); | 16952 ExtArrayLimitsHelper(isolate, v8::kExternalFloat64Array, 0xffffffff); |
16953 ExtArrayLimitsHelper(isolate, v8::kExternalPixelArray, 0x40000000); | 16953 ExtArrayLimitsHelper(isolate, v8::kExternalUint8ClampedArray, 0x40000000); |
16954 ExtArrayLimitsHelper(isolate, v8::kExternalPixelArray, 0xffffffff); | 16954 ExtArrayLimitsHelper(isolate, v8::kExternalUint8ClampedArray, 0xffffffff); |
16955 } | 16955 } |
16956 | 16956 |
16957 | 16957 |
16958 template <typename ElementType, typename TypedArray, | 16958 template <typename ElementType, typename TypedArray, |
16959 class ExternalArrayClass> | 16959 class ExternalArrayClass> |
16960 void TypedArrayTestHelper(v8::ExternalArrayType array_type, | 16960 void TypedArrayTestHelper(v8::ExternalArrayType array_type, |
16961 int64_t low, int64_t high) { | 16961 int64_t low, int64_t high) { |
16962 const int kElementCount = 50; | 16962 const int kElementCount = 50; |
16963 | 16963 |
16964 i::ScopedVector<ElementType> backing_store(kElementCount+2); | 16964 i::ScopedVector<ElementType> backing_store(kElementCount+2); |
(...skipping 18 matching lines...) Expand all Loading... |
16983 for (int i = 0; i < kElementCount; i++) { | 16983 for (int i = 0; i < kElementCount; i++) { |
16984 data[i] = static_cast<ElementType>(i); | 16984 data[i] = static_cast<ElementType>(i); |
16985 } | 16985 } |
16986 | 16986 |
16987 ObjectWithExternalArrayTestHelper<ExternalArrayClass, ElementType>( | 16987 ObjectWithExternalArrayTestHelper<ExternalArrayClass, ElementType>( |
16988 env.local(), ta, kElementCount, array_type, low, high); | 16988 env.local(), ta, kElementCount, array_type, low, high); |
16989 } | 16989 } |
16990 | 16990 |
16991 | 16991 |
16992 THREADED_TEST(Uint8Array) { | 16992 THREADED_TEST(Uint8Array) { |
16993 TypedArrayTestHelper<uint8_t, v8::Uint8Array, i::ExternalUnsignedByteArray>( | 16993 TypedArrayTestHelper<uint8_t, v8::Uint8Array, i::ExternalUint8Array>( |
16994 v8::kExternalUnsignedByteArray, 0, 0xFF); | 16994 v8::kExternalUint8Array, 0, 0xFF); |
16995 } | 16995 } |
16996 | 16996 |
16997 | 16997 |
16998 THREADED_TEST(Int8Array) { | 16998 THREADED_TEST(Int8Array) { |
16999 TypedArrayTestHelper<int8_t, v8::Int8Array, i::ExternalByteArray>( | 16999 TypedArrayTestHelper<int8_t, v8::Int8Array, i::ExternalInt8Array>( |
17000 v8::kExternalByteArray, -0x80, 0x7F); | 17000 v8::kExternalInt8Array, -0x80, 0x7F); |
17001 } | 17001 } |
17002 | 17002 |
17003 | 17003 |
17004 THREADED_TEST(Uint16Array) { | 17004 THREADED_TEST(Uint16Array) { |
17005 TypedArrayTestHelper<uint16_t, | 17005 TypedArrayTestHelper<uint16_t, |
17006 v8::Uint16Array, | 17006 v8::Uint16Array, |
17007 i::ExternalUnsignedShortArray>( | 17007 i::ExternalUint16Array>( |
17008 v8::kExternalUnsignedShortArray, 0, 0xFFFF); | 17008 v8::kExternalUint16Array, 0, 0xFFFF); |
17009 } | 17009 } |
17010 | 17010 |
17011 | 17011 |
17012 THREADED_TEST(Int16Array) { | 17012 THREADED_TEST(Int16Array) { |
17013 TypedArrayTestHelper<int16_t, v8::Int16Array, i::ExternalShortArray>( | 17013 TypedArrayTestHelper<int16_t, v8::Int16Array, i::ExternalInt16Array>( |
17014 v8::kExternalShortArray, -0x8000, 0x7FFF); | 17014 v8::kExternalInt16Array, -0x8000, 0x7FFF); |
17015 } | 17015 } |
17016 | 17016 |
17017 | 17017 |
17018 THREADED_TEST(Uint32Array) { | 17018 THREADED_TEST(Uint32Array) { |
17019 TypedArrayTestHelper<uint32_t, v8::Uint32Array, i::ExternalUnsignedIntArray>( | 17019 TypedArrayTestHelper<uint32_t, v8::Uint32Array, i::ExternalUint32Array>( |
17020 v8::kExternalUnsignedIntArray, 0, UINT_MAX); | 17020 v8::kExternalUint32Array, 0, UINT_MAX); |
17021 } | 17021 } |
17022 | 17022 |
17023 | 17023 |
17024 THREADED_TEST(Int32Array) { | 17024 THREADED_TEST(Int32Array) { |
17025 TypedArrayTestHelper<int32_t, v8::Int32Array, i::ExternalIntArray>( | 17025 TypedArrayTestHelper<int32_t, v8::Int32Array, i::ExternalInt32Array>( |
17026 v8::kExternalIntArray, INT_MIN, INT_MAX); | 17026 v8::kExternalInt32Array, INT_MIN, INT_MAX); |
17027 } | 17027 } |
17028 | 17028 |
17029 | 17029 |
17030 THREADED_TEST(Float32Array) { | 17030 THREADED_TEST(Float32Array) { |
17031 TypedArrayTestHelper<float, v8::Float32Array, i::ExternalFloatArray>( | 17031 TypedArrayTestHelper<float, v8::Float32Array, i::ExternalFloat32Array>( |
17032 v8::kExternalFloatArray, -500, 500); | 17032 v8::kExternalFloat32Array, -500, 500); |
17033 } | 17033 } |
17034 | 17034 |
17035 | 17035 |
17036 THREADED_TEST(Float64Array) { | 17036 THREADED_TEST(Float64Array) { |
17037 TypedArrayTestHelper<double, v8::Float64Array, i::ExternalDoubleArray>( | 17037 TypedArrayTestHelper<double, v8::Float64Array, i::ExternalFloat64Array>( |
17038 v8::kExternalDoubleArray, -500, 500); | 17038 v8::kExternalFloat64Array, -500, 500); |
17039 } | 17039 } |
17040 | 17040 |
17041 | 17041 |
17042 THREADED_TEST(Uint8ClampedArray) { | 17042 THREADED_TEST(Uint8ClampedArray) { |
17043 TypedArrayTestHelper<uint8_t, v8::Uint8ClampedArray, i::ExternalPixelArray>( | 17043 TypedArrayTestHelper<uint8_t, |
17044 v8::kExternalPixelArray, 0, 0xFF); | 17044 v8::Uint8ClampedArray, i::ExternalUint8ClampedArray>( |
| 17045 v8::kExternalUint8ClampedArray, 0, 0xFF); |
17045 } | 17046 } |
17046 | 17047 |
17047 | 17048 |
17048 THREADED_TEST(DataView) { | 17049 THREADED_TEST(DataView) { |
17049 const int kSize = 50; | 17050 const int kSize = 50; |
17050 | 17051 |
17051 i::ScopedVector<uint8_t> backing_store(kSize+2); | 17052 i::ScopedVector<uint8_t> backing_store(kSize+2); |
17052 | 17053 |
17053 LocalContext env; | 17054 LocalContext env; |
17054 v8::Isolate* isolate = env->GetIsolate(); | 17055 v8::Isolate* isolate = env->GetIsolate(); |
(...skipping 4777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21832 context->Global()->Set(v8_str("P"), templ->NewInstance()); | 21833 context->Global()->Set(v8_str("P"), templ->NewInstance()); |
21833 CompileRun( | 21834 CompileRun( |
21834 "function C1() {" | 21835 "function C1() {" |
21835 " this.x = 23;" | 21836 " this.x = 23;" |
21836 "};" | 21837 "};" |
21837 "C1.prototype = P;" | 21838 "C1.prototype = P;" |
21838 "for (var i = 0; i < 4; i++ ) {" | 21839 "for (var i = 0; i < 4; i++ ) {" |
21839 " new C1();" | 21840 " new C1();" |
21840 "}"); | 21841 "}"); |
21841 } | 21842 } |
OLD | NEW |