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 2225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2236 } | 2236 } |
2237 Handle<JSFunction> f = | 2237 Handle<JSFunction> f = |
2238 v8::Utils::OpenHandle( | 2238 v8::Utils::OpenHandle( |
2239 *v8::Handle<v8::Function>::Cast( | 2239 *v8::Handle<v8::Function>::Cast( |
2240 CcTest::global()->Get(v8_str("f")))); | 2240 CcTest::global()->Get(v8_str("f")))); |
2241 CHECK(f->IsOptimized()); | 2241 CHECK(f->IsOptimized()); |
2242 | 2242 |
2243 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); | 2243 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); |
2244 marking->Abort(); | 2244 marking->Abort(); |
2245 marking->Start(); | 2245 marking->Start(); |
2246 | 2246 // The following calls will increment CcTest::heap()->global_ic_age(). |
2247 // The following two calls will increment CcTest::heap()->global_ic_age(). | |
2248 const double kLongIdlePauseInSeconds = 1.0; | |
2249 CcTest::isolate()->ContextDisposedNotification(); | 2247 CcTest::isolate()->ContextDisposedNotification(); |
2250 CcTest::isolate()->IdleNotificationDeadline( | 2248 SimulateIncrementalMarking(CcTest::heap()); |
2251 (v8::base::TimeTicks::HighResolutionNow().ToInternalValue() / | 2249 CcTest::heap()->CollectAllGarbage(); |
2252 static_cast<double>(v8::base::Time::kMicrosecondsPerSecond)) + | |
2253 kLongIdlePauseInSeconds); | |
2254 | |
2255 while (!marking->IsStopped() && !marking->IsComplete()) { | |
2256 marking->Step(1 * MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD); | |
2257 } | |
2258 if (!marking->IsStopped() || marking->should_hurry()) { | |
2259 // We don't normally finish a GC via Step(), we normally finish by | |
2260 // setting the stack guard and then do the final steps in the stack | |
2261 // guard interrupt. But here we didn't ask for that, and there is no | |
2262 // JS code running to trigger the interrupt, so we explicitly finalize | |
2263 // here. | |
2264 CcTest::heap()->CollectAllGarbage(Heap::kFinalizeIncrementalMarkingMask, | |
2265 "Test finalizing incremental mark-sweep"); | |
2266 } | |
2267 | |
2268 CHECK_EQ(CcTest::heap()->global_ic_age(), f->shared()->ic_age()); | 2250 CHECK_EQ(CcTest::heap()->global_ic_age(), f->shared()->ic_age()); |
2269 CHECK_EQ(0, f->shared()->opt_count()); | 2251 CHECK_EQ(0, f->shared()->opt_count()); |
2270 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); | 2252 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); |
2271 } | 2253 } |
2272 | 2254 |
2273 | 2255 |
2274 TEST(ResetSharedFunctionInfoCountersDuringMarkSweep) { | 2256 TEST(ResetSharedFunctionInfoCountersDuringMarkSweep) { |
2275 i::FLAG_stress_compaction = false; | 2257 i::FLAG_stress_compaction = false; |
2276 i::FLAG_allow_natives_syntax = true; | 2258 i::FLAG_allow_natives_syntax = true; |
2277 #ifdef VERIFY_HEAP | 2259 #ifdef VERIFY_HEAP |
(...skipping 18 matching lines...) Expand all Loading... |
2296 } | 2278 } |
2297 Handle<JSFunction> f = | 2279 Handle<JSFunction> f = |
2298 v8::Utils::OpenHandle( | 2280 v8::Utils::OpenHandle( |
2299 *v8::Handle<v8::Function>::Cast( | 2281 *v8::Handle<v8::Function>::Cast( |
2300 CcTest::global()->Get(v8_str("f")))); | 2282 CcTest::global()->Get(v8_str("f")))); |
2301 CHECK(f->IsOptimized()); | 2283 CHECK(f->IsOptimized()); |
2302 | 2284 |
2303 CcTest::heap()->incremental_marking()->Abort(); | 2285 CcTest::heap()->incremental_marking()->Abort(); |
2304 | 2286 |
2305 // The following two calls will increment CcTest::heap()->global_ic_age(). | 2287 // The following two calls will increment CcTest::heap()->global_ic_age(). |
2306 // Since incremental marking is off, IdleNotification will do full GC. | |
2307 const double kLongIdlePauseInSeconds = 1.0; | |
2308 CcTest::isolate()->ContextDisposedNotification(); | 2288 CcTest::isolate()->ContextDisposedNotification(); |
2309 CcTest::isolate()->IdleNotificationDeadline( | 2289 CcTest::heap()->CollectAllGarbage(); |
2310 (v8::base::TimeTicks::HighResolutionNow().ToInternalValue() / | |
2311 static_cast<double>(v8::base::Time::kMicrosecondsPerSecond)) + | |
2312 kLongIdlePauseInSeconds); | |
2313 | 2290 |
2314 CHECK_EQ(CcTest::heap()->global_ic_age(), f->shared()->ic_age()); | 2291 CHECK_EQ(CcTest::heap()->global_ic_age(), f->shared()->ic_age()); |
2315 CHECK_EQ(0, f->shared()->opt_count()); | 2292 CHECK_EQ(0, f->shared()->opt_count()); |
2316 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); | 2293 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); |
2317 } | 2294 } |
2318 | 2295 |
2319 | 2296 |
2320 TEST(IdleNotificationFinishMarking) { | 2297 TEST(IdleNotificationFinishMarking) { |
2321 i::FLAG_allow_natives_syntax = true; | 2298 i::FLAG_allow_natives_syntax = true; |
2322 CcTest::InitializeVM(); | 2299 CcTest::InitializeVM(); |
(...skipping 3088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5411 CHECK(pos->IsSmi()); | 5388 CHECK(pos->IsSmi()); |
5412 | 5389 |
5413 Handle<JSArray> stack_trace_array = Handle<JSArray>::cast(stack_trace); | 5390 Handle<JSArray> stack_trace_array = Handle<JSArray>::cast(stack_trace); |
5414 int array_length = Smi::cast(stack_trace_array->length())->value(); | 5391 int array_length = Smi::cast(stack_trace_array->length())->value(); |
5415 for (int i = 0; i < array_length; i++) { | 5392 for (int i = 0; i < array_length; i++) { |
5416 Handle<Object> element = | 5393 Handle<Object> element = |
5417 Object::GetElement(isolate, stack_trace, i).ToHandleChecked(); | 5394 Object::GetElement(isolate, stack_trace, i).ToHandleChecked(); |
5418 CHECK(!element->IsCode()); | 5395 CHECK(!element->IsCode()); |
5419 } | 5396 } |
5420 } | 5397 } |
OLD | NEW |