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 15704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15715 static void CreateGarbageInOldSpace() { | 15715 static void CreateGarbageInOldSpace() { |
15716 i::Factory* factory = CcTest::i_isolate()->factory(); | 15716 i::Factory* factory = CcTest::i_isolate()->factory(); |
15717 v8::HandleScope scope(CcTest::isolate()); | 15717 v8::HandleScope scope(CcTest::isolate()); |
15718 i::AlwaysAllocateScope always_allocate(CcTest::i_isolate()); | 15718 i::AlwaysAllocateScope always_allocate(CcTest::i_isolate()); |
15719 for (int i = 0; i < 1000; i++) { | 15719 for (int i = 0; i < 1000; i++) { |
15720 factory->NewFixedArray(1000, i::TENURED); | 15720 factory->NewFixedArray(1000, i::TENURED); |
15721 } | 15721 } |
15722 } | 15722 } |
15723 | 15723 |
15724 | 15724 |
15725 // Test that idle notification can be handled and eventually returns true. | |
15726 TEST(IdleNotification) { | |
15727 const intptr_t MB = 1024 * 1024; | |
15728 const int IdlePauseInMs = 1000; | |
15729 LocalContext env; | |
15730 v8::HandleScope scope(env->GetIsolate()); | |
15731 intptr_t initial_size = CcTest::heap()->SizeOfObjects(); | |
15732 CreateGarbageInOldSpace(); | |
15733 intptr_t size_with_garbage = CcTest::heap()->SizeOfObjects(); | |
15734 CHECK_GT(size_with_garbage, initial_size + MB); | |
15735 bool finished = false; | |
15736 for (int i = 0; i < 200 && !finished; i++) { | |
15737 finished = env->GetIsolate()->IdleNotification(IdlePauseInMs); | |
15738 } | |
15739 intptr_t final_size = CcTest::heap()->SizeOfObjects(); | |
15740 CHECK(finished); | |
15741 CHECK_LT(final_size, initial_size + 1); | |
15742 } | |
15743 | |
15744 | |
15745 // Test that idle notification can be handled and eventually collects garbage. | 15725 // Test that idle notification can be handled and eventually collects garbage. |
15746 TEST(IdleNotificationWithSmallHint) { | 15726 TEST(IdleNotificationWithSmallHint) { |
15747 const intptr_t MB = 1024 * 1024; | 15727 const intptr_t MB = 1024 * 1024; |
15748 const int IdlePauseInMs = 900; | 15728 const double IdlePauseInSeconds = 0.9; |
15749 LocalContext env; | 15729 LocalContext env; |
15750 v8::HandleScope scope(env->GetIsolate()); | 15730 v8::HandleScope scope(env->GetIsolate()); |
15751 intptr_t initial_size = CcTest::heap()->SizeOfObjects(); | 15731 intptr_t initial_size = CcTest::heap()->SizeOfObjects(); |
15752 CreateGarbageInOldSpace(); | 15732 CreateGarbageInOldSpace(); |
15753 intptr_t size_with_garbage = CcTest::heap()->SizeOfObjects(); | 15733 intptr_t size_with_garbage = CcTest::heap()->SizeOfObjects(); |
15754 CHECK_GT(size_with_garbage, initial_size + MB); | 15734 CHECK_GT(size_with_garbage, initial_size + MB); |
15755 bool finished = false; | 15735 bool finished = false; |
15756 for (int i = 0; i < 200 && !finished; i++) { | 15736 for (int i = 0; i < 200 && !finished; i++) { |
15757 finished = env->GetIsolate()->IdleNotification(IdlePauseInMs); | 15737 finished = env->GetIsolate()->IdleNotificationDeadline( |
| 15738 (v8::base::TimeTicks::HighResolutionNow().ToInternalValue() / |
| 15739 static_cast<double>(v8::base::Time::kMicrosecondsPerSecond)) + |
| 15740 IdlePauseInSeconds); |
15758 } | 15741 } |
15759 intptr_t final_size = CcTest::heap()->SizeOfObjects(); | 15742 intptr_t final_size = CcTest::heap()->SizeOfObjects(); |
15760 CHECK(finished); | 15743 CHECK(finished); |
15761 CHECK_LT(final_size, initial_size + 1); | 15744 CHECK_LT(final_size, initial_size + 1); |
15762 } | 15745 } |
15763 | 15746 |
15764 | 15747 |
15765 // Test that idle notification can be handled and eventually collects garbage. | 15748 // Test that idle notification can be handled and eventually collects garbage. |
15766 TEST(IdleNotificationWithLargeHint) { | 15749 TEST(IdleNotificationWithLargeHint) { |
15767 const intptr_t MB = 1024 * 1024; | 15750 const intptr_t MB = 1024 * 1024; |
15768 const int IdlePauseInMs = 900; | 15751 const double IdlePauseInSeconds = 1.0; |
15769 LocalContext env; | 15752 LocalContext env; |
15770 v8::HandleScope scope(env->GetIsolate()); | 15753 v8::HandleScope scope(env->GetIsolate()); |
15771 intptr_t initial_size = CcTest::heap()->SizeOfObjects(); | 15754 intptr_t initial_size = CcTest::heap()->SizeOfObjects(); |
15772 CreateGarbageInOldSpace(); | 15755 CreateGarbageInOldSpace(); |
15773 intptr_t size_with_garbage = CcTest::heap()->SizeOfObjects(); | 15756 intptr_t size_with_garbage = CcTest::heap()->SizeOfObjects(); |
15774 CHECK_GT(size_with_garbage, initial_size + MB); | 15757 CHECK_GT(size_with_garbage, initial_size + MB); |
15775 bool finished = false; | 15758 bool finished = false; |
15776 for (int i = 0; i < 200 && !finished; i++) { | 15759 for (int i = 0; i < 200 && !finished; i++) { |
15777 finished = env->GetIsolate()->IdleNotification(IdlePauseInMs); | 15760 finished = env->GetIsolate()->IdleNotificationDeadline( |
| 15761 (v8::base::TimeTicks::HighResolutionNow().ToInternalValue() / |
| 15762 static_cast<double>(v8::base::Time::kMicrosecondsPerSecond)) + |
| 15763 IdlePauseInSeconds); |
15778 } | 15764 } |
15779 intptr_t final_size = CcTest::heap()->SizeOfObjects(); | 15765 intptr_t final_size = CcTest::heap()->SizeOfObjects(); |
15780 CHECK(finished); | 15766 CHECK(finished); |
15781 CHECK_LT(final_size, initial_size + 1); | 15767 CHECK_LT(final_size, initial_size + 1); |
15782 } | 15768 } |
15783 | 15769 |
15784 | 15770 |
15785 TEST(Regress2333) { | 15771 TEST(Regress2333) { |
15786 LocalContext env; | 15772 LocalContext env; |
15787 for (int i = 0; i < 3; i++) { | 15773 for (int i = 0; i < 3; i++) { |
(...skipping 5846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21634 } | 21620 } |
21635 { | 21621 { |
21636 v8::TryCatch try_catch; | 21622 v8::TryCatch try_catch; |
21637 uint16_t* data = reinterpret_cast<uint16_t*>(buffer); | 21623 uint16_t* data = reinterpret_cast<uint16_t*>(buffer); |
21638 CHECK(v8::String::NewFromTwoByte(isolate, data, v8::String::kNormalString, | 21624 CHECK(v8::String::NewFromTwoByte(isolate, data, v8::String::kNormalString, |
21639 length).IsEmpty()); | 21625 length).IsEmpty()); |
21640 CHECK(!try_catch.HasCaught()); | 21626 CHECK(!try_catch.HasCaught()); |
21641 } | 21627 } |
21642 free(buffer); | 21628 free(buffer); |
21643 } | 21629 } |
OLD | NEW |