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