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 1314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1325 | 1325 |
1326 // Create a number of global contests which gets linked together. | 1326 // Create a number of global contests which gets linked together. |
1327 for (int i = 0; i < kNumTestContexts; i++) { | 1327 for (int i = 0; i < kNumTestContexts; i++) { |
1328 ctx[i] = v8::Context::New(v8::Isolate::GetCurrent()); | 1328 ctx[i] = v8::Context::New(v8::Isolate::GetCurrent()); |
1329 | 1329 |
1330 // Collect garbage that might have been created by one of the | 1330 // Collect garbage that might have been created by one of the |
1331 // installed extensions. | 1331 // installed extensions. |
1332 isolate->compilation_cache()->Clear(); | 1332 isolate->compilation_cache()->Clear(); |
1333 heap->CollectAllGarbage(Heap::kNoGCFlags); | 1333 heap->CollectAllGarbage(Heap::kNoGCFlags); |
1334 | 1334 |
1335 bool opt = (FLAG_always_opt && i::V8::UseCrankshaft()); | 1335 bool opt = (FLAG_always_opt && isolate->use_crankshaft()); |
1336 | 1336 |
1337 CHECK_EQ(i + 1, CountNativeContexts()); | 1337 CHECK_EQ(i + 1, CountNativeContexts()); |
1338 | 1338 |
1339 ctx[i]->Enter(); | 1339 ctx[i]->Enter(); |
1340 | 1340 |
1341 // Create a handle scope so no function objects get stuch in the outer | 1341 // Create a handle scope so no function objects get stuch in the outer |
1342 // handle scope | 1342 // handle scope |
1343 HandleScope scope(isolate); | 1343 HandleScope scope(isolate); |
1344 const char* source = "function f1() { };" | 1344 const char* source = "function f1() { };" |
1345 "function f2() { };" | 1345 "function f2() { };" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1469 CHECK_EQ(0, CountNativeContexts()); | 1469 CHECK_EQ(0, CountNativeContexts()); |
1470 | 1470 |
1471 // Create an number of contexts and check the length of the weak list both | 1471 // Create an number of contexts and check the length of the weak list both |
1472 // with and without GCs while iterating the list. | 1472 // with and without GCs while iterating the list. |
1473 for (int i = 0; i < kNumTestContexts; i++) { | 1473 for (int i = 0; i < kNumTestContexts; i++) { |
1474 ctx[i] = v8::Context::New(v8::Isolate::GetCurrent()); | 1474 ctx[i] = v8::Context::New(v8::Isolate::GetCurrent()); |
1475 CHECK_EQ(i + 1, CountNativeContexts()); | 1475 CHECK_EQ(i + 1, CountNativeContexts()); |
1476 CHECK_EQ(i + 1, CountNativeContextsWithGC(isolate, i / 2 + 1)); | 1476 CHECK_EQ(i + 1, CountNativeContextsWithGC(isolate, i / 2 + 1)); |
1477 } | 1477 } |
1478 | 1478 |
1479 bool opt = (FLAG_always_opt && i::V8::UseCrankshaft()); | 1479 bool opt = (FLAG_always_opt && isolate->use_crankshaft()); |
1480 | 1480 |
1481 // Compile a number of functions the length of the weak list of optimized | 1481 // Compile a number of functions the length of the weak list of optimized |
1482 // functions both with and without GCs while iterating the list. | 1482 // functions both with and without GCs while iterating the list. |
1483 ctx[0]->Enter(); | 1483 ctx[0]->Enter(); |
1484 const char* source = "function f1() { };" | 1484 const char* source = "function f1() { };" |
1485 "function f2() { };" | 1485 "function f2() { };" |
1486 "function f3() { };" | 1486 "function f3() { };" |
1487 "function f4() { };" | 1487 "function f4() { };" |
1488 "function f5() { };"; | 1488 "function f5() { };"; |
1489 CompileRun(source); | 1489 CompileRun(source); |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1869 } | 1869 } |
1870 | 1870 |
1871 | 1871 |
1872 TEST(InstanceOfStubWriteBarrier) { | 1872 TEST(InstanceOfStubWriteBarrier) { |
1873 i::FLAG_allow_natives_syntax = true; | 1873 i::FLAG_allow_natives_syntax = true; |
1874 #ifdef VERIFY_HEAP | 1874 #ifdef VERIFY_HEAP |
1875 i::FLAG_verify_heap = true; | 1875 i::FLAG_verify_heap = true; |
1876 #endif | 1876 #endif |
1877 | 1877 |
1878 CcTest::InitializeVM(); | 1878 CcTest::InitializeVM(); |
1879 if (!i::V8::UseCrankshaft()) return; | 1879 if (!i::Isolate::Current()->use_crankshaft()) return; |
1880 if (i::FLAG_force_marking_deque_overflows) return; | 1880 if (i::FLAG_force_marking_deque_overflows) return; |
1881 v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); | 1881 v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); |
1882 | 1882 |
1883 { | 1883 { |
1884 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 1884 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
1885 CompileRun( | 1885 CompileRun( |
1886 "function foo () { }" | 1886 "function foo () { }" |
1887 "function mkbar () { return new (new Function(\"\")) (); }" | 1887 "function mkbar () { return new (new Function(\"\")) (); }" |
1888 "function f (x) { return (x instanceof foo); }" | 1888 "function f (x) { return (x instanceof foo); }" |
1889 "function g () { f(mkbar()); }" | 1889 "function g () { f(mkbar()); }" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1986 | 1986 |
1987 | 1987 |
1988 TEST(ResetSharedFunctionInfoCountersDuringIncrementalMarking) { | 1988 TEST(ResetSharedFunctionInfoCountersDuringIncrementalMarking) { |
1989 i::FLAG_stress_compaction = false; | 1989 i::FLAG_stress_compaction = false; |
1990 i::FLAG_allow_natives_syntax = true; | 1990 i::FLAG_allow_natives_syntax = true; |
1991 #ifdef VERIFY_HEAP | 1991 #ifdef VERIFY_HEAP |
1992 i::FLAG_verify_heap = true; | 1992 i::FLAG_verify_heap = true; |
1993 #endif | 1993 #endif |
1994 | 1994 |
1995 CcTest::InitializeVM(); | 1995 CcTest::InitializeVM(); |
1996 if (!i::V8::UseCrankshaft()) return; | 1996 if (!i::Isolate::Current()->use_crankshaft()) return; |
1997 v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); | 1997 v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); |
1998 | 1998 |
1999 { | 1999 { |
2000 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 2000 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
2001 CompileRun( | 2001 CompileRun( |
2002 "function f () {" | 2002 "function f () {" |
2003 " var s = 0;" | 2003 " var s = 0;" |
2004 " for (var i = 0; i < 100; i++) s += i;" | 2004 " for (var i = 0; i < 100; i++) s += i;" |
2005 " return s;" | 2005 " return s;" |
2006 "}" | 2006 "}" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2043 | 2043 |
2044 | 2044 |
2045 TEST(ResetSharedFunctionInfoCountersDuringMarkSweep) { | 2045 TEST(ResetSharedFunctionInfoCountersDuringMarkSweep) { |
2046 i::FLAG_stress_compaction = false; | 2046 i::FLAG_stress_compaction = false; |
2047 i::FLAG_allow_natives_syntax = true; | 2047 i::FLAG_allow_natives_syntax = true; |
2048 #ifdef VERIFY_HEAP | 2048 #ifdef VERIFY_HEAP |
2049 i::FLAG_verify_heap = true; | 2049 i::FLAG_verify_heap = true; |
2050 #endif | 2050 #endif |
2051 | 2051 |
2052 CcTest::InitializeVM(); | 2052 CcTest::InitializeVM(); |
2053 if (!i::V8::UseCrankshaft()) return; | 2053 if (!i::Isolate::Current()->use_crankshaft()) return; |
2054 v8::HandleScope outer_scope(CcTest::isolate()); | 2054 v8::HandleScope outer_scope(CcTest::isolate()); |
2055 | 2055 |
2056 { | 2056 { |
2057 v8::HandleScope scope(CcTest::isolate()); | 2057 v8::HandleScope scope(CcTest::isolate()); |
2058 CompileRun( | 2058 CompileRun( |
2059 "function f () {" | 2059 "function f () {" |
2060 " var s = 0;" | 2060 " var s = 0;" |
2061 " for (var i = 0; i < 100; i++) s += i;" | 2061 " for (var i = 0; i < 100; i++) s += i;" |
2062 " return s;" | 2062 " return s;" |
2063 "}" | 2063 "}" |
(...skipping 18 matching lines...) Expand all Loading... |
2082 CHECK_EQ(HEAP->global_ic_age(), f->shared()->ic_age()); | 2082 CHECK_EQ(HEAP->global_ic_age(), f->shared()->ic_age()); |
2083 CHECK_EQ(0, f->shared()->opt_count()); | 2083 CHECK_EQ(0, f->shared()->opt_count()); |
2084 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); | 2084 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); |
2085 } | 2085 } |
2086 | 2086 |
2087 | 2087 |
2088 // Test that HAllocateObject will always return an object in new-space. | 2088 // Test that HAllocateObject will always return an object in new-space. |
2089 TEST(OptimizedAllocationAlwaysInNewSpace) { | 2089 TEST(OptimizedAllocationAlwaysInNewSpace) { |
2090 i::FLAG_allow_natives_syntax = true; | 2090 i::FLAG_allow_natives_syntax = true; |
2091 CcTest::InitializeVM(); | 2091 CcTest::InitializeVM(); |
2092 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2092 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2093 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2093 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2094 v8::HandleScope scope(CcTest::isolate()); | 2094 v8::HandleScope scope(CcTest::isolate()); |
2095 | 2095 |
2096 SimulateFullSpace(HEAP->new_space()); | 2096 SimulateFullSpace(HEAP->new_space()); |
2097 AlwaysAllocateScope always_allocate; | 2097 AlwaysAllocateScope always_allocate; |
2098 v8::Local<v8::Value> res = CompileRun( | 2098 v8::Local<v8::Value> res = CompileRun( |
2099 "function c(x) {" | 2099 "function c(x) {" |
2100 " this.x = x;" | 2100 " this.x = x;" |
2101 " for (var i = 0; i < 32; i++) {" | 2101 " for (var i = 0; i < 32; i++) {" |
2102 " this['x' + i] = x;" | 2102 " this['x' + i] = x;" |
2103 " }" | 2103 " }" |
2104 "}" | 2104 "}" |
2105 "function f(x) { return new c(x); };" | 2105 "function f(x) { return new c(x); };" |
2106 "f(1); f(2); f(3);" | 2106 "f(1); f(2); f(3);" |
2107 "%OptimizeFunctionOnNextCall(f);" | 2107 "%OptimizeFunctionOnNextCall(f);" |
2108 "f(4);"); | 2108 "f(4);"); |
2109 CHECK_EQ(4, res->ToObject()->GetRealNamedProperty(v8_str("x"))->Int32Value()); | 2109 CHECK_EQ(4, res->ToObject()->GetRealNamedProperty(v8_str("x"))->Int32Value()); |
2110 | 2110 |
2111 Handle<JSObject> o = | 2111 Handle<JSObject> o = |
2112 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); | 2112 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); |
2113 | 2113 |
2114 CHECK(HEAP->InNewSpace(*o)); | 2114 CHECK(HEAP->InNewSpace(*o)); |
2115 } | 2115 } |
2116 | 2116 |
2117 | 2117 |
2118 TEST(OptimizedPretenuringAllocationFolding) { | 2118 TEST(OptimizedPretenuringAllocationFolding) { |
2119 i::FLAG_allow_natives_syntax = true; | 2119 i::FLAG_allow_natives_syntax = true; |
2120 CcTest::InitializeVM(); | 2120 CcTest::InitializeVM(); |
2121 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2121 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2122 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2122 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2123 v8::HandleScope scope(CcTest::isolate()); | 2123 v8::HandleScope scope(CcTest::isolate()); |
2124 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2124 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2125 | 2125 |
2126 v8::Local<v8::Value> res = CompileRun( | 2126 v8::Local<v8::Value> res = CompileRun( |
2127 "function DataObject() {" | 2127 "function DataObject() {" |
2128 " this.a = 1.1;" | 2128 " this.a = 1.1;" |
2129 " this.b = [{}];" | 2129 " this.b = [{}];" |
2130 " this.c = 1.2;" | 2130 " this.c = 1.2;" |
2131 " this.d = [{}];" | 2131 " this.d = [{}];" |
(...skipping 15 matching lines...) Expand all Loading... |
2147 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2))); | 2147 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2))); |
2148 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(3))); | 2148 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(3))); |
2149 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(4))); | 2149 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(4))); |
2150 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(5))); | 2150 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(5))); |
2151 } | 2151 } |
2152 | 2152 |
2153 | 2153 |
2154 TEST(OptimizedPretenuringAllocationFoldingBlocks) { | 2154 TEST(OptimizedPretenuringAllocationFoldingBlocks) { |
2155 i::FLAG_allow_natives_syntax = true; | 2155 i::FLAG_allow_natives_syntax = true; |
2156 CcTest::InitializeVM(); | 2156 CcTest::InitializeVM(); |
2157 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2157 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2158 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2158 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2159 v8::HandleScope scope(CcTest::isolate()); | 2159 v8::HandleScope scope(CcTest::isolate()); |
2160 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2160 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2161 | 2161 |
2162 v8::Local<v8::Value> res = CompileRun( | 2162 v8::Local<v8::Value> res = CompileRun( |
2163 "function DataObject() {" | 2163 "function DataObject() {" |
2164 " this.a = [{}];" | 2164 " this.a = [{}];" |
2165 " this.b = [{}];" | 2165 " this.b = [{}];" |
2166 " this.c = 1.1;" | 2166 " this.c = 1.1;" |
2167 " this.d = 1.2;" | 2167 " this.d = 1.2;" |
(...skipping 15 matching lines...) Expand all Loading... |
2183 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2))); | 2183 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2))); |
2184 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(3))); | 2184 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(3))); |
2185 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(4))); | 2185 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(4))); |
2186 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(5))); | 2186 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(5))); |
2187 } | 2187 } |
2188 | 2188 |
2189 | 2189 |
2190 TEST(OptimizedPretenuringObjectArrayLiterals) { | 2190 TEST(OptimizedPretenuringObjectArrayLiterals) { |
2191 i::FLAG_allow_natives_syntax = true; | 2191 i::FLAG_allow_natives_syntax = true; |
2192 CcTest::InitializeVM(); | 2192 CcTest::InitializeVM(); |
2193 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2193 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2194 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2194 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2195 v8::HandleScope scope(CcTest::isolate()); | 2195 v8::HandleScope scope(CcTest::isolate()); |
2196 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2196 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2197 | 2197 |
2198 v8::Local<v8::Value> res = CompileRun( | 2198 v8::Local<v8::Value> res = CompileRun( |
2199 "function f() {" | 2199 "function f() {" |
2200 " var numbers = [{}, {}, {}];" | 2200 " var numbers = [{}, {}, {}];" |
2201 " return numbers;" | 2201 " return numbers;" |
2202 "};" | 2202 "};" |
2203 "f(); f(); f();" | 2203 "f(); f(); f();" |
2204 "%OptimizeFunctionOnNextCall(f);" | 2204 "%OptimizeFunctionOnNextCall(f);" |
2205 "f();"); | 2205 "f();"); |
2206 | 2206 |
2207 Handle<JSObject> o = | 2207 Handle<JSObject> o = |
2208 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); | 2208 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); |
2209 | 2209 |
2210 CHECK(HEAP->InOldPointerSpace(o->elements())); | 2210 CHECK(HEAP->InOldPointerSpace(o->elements())); |
2211 CHECK(HEAP->InOldPointerSpace(*o)); | 2211 CHECK(HEAP->InOldPointerSpace(*o)); |
2212 } | 2212 } |
2213 | 2213 |
2214 | 2214 |
2215 TEST(OptimizedPretenuringMixedInObjectProperties) { | 2215 TEST(OptimizedPretenuringMixedInObjectProperties) { |
2216 i::FLAG_allow_natives_syntax = true; | 2216 i::FLAG_allow_natives_syntax = true; |
2217 CcTest::InitializeVM(); | 2217 CcTest::InitializeVM(); |
2218 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2218 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2219 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2219 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2220 v8::HandleScope scope(CcTest::isolate()); | 2220 v8::HandleScope scope(CcTest::isolate()); |
2221 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2221 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2222 | 2222 |
2223 v8::Local<v8::Value> res = CompileRun( | 2223 v8::Local<v8::Value> res = CompileRun( |
2224 "function f() {" | 2224 "function f() {" |
2225 " var numbers = {a: {c: 2.2, d: {}}, b: 1.1};" | 2225 " var numbers = {a: {c: 2.2, d: {}}, b: 1.1};" |
2226 " return numbers;" | 2226 " return numbers;" |
2227 "};" | 2227 "};" |
2228 "f(); f(); f();" | 2228 "f(); f(); f();" |
(...skipping 10 matching lines...) Expand all Loading... |
2239 JSObject* inner_object = reinterpret_cast<JSObject*>(o->RawFastPropertyAt(0)); | 2239 JSObject* inner_object = reinterpret_cast<JSObject*>(o->RawFastPropertyAt(0)); |
2240 CHECK(HEAP->InOldPointerSpace(inner_object)); | 2240 CHECK(HEAP->InOldPointerSpace(inner_object)); |
2241 CHECK(HEAP->InOldDataSpace(inner_object->RawFastPropertyAt(0))); | 2241 CHECK(HEAP->InOldDataSpace(inner_object->RawFastPropertyAt(0))); |
2242 CHECK(HEAP->InOldPointerSpace(inner_object->RawFastPropertyAt(1))); | 2242 CHECK(HEAP->InOldPointerSpace(inner_object->RawFastPropertyAt(1))); |
2243 } | 2243 } |
2244 | 2244 |
2245 | 2245 |
2246 TEST(OptimizedPretenuringDoubleArrayProperties) { | 2246 TEST(OptimizedPretenuringDoubleArrayProperties) { |
2247 i::FLAG_allow_natives_syntax = true; | 2247 i::FLAG_allow_natives_syntax = true; |
2248 CcTest::InitializeVM(); | 2248 CcTest::InitializeVM(); |
2249 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2249 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2250 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2250 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2251 v8::HandleScope scope(CcTest::isolate()); | 2251 v8::HandleScope scope(CcTest::isolate()); |
2252 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2252 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2253 | 2253 |
2254 v8::Local<v8::Value> res = CompileRun( | 2254 v8::Local<v8::Value> res = CompileRun( |
2255 "function f() {" | 2255 "function f() {" |
2256 " var numbers = {a: 1.1, b: 2.2};" | 2256 " var numbers = {a: 1.1, b: 2.2};" |
2257 " return numbers;" | 2257 " return numbers;" |
2258 "};" | 2258 "};" |
2259 "f(); f(); f();" | 2259 "f(); f(); f();" |
2260 "%OptimizeFunctionOnNextCall(f);" | 2260 "%OptimizeFunctionOnNextCall(f);" |
2261 "f();"); | 2261 "f();"); |
2262 | 2262 |
2263 Handle<JSObject> o = | 2263 Handle<JSObject> o = |
2264 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); | 2264 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); |
2265 | 2265 |
2266 CHECK(HEAP->InOldPointerSpace(*o)); | 2266 CHECK(HEAP->InOldPointerSpace(*o)); |
2267 CHECK(HEAP->InOldDataSpace(o->properties())); | 2267 CHECK(HEAP->InOldDataSpace(o->properties())); |
2268 } | 2268 } |
2269 | 2269 |
2270 | 2270 |
2271 TEST(OptimizedPretenuringdoubleArrayLiterals) { | 2271 TEST(OptimizedPretenuringdoubleArrayLiterals) { |
2272 i::FLAG_allow_natives_syntax = true; | 2272 i::FLAG_allow_natives_syntax = true; |
2273 CcTest::InitializeVM(); | 2273 CcTest::InitializeVM(); |
2274 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2274 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2275 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2275 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2276 v8::HandleScope scope(CcTest::isolate()); | 2276 v8::HandleScope scope(CcTest::isolate()); |
2277 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2277 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2278 | 2278 |
2279 v8::Local<v8::Value> res = CompileRun( | 2279 v8::Local<v8::Value> res = CompileRun( |
2280 "function f() {" | 2280 "function f() {" |
2281 " var numbers = [1.1, 2.2, 3.3];" | 2281 " var numbers = [1.1, 2.2, 3.3];" |
2282 " return numbers;" | 2282 " return numbers;" |
2283 "};" | 2283 "};" |
2284 "f(); f(); f();" | 2284 "f(); f(); f();" |
2285 "%OptimizeFunctionOnNextCall(f);" | 2285 "%OptimizeFunctionOnNextCall(f);" |
2286 "f();"); | 2286 "f();"); |
2287 | 2287 |
2288 Handle<JSObject> o = | 2288 Handle<JSObject> o = |
2289 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); | 2289 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); |
2290 | 2290 |
2291 CHECK(HEAP->InOldDataSpace(o->elements())); | 2291 CHECK(HEAP->InOldDataSpace(o->elements())); |
2292 CHECK(HEAP->InOldPointerSpace(*o)); | 2292 CHECK(HEAP->InOldPointerSpace(*o)); |
2293 } | 2293 } |
2294 | 2294 |
2295 | 2295 |
2296 TEST(OptimizedPretenuringNestedMixedArrayLiterals) { | 2296 TEST(OptimizedPretenuringNestedMixedArrayLiterals) { |
2297 i::FLAG_allow_natives_syntax = true; | 2297 i::FLAG_allow_natives_syntax = true; |
2298 CcTest::InitializeVM(); | 2298 CcTest::InitializeVM(); |
2299 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2299 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2300 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2300 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2301 v8::HandleScope scope(CcTest::isolate()); | 2301 v8::HandleScope scope(CcTest::isolate()); |
2302 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2302 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2303 | 2303 |
2304 v8::Local<v8::Value> res = CompileRun( | 2304 v8::Local<v8::Value> res = CompileRun( |
2305 "function f() {" | 2305 "function f() {" |
2306 " var numbers = [[{}, {}, {}],[1.1, 2.2, 3.3]];" | 2306 " var numbers = [[{}, {}, {}],[1.1, 2.2, 3.3]];" |
2307 " return numbers;" | 2307 " return numbers;" |
2308 "};" | 2308 "};" |
2309 "f(); f(); f();" | 2309 "f(); f(); f();" |
(...skipping 13 matching lines...) Expand all Loading... |
2323 CHECK(HEAP->InOldPointerSpace(*int_array_handle)); | 2323 CHECK(HEAP->InOldPointerSpace(*int_array_handle)); |
2324 CHECK(HEAP->InOldPointerSpace(int_array_handle->elements())); | 2324 CHECK(HEAP->InOldPointerSpace(int_array_handle->elements())); |
2325 CHECK(HEAP->InOldPointerSpace(*double_array_handle)); | 2325 CHECK(HEAP->InOldPointerSpace(*double_array_handle)); |
2326 CHECK(HEAP->InOldDataSpace(double_array_handle->elements())); | 2326 CHECK(HEAP->InOldDataSpace(double_array_handle->elements())); |
2327 } | 2327 } |
2328 | 2328 |
2329 | 2329 |
2330 TEST(OptimizedPretenuringNestedObjectLiterals) { | 2330 TEST(OptimizedPretenuringNestedObjectLiterals) { |
2331 i::FLAG_allow_natives_syntax = true; | 2331 i::FLAG_allow_natives_syntax = true; |
2332 CcTest::InitializeVM(); | 2332 CcTest::InitializeVM(); |
2333 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2333 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2334 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2334 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2335 v8::HandleScope scope(CcTest::isolate()); | 2335 v8::HandleScope scope(CcTest::isolate()); |
2336 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2336 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2337 | 2337 |
2338 v8::Local<v8::Value> res = CompileRun( | 2338 v8::Local<v8::Value> res = CompileRun( |
2339 "function f() {" | 2339 "function f() {" |
2340 " var numbers = [[{}, {}, {}],[{}, {}, {}]];" | 2340 " var numbers = [[{}, {}, {}],[{}, {}, {}]];" |
2341 " return numbers;" | 2341 " return numbers;" |
2342 "};" | 2342 "};" |
2343 "f(); f(); f();" | 2343 "f(); f(); f();" |
(...skipping 13 matching lines...) Expand all Loading... |
2357 CHECK(HEAP->InOldPointerSpace(*int_array_handle_1)); | 2357 CHECK(HEAP->InOldPointerSpace(*int_array_handle_1)); |
2358 CHECK(HEAP->InOldPointerSpace(int_array_handle_1->elements())); | 2358 CHECK(HEAP->InOldPointerSpace(int_array_handle_1->elements())); |
2359 CHECK(HEAP->InOldPointerSpace(*int_array_handle_2)); | 2359 CHECK(HEAP->InOldPointerSpace(*int_array_handle_2)); |
2360 CHECK(HEAP->InOldPointerSpace(int_array_handle_2->elements())); | 2360 CHECK(HEAP->InOldPointerSpace(int_array_handle_2->elements())); |
2361 } | 2361 } |
2362 | 2362 |
2363 | 2363 |
2364 TEST(OptimizedPretenuringNestedDoubleLiterals) { | 2364 TEST(OptimizedPretenuringNestedDoubleLiterals) { |
2365 i::FLAG_allow_natives_syntax = true; | 2365 i::FLAG_allow_natives_syntax = true; |
2366 CcTest::InitializeVM(); | 2366 CcTest::InitializeVM(); |
2367 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2367 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2368 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2368 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2369 v8::HandleScope scope(CcTest::isolate()); | 2369 v8::HandleScope scope(CcTest::isolate()); |
2370 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2370 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2371 | 2371 |
2372 v8::Local<v8::Value> res = CompileRun( | 2372 v8::Local<v8::Value> res = CompileRun( |
2373 "function f() {" | 2373 "function f() {" |
2374 " var numbers = [[1.1, 1.2, 1.3],[2.1, 2.2, 2.3]];" | 2374 " var numbers = [[1.1, 1.2, 1.3],[2.1, 2.2, 2.3]];" |
2375 " return numbers;" | 2375 " return numbers;" |
2376 "};" | 2376 "};" |
2377 "f(); f(); f();" | 2377 "f(); f(); f();" |
(...skipping 16 matching lines...) Expand all Loading... |
2394 CHECK(HEAP->InOldDataSpace(double_array_handle_1->elements())); | 2394 CHECK(HEAP->InOldDataSpace(double_array_handle_1->elements())); |
2395 CHECK(HEAP->InOldPointerSpace(*double_array_handle_2)); | 2395 CHECK(HEAP->InOldPointerSpace(*double_array_handle_2)); |
2396 CHECK(HEAP->InOldDataSpace(double_array_handle_2->elements())); | 2396 CHECK(HEAP->InOldDataSpace(double_array_handle_2->elements())); |
2397 } | 2397 } |
2398 | 2398 |
2399 | 2399 |
2400 // Test regular array literals allocation. | 2400 // Test regular array literals allocation. |
2401 TEST(OptimizedAllocationArrayLiterals) { | 2401 TEST(OptimizedAllocationArrayLiterals) { |
2402 i::FLAG_allow_natives_syntax = true; | 2402 i::FLAG_allow_natives_syntax = true; |
2403 CcTest::InitializeVM(); | 2403 CcTest::InitializeVM(); |
2404 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2404 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2405 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2405 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2406 v8::HandleScope scope(CcTest::isolate()); | 2406 v8::HandleScope scope(CcTest::isolate()); |
2407 | 2407 |
2408 v8::Local<v8::Value> res = CompileRun( | 2408 v8::Local<v8::Value> res = CompileRun( |
2409 "function f() {" | 2409 "function f() {" |
2410 " var numbers = new Array(1, 2, 3);" | 2410 " var numbers = new Array(1, 2, 3);" |
2411 " numbers[0] = 3.14;" | 2411 " numbers[0] = 3.14;" |
2412 " return numbers;" | 2412 " return numbers;" |
2413 "};" | 2413 "};" |
2414 "f(); f(); f();" | 2414 "f(); f(); f();" |
2415 "%OptimizeFunctionOnNextCall(f);" | 2415 "%OptimizeFunctionOnNextCall(f);" |
2416 "f();"); | 2416 "f();"); |
2417 CHECK_EQ(static_cast<int>(3.14), | 2417 CHECK_EQ(static_cast<int>(3.14), |
2418 v8::Object::Cast(*res)->Get(v8_str("0"))->Int32Value()); | 2418 v8::Object::Cast(*res)->Get(v8_str("0"))->Int32Value()); |
2419 | 2419 |
2420 Handle<JSObject> o = | 2420 Handle<JSObject> o = |
2421 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); | 2421 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); |
2422 | 2422 |
2423 CHECK(HEAP->InNewSpace(o->elements())); | 2423 CHECK(HEAP->InNewSpace(o->elements())); |
2424 } | 2424 } |
2425 | 2425 |
2426 | 2426 |
2427 TEST(OptimizedPretenuringCallNew) { | 2427 TEST(OptimizedPretenuringCallNew) { |
2428 i::FLAG_allow_natives_syntax = true; | 2428 i::FLAG_allow_natives_syntax = true; |
2429 i::FLAG_pretenuring_call_new = true; | 2429 i::FLAG_pretenuring_call_new = true; |
2430 CcTest::InitializeVM(); | 2430 CcTest::InitializeVM(); |
2431 if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return; | 2431 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; |
2432 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; | 2432 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; |
2433 v8::HandleScope scope(CcTest::isolate()); | 2433 v8::HandleScope scope(CcTest::isolate()); |
2434 HEAP->SetNewSpaceHighPromotionModeActive(true); | 2434 HEAP->SetNewSpaceHighPromotionModeActive(true); |
2435 | 2435 |
2436 AlwaysAllocateScope always_allocate; | 2436 AlwaysAllocateScope always_allocate; |
2437 v8::Local<v8::Value> res = CompileRun( | 2437 v8::Local<v8::Value> res = CompileRun( |
2438 "function g() { this.a = 0; }" | 2438 "function g() { this.a = 0; }" |
2439 "function f() {" | 2439 "function f() {" |
2440 " return new g();" | 2440 " return new g();" |
2441 "};" | 2441 "};" |
(...skipping 1002 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3444 " var a = new Array(n);" | 3444 " var a = new Array(n);" |
3445 " for (var i = 0; i < n; i += 100) a[i] = i;" | 3445 " for (var i = 0; i < n; i += 100) a[i] = i;" |
3446 "};" | 3446 "};" |
3447 "f(10 * 1024 * 1024);"); | 3447 "f(10 * 1024 * 1024);"); |
3448 IncrementalMarking* marking = HEAP->incremental_marking(); | 3448 IncrementalMarking* marking = HEAP->incremental_marking(); |
3449 if (marking->IsStopped()) marking->Start(); | 3449 if (marking->IsStopped()) marking->Start(); |
3450 // This big step should be sufficient to mark the whole array. | 3450 // This big step should be sufficient to mark the whole array. |
3451 marking->Step(100 * MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD); | 3451 marking->Step(100 * MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD); |
3452 ASSERT(marking->IsComplete()); | 3452 ASSERT(marking->IsComplete()); |
3453 } | 3453 } |
OLD | NEW |