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

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

Issue 137403009: Adding a type vector to replace type cells. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Seperate file for feedback slot allocation. Created 6 years, 11 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 | Annotate | Revision Log
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 2806 matching lines...) Expand 10 before | Expand all | Expand 10 after
2817 // Check size. 2817 // Check size.
2818 DescriptorArray* descriptors = internal_obj->map()->instance_descriptors(); 2818 DescriptorArray* descriptors = internal_obj->map()->instance_descriptors();
2819 ObjectHashTable* hashtable = ObjectHashTable::cast( 2819 ObjectHashTable* hashtable = ObjectHashTable::cast(
2820 internal_obj->RawFastPropertyAt(descriptors->GetFieldIndex(0))); 2820 internal_obj->RawFastPropertyAt(descriptors->GetFieldIndex(0)));
2821 // HashTable header (5) and 4 initial entries (8). 2821 // HashTable header (5) and 4 initial entries (8).
2822 CHECK_LE(hashtable->SizeFor(hashtable->length()), 13 * kPointerSize); 2822 CHECK_LE(hashtable->SizeFor(hashtable->length()), 13 * kPointerSize);
2823 } 2823 }
2824 } 2824 }
2825 2825
2826 2826
2827 TEST(IncrementalMarkingClearsTypeFeedbackCells) { 2827 TEST(IncrementalMarkingClearsTypeFeedbackInfo) {
2828 if (i::FLAG_always_opt) return; 2828 if (i::FLAG_always_opt) return;
2829 CcTest::InitializeVM(); 2829 CcTest::InitializeVM();
2830 v8::HandleScope scope(CcTest::isolate()); 2830 v8::HandleScope scope(CcTest::isolate());
2831 v8::Local<v8::Value> fun1, fun2; 2831 v8::Local<v8::Value> fun1, fun2;
2832 2832
2833 { 2833 {
2834 LocalContext env; 2834 LocalContext env;
2835 CompileRun("function fun() {};"); 2835 CompileRun("function fun() {};");
2836 fun1 = env->Global()->Get(v8_str("fun")); 2836 fun1 = env->Global()->Get(v8_str("fun"));
2837 } 2837 }
2838 2838
2839 { 2839 {
2840 LocalContext env; 2840 LocalContext env;
2841 CompileRun("function fun() {};"); 2841 CompileRun("function fun() {};");
2842 fun2 = env->Global()->Get(v8_str("fun")); 2842 fun2 = env->Global()->Get(v8_str("fun"));
2843 } 2843 }
2844 2844
2845 // Prepare function f that contains type feedback for closures 2845 // Prepare function f that contains type feedback for closures
2846 // originating from two different native contexts. 2846 // originating from two different native contexts.
2847 CcTest::global()->Set(v8_str("fun1"), fun1); 2847 CcTest::global()->Set(v8_str("fun1"), fun1);
2848 CcTest::global()->Set(v8_str("fun2"), fun2); 2848 CcTest::global()->Set(v8_str("fun2"), fun2);
2849 CompileRun("function f(a, b) { a(); b(); } f(fun1, fun2);"); 2849 CompileRun("function f(a, b) { a(); b(); } f(fun1, fun2);");
2850 // TODO(mvstanton): fix this test.
danno 2014/01/28 08:27:17 Yes, please do :-)
mvstanton 2014/01/30 15:13:41 Done.
2851 /*
2850 Handle<JSFunction> f = 2852 Handle<JSFunction> f =
2851 v8::Utils::OpenHandle( 2853 v8::Utils::OpenHandle(
2852 *v8::Handle<v8::Function>::Cast( 2854 *v8::Handle<v8::Function>::Cast(
2853 CcTest::global()->Get(v8_str("f")))); 2855 CcTest::global()->Get(v8_str("f"))));
2854 Handle<TypeFeedbackCells> cells(TypeFeedbackInfo::cast( 2856 Handle<TypeFeedbackCells> cells(TypeFeedbackInfo::cast(
2855 f->shared()->code()->type_feedback_info())->type_feedback_cells()); 2857 f->shared()->code()->type_feedback_info())->type_feedback_cells());
2856 2858
2857 CHECK_EQ(2, cells->CellCount()); 2859 CHECK_EQ(2, cells->CellCount());
2858 CHECK(cells->GetCell(0)->value()->IsJSFunction()); 2860 CHECK(cells->GetCell(0)->value()->IsJSFunction());
2859 CHECK(cells->GetCell(1)->value()->IsJSFunction()); 2861 CHECK(cells->GetCell(1)->value()->IsJSFunction());
2860 2862
2861 SimulateIncrementalMarking(); 2863 SimulateIncrementalMarking();
2862 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); 2864 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags);
2863 2865
2864 CHECK_EQ(2, cells->CellCount()); 2866 CHECK_EQ(2, cells->CellCount());
2865 CHECK(cells->GetCell(0)->value()->IsTheHole()); 2867 CHECK(cells->GetCell(0)->value()->IsTheHole());
2866 CHECK(cells->GetCell(1)->value()->IsTheHole()); 2868 CHECK(cells->GetCell(1)->value()->IsTheHole());
2869 */
2867 } 2870 }
2868 2871
2869 2872
2870 static Code* FindFirstIC(Code* code, Code::Kind kind) { 2873 static Code* FindFirstIC(Code* code, Code::Kind kind) {
2871 int mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET) | 2874 int mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET) |
2872 RelocInfo::ModeMask(RelocInfo::CONSTRUCT_CALL) | 2875 RelocInfo::ModeMask(RelocInfo::CONSTRUCT_CALL) |
2873 RelocInfo::ModeMask(RelocInfo::CODE_TARGET_WITH_ID); 2876 RelocInfo::ModeMask(RelocInfo::CODE_TARGET_WITH_ID);
2874 for (RelocIterator it(code, mask); !it.done(); it.next()) { 2877 for (RelocIterator it(code, mask); !it.done(); it.next()) {
2875 RelocInfo* info = it.rinfo(); 2878 RelocInfo* info = it.rinfo();
2876 Code* target = Code::GetCodeFromTargetAddress(info->target_address()); 2879 Code* target = Code::GetCodeFromTargetAddress(info->target_address());
(...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after
3740 code = scope.CloseAndEscape(Handle<Code>(bar->code())); 3743 code = scope.CloseAndEscape(Handle<Code>(bar->code()));
3741 } 3744 }
3742 3745
3743 // Now make sure that a gc should get rid of the function 3746 // Now make sure that a gc should get rid of the function
3744 for (int i = 0; i < 4; i++) { 3747 for (int i = 0; i < 4; i++) {
3745 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 3748 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3746 } 3749 }
3747 3750
3748 ASSERT(code->marked_for_deoptimization()); 3751 ASSERT(code->marked_for_deoptimization());
3749 } 3752 }
OLDNEW
« src/type-info.cc ('K') | « src/typing.cc ('k') | tools/gyp/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698