| OLD | NEW | 
|---|
| 1 // Copyright 2007-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2009 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 9619 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 9630   CHECK_EQ(255, result->Int32Value()); | 9630   CHECK_EQ(255, result->Int32Value()); | 
| 9631   result = CompileRun("var i = 0;" | 9631   result = CompileRun("var i = 0;" | 
| 9632                       "for (var j = 0; j < 8; j++) { i = pixels[256]; }" | 9632                       "for (var j = 0; j < 8; j++) { i = pixels[256]; }" | 
| 9633                       "i"); | 9633                       "i"); | 
| 9634   CHECK_EQ(255, result->Int32Value()); | 9634   CHECK_EQ(255, result->Int32Value()); | 
| 9635 | 9635 | 
| 9636   free(pixel_data); | 9636   free(pixel_data); | 
| 9637 } | 9637 } | 
| 9638 | 9638 | 
| 9639 | 9639 | 
|  | 9640 THREADED_TEST(PixelArrayInfo) { | 
|  | 9641   v8::HandleScope scope; | 
|  | 9642   LocalContext context; | 
|  | 9643   for (int size = 0; size < 100; size += 10) { | 
|  | 9644     uint8_t* pixel_data = reinterpret_cast<uint8_t*>(malloc(size)); | 
|  | 9645     v8::Handle<v8::Object> obj = v8::Object::New(); | 
|  | 9646     obj->SetIndexedPropertiesToPixelData(pixel_data, size); | 
|  | 9647     CHECK(obj->HasIndexedPropertiesInPixelData()); | 
|  | 9648     CHECK_EQ(pixel_data, obj->GetIndexedPropertiesPixelData()); | 
|  | 9649     CHECK_EQ(size, obj->GetIndexedPropertiesPixelDataLength()); | 
|  | 9650     free(pixel_data); | 
|  | 9651   } | 
|  | 9652 } | 
|  | 9653 | 
|  | 9654 | 
|  | 9655 static int ExternalArrayElementSize(v8::ExternalArrayType array_type) { | 
|  | 9656   switch (array_type) { | 
|  | 9657     case v8::kExternalByteArray: | 
|  | 9658     case v8::kExternalUnsignedByteArray: | 
|  | 9659       return 1; | 
|  | 9660       break; | 
|  | 9661     case v8::kExternalShortArray: | 
|  | 9662     case v8::kExternalUnsignedShortArray: | 
|  | 9663       return 2; | 
|  | 9664       break; | 
|  | 9665     case v8::kExternalIntArray: | 
|  | 9666     case v8::kExternalUnsignedIntArray: | 
|  | 9667     case v8::kExternalFloatArray: | 
|  | 9668       return 4; | 
|  | 9669       break; | 
|  | 9670     default: | 
|  | 9671       UNREACHABLE(); | 
|  | 9672       return -1; | 
|  | 9673   } | 
|  | 9674 } | 
|  | 9675 | 
|  | 9676 | 
| 9640 template <class ExternalArrayClass, class ElementType> | 9677 template <class ExternalArrayClass, class ElementType> | 
| 9641 static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, | 9678 static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, | 
| 9642                                     int64_t low, | 9679                                     int64_t low, | 
| 9643                                     int64_t high) { | 9680                                     int64_t high) { | 
| 9644   v8::HandleScope scope; | 9681   v8::HandleScope scope; | 
| 9645   LocalContext context; | 9682   LocalContext context; | 
| 9646   const int kElementCount = 40; | 9683   const int kElementCount = 40; | 
| 9647   int element_size = 0; | 9684   int element_size = ExternalArrayElementSize(array_type); | 
| 9648   switch (array_type) { |  | 
| 9649     case v8::kExternalByteArray: |  | 
| 9650     case v8::kExternalUnsignedByteArray: |  | 
| 9651       element_size = 1; |  | 
| 9652       break; |  | 
| 9653     case v8::kExternalShortArray: |  | 
| 9654     case v8::kExternalUnsignedShortArray: |  | 
| 9655       element_size = 2; |  | 
| 9656       break; |  | 
| 9657     case v8::kExternalIntArray: |  | 
| 9658     case v8::kExternalUnsignedIntArray: |  | 
| 9659     case v8::kExternalFloatArray: |  | 
| 9660       element_size = 4; |  | 
| 9661       break; |  | 
| 9662     default: |  | 
| 9663       UNREACHABLE(); |  | 
| 9664       break; |  | 
| 9665   } |  | 
| 9666   ElementType* array_data = | 9685   ElementType* array_data = | 
| 9667       static_cast<ElementType*>(malloc(kElementCount * element_size)); | 9686       static_cast<ElementType*>(malloc(kElementCount * element_size)); | 
| 9668   i::Handle<ExternalArrayClass> array = | 9687   i::Handle<ExternalArrayClass> array = | 
| 9669       i::Handle<ExternalArrayClass>::cast( | 9688       i::Handle<ExternalArrayClass>::cast( | 
| 9670           i::Factory::NewExternalArray(kElementCount, array_type, array_data)); | 9689           i::Factory::NewExternalArray(kElementCount, array_type, array_data)); | 
| 9671   i::Heap::CollectAllGarbage(false);  // Force GC to trigger verification. | 9690   i::Heap::CollectAllGarbage(false);  // Force GC to trigger verification. | 
| 9672   for (int i = 0; i < kElementCount; i++) { | 9691   for (int i = 0; i < kElementCount; i++) { | 
| 9673     array->set(i, static_cast<ElementType>(i)); | 9692     array->set(i, static_cast<ElementType>(i)); | 
| 9674   } | 9693   } | 
| 9675   i::Heap::CollectAllGarbage(false);  // Force GC to trigger verification. | 9694   i::Heap::CollectAllGarbage(false);  // Force GC to trigger verification. | 
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 10036   TestExternalByteArray(); | 10055   TestExternalByteArray(); | 
| 10037   TestExternalUnsignedByteArray(); | 10056   TestExternalUnsignedByteArray(); | 
| 10038   TestExternalShortArray(); | 10057   TestExternalShortArray(); | 
| 10039   TestExternalUnsignedShortArray(); | 10058   TestExternalUnsignedShortArray(); | 
| 10040   TestExternalIntArray(); | 10059   TestExternalIntArray(); | 
| 10041   TestExternalUnsignedIntArray(); | 10060   TestExternalUnsignedIntArray(); | 
| 10042   TestExternalFloatArray(); | 10061   TestExternalFloatArray(); | 
| 10043 } | 10062 } | 
| 10044 | 10063 | 
| 10045 | 10064 | 
|  | 10065 void ExternalArrayInfoTestHelper(v8::ExternalArrayType array_type) { | 
|  | 10066   v8::HandleScope scope; | 
|  | 10067   LocalContext context; | 
|  | 10068   for (int size = 0; size < 100; size += 10) { | 
|  | 10069     int element_size = ExternalArrayElementSize(array_type); | 
|  | 10070     void* external_data = malloc(size * element_size); | 
|  | 10071     v8::Handle<v8::Object> obj = v8::Object::New(); | 
|  | 10072     obj->SetIndexedPropertiesToExternalArrayData( | 
|  | 10073         external_data, array_type, size); | 
|  | 10074     CHECK(obj->HasIndexedPropertiesInExternalArrayData()); | 
|  | 10075     CHECK_EQ(external_data, obj->GetIndexedPropertiesExternalArrayData()); | 
|  | 10076     CHECK_EQ(array_type, obj->GetIndexedPropertiesExternalArrayDataType()); | 
|  | 10077     CHECK_EQ(size, obj->GetIndexedPropertiesExternalArrayDataLength()); | 
|  | 10078     free(external_data); | 
|  | 10079   } | 
|  | 10080 } | 
|  | 10081 | 
|  | 10082 | 
|  | 10083 THREADED_TEST(ExternalArrayInfo) { | 
|  | 10084   ExternalArrayInfoTestHelper(v8::kExternalByteArray); | 
|  | 10085   ExternalArrayInfoTestHelper(v8::kExternalUnsignedByteArray); | 
|  | 10086   ExternalArrayInfoTestHelper(v8::kExternalShortArray); | 
|  | 10087   ExternalArrayInfoTestHelper(v8::kExternalUnsignedShortArray); | 
|  | 10088   ExternalArrayInfoTestHelper(v8::kExternalIntArray); | 
|  | 10089   ExternalArrayInfoTestHelper(v8::kExternalUnsignedIntArray); | 
|  | 10090   ExternalArrayInfoTestHelper(v8::kExternalFloatArray); | 
|  | 10091 } | 
|  | 10092 | 
|  | 10093 | 
| 10046 THREADED_TEST(ScriptContextDependence) { | 10094 THREADED_TEST(ScriptContextDependence) { | 
| 10047   v8::HandleScope scope; | 10095   v8::HandleScope scope; | 
| 10048   LocalContext c1; | 10096   LocalContext c1; | 
| 10049   const char *source = "foo"; | 10097   const char *source = "foo"; | 
| 10050   v8::Handle<v8::Script> dep = v8::Script::Compile(v8::String::New(source)); | 10098   v8::Handle<v8::Script> dep = v8::Script::Compile(v8::String::New(source)); | 
| 10051   v8::Handle<v8::Script> indep = v8::Script::New(v8::String::New(source)); | 10099   v8::Handle<v8::Script> indep = v8::Script::New(v8::String::New(source)); | 
| 10052   c1->Global()->Set(v8::String::New("foo"), v8::Integer::New(100)); | 10100   c1->Global()->Set(v8::String::New("foo"), v8::Integer::New(100)); | 
| 10053   CHECK_EQ(dep->Run()->Int32Value(), 100); | 10101   CHECK_EQ(dep->Run()->Int32Value(), 100); | 
| 10054   CHECK_EQ(indep->Run()->Int32Value(), 100); | 10102   CHECK_EQ(indep->Run()->Int32Value(), 100); | 
| 10055   LocalContext c2; | 10103   LocalContext c2; | 
| (...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 10868   const char* code = | 10916   const char* code = | 
| 10869       "(function() {" | 10917       "(function() {" | 
| 10870       "  for (var i = 0; i < 2*16; i++) {" | 10918       "  for (var i = 0; i < 2*16; i++) {" | 
| 10871       "    %_GetFromCache(0, 'a' + i);" | 10919       "    %_GetFromCache(0, 'a' + i);" | 
| 10872       "  };" | 10920       "  };" | 
| 10873       "  return 'PASSED';" | 10921       "  return 'PASSED';" | 
| 10874       "})()"; | 10922       "})()"; | 
| 10875   v8::internal::Heap::ClearJSFunctionResultCaches(); | 10923   v8::internal::Heap::ClearJSFunctionResultCaches(); | 
| 10876   ExpectString(code, "PASSED"); | 10924   ExpectString(code, "PASSED"); | 
| 10877 } | 10925 } | 
| OLD | NEW | 
|---|