Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Side by Side Diff: test/cctest/test-api.cc

Issue 2185963002: [api] Add v8::Object::SetAlignedPointerInInternalFields (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: adding fast paths Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« include/v8.h ('K') | « src/api.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 2665 matching lines...) Expand 10 before | Expand all | Expand 10 after
2676 CheckAlignedPointerInInternalField(obj, stack_allocated); 2676 CheckAlignedPointerInInternalField(obj, stack_allocated);
2677 2677
2678 void* huge = reinterpret_cast<void*>(~static_cast<uintptr_t>(1)); 2678 void* huge = reinterpret_cast<void*>(~static_cast<uintptr_t>(1));
2679 CheckAlignedPointerInInternalField(obj, huge); 2679 CheckAlignedPointerInInternalField(obj, huge);
2680 2680
2681 v8::Global<v8::Object> persistent(isolate, obj); 2681 v8::Global<v8::Object> persistent(isolate, obj);
2682 CHECK_EQ(1, Object::InternalFieldCount(persistent)); 2682 CHECK_EQ(1, Object::InternalFieldCount(persistent));
2683 CHECK_EQ(huge, Object::GetAlignedPointerFromInternalField(persistent, 0)); 2683 CHECK_EQ(huge, Object::GetAlignedPointerFromInternalField(persistent, 0));
2684 } 2684 }
2685 2685
2686 THREADED_TEST(SetAlignedPointerInInternalFields) {
2687 LocalContext env;
2688 v8::Isolate* isolate = env->GetIsolate();
2689 v8::HandleScope scope(isolate);
2690
2691 Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate);
2692 Local<v8::ObjectTemplate> instance_templ = templ->InstanceTemplate();
2693 instance_templ->SetInternalFieldCount(2);
2694 Local<v8::Object> obj = templ->GetFunction(env.local())
2695 .ToLocalChecked()
2696 ->NewInstance(env.local())
2697 .ToLocalChecked();
2698 CHECK_EQ(2, obj->InternalFieldCount());
2699
2700 int* heap_allocated_1 = new int[100];
2701 int* heap_allocated_2 = new int[100];
2702 int indices[] = {0, 1};
2703 void* values[] = {heap_allocated_1, heap_allocated_2};
2704
2705 obj->SetAlignedPointerInInternalFields(2, indices, values);
2706 CcTest::heap()->CollectAllGarbage();
2707 CHECK_EQ(heap_allocated_1, obj->GetAlignedPointerFromInternalField(0));
2708 CHECK_EQ(heap_allocated_2, obj->GetAlignedPointerFromInternalField(1));
2709
2710 indices[0] = 1;
2711 indices[1] = 0;
2712 obj->SetAlignedPointerInInternalFields(2, indices, values);
2713 CcTest::heap()->CollectAllGarbage();
2714 CHECK_EQ(heap_allocated_2, obj->GetAlignedPointerFromInternalField(0));
2715 CHECK_EQ(heap_allocated_1, obj->GetAlignedPointerFromInternalField(1));
2716
2717 delete[] heap_allocated_1;
2718 delete[] heap_allocated_2;
2719 }
2686 2720
2687 static void CheckAlignedPointerInEmbedderData(LocalContext* env, int index, 2721 static void CheckAlignedPointerInEmbedderData(LocalContext* env, int index,
2688 void* value) { 2722 void* value) {
2689 CHECK_EQ(0, static_cast<int>(reinterpret_cast<uintptr_t>(value) & 0x1)); 2723 CHECK_EQ(0, static_cast<int>(reinterpret_cast<uintptr_t>(value) & 0x1));
2690 (*env)->SetAlignedPointerInEmbedderData(index, value); 2724 (*env)->SetAlignedPointerInEmbedderData(index, value);
2691 CcTest::heap()->CollectAllGarbage(); 2725 CcTest::heap()->CollectAllGarbage();
2692 CHECK_EQ(value, (*env)->GetAlignedPointerFromEmbedderData(index)); 2726 CHECK_EQ(value, (*env)->GetAlignedPointerFromEmbedderData(index));
2693 } 2727 }
2694 2728
2695 2729
(...skipping 21 matching lines...) Expand all
2717 // Test growing of the embedder data's backing store. 2751 // Test growing of the embedder data's backing store.
2718 for (int i = 0; i < 100; i++) { 2752 for (int i = 0; i < 100; i++) {
2719 env->SetAlignedPointerInEmbedderData(i, AlignedTestPointer(i)); 2753 env->SetAlignedPointerInEmbedderData(i, AlignedTestPointer(i));
2720 } 2754 }
2721 CcTest::heap()->CollectAllGarbage(); 2755 CcTest::heap()->CollectAllGarbage();
2722 for (int i = 0; i < 100; i++) { 2756 for (int i = 0; i < 100; i++) {
2723 CHECK_EQ(AlignedTestPointer(i), env->GetAlignedPointerFromEmbedderData(i)); 2757 CHECK_EQ(AlignedTestPointer(i), env->GetAlignedPointerFromEmbedderData(i));
2724 } 2758 }
2725 } 2759 }
2726 2760
2727
2728 static void CheckEmbedderData(LocalContext* env, int index, 2761 static void CheckEmbedderData(LocalContext* env, int index,
2729 v8::Local<Value> data) { 2762 v8::Local<Value> data) {
2730 (*env)->SetEmbedderData(index, data); 2763 (*env)->SetEmbedderData(index, data);
2731 CHECK((*env)->GetEmbedderData(index)->StrictEquals(data)); 2764 CHECK((*env)->GetEmbedderData(index)->StrictEquals(data));
2732 } 2765 }
2733 2766
2734 2767
2735 THREADED_TEST(EmbedderData) { 2768 THREADED_TEST(EmbedderData) {
2736 LocalContext env; 2769 LocalContext env;
2737 v8::Isolate* isolate = env->GetIsolate(); 2770 v8::Isolate* isolate = env->GetIsolate();
(...skipping 22715 matching lines...) Expand 10 before | Expand all | Expand 10 after
25453 25486
25454 // Put the function into context1 and call it. Since the access check 25487 // Put the function into context1 and call it. Since the access check
25455 // callback always returns true, the call succeeds even though the tokens 25488 // callback always returns true, the call succeeds even though the tokens
25456 // are different. 25489 // are different.
25457 context1->Enter(); 25490 context1->Enter();
25458 context1->Global()->Set(context1, v8_str("fun"), fun).FromJust(); 25491 context1->Global()->Set(context1, v8_str("fun"), fun).FromJust();
25459 v8::Local<v8::Value> x_value = CompileRun("fun('x')"); 25492 v8::Local<v8::Value> x_value = CompileRun("fun('x')");
25460 CHECK_EQ(42, x_value->Int32Value(context1).FromJust()); 25493 CHECK_EQ(42, x_value->Int32Value(context1).FromJust());
25461 context1->Exit(); 25494 context1->Exit();
25462 } 25495 }
OLDNEW
« include/v8.h ('K') | « src/api.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698