Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index 6a75cd72dbf890ddbefc7e8ae9a460a74e7b6f8c..9e95d07ad08df091f0744f113a1aa765cfed801a 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -14481,116 +14481,6 @@ THREADED_TEST(CrossContextNew) { |
} |
-class ApplyInterruptTest { |
- public: |
- ApplyInterruptTest() : block_(0) {} |
- ~ApplyInterruptTest() {} |
- void RunTest() { |
- gc_count_ = 0; |
- gc_during_apply_ = 0; |
- apply_success_ = false; |
- gc_success_ = false; |
- GCThread gc_thread(this); |
- gc_thread.Start(); |
- v8::Isolate* isolate = CcTest::isolate(); |
- v8::Locker::StartPreemption(isolate, 1); |
- |
- LongRunningApply(); |
- { |
- v8::Unlocker unlock(isolate); |
- gc_thread.Join(); |
- } |
- v8::Locker::StopPreemption(isolate); |
- CHECK(apply_success_); |
- CHECK(gc_success_); |
- } |
- |
- private: |
- // Number of garbage collections required. |
- static const int kRequiredGCs = 2; |
- |
- class GCThread : public i::Thread { |
- public: |
- explicit GCThread(ApplyInterruptTest* test) |
- : Thread("GCThread"), test_(test) {} |
- virtual void Run() { |
- test_->CollectGarbage(); |
- } |
- private: |
- ApplyInterruptTest* test_; |
- }; |
- |
- void CollectGarbage() { |
- block_.Wait(); |
- while (gc_during_apply_ < kRequiredGCs) { |
- { |
- v8::Locker lock(CcTest::isolate()); |
- v8::Isolate::Scope isolate_scope(CcTest::isolate()); |
- CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
- gc_count_++; |
- } |
- i::OS::Sleep(1); |
- } |
- gc_success_ = true; |
- } |
- |
- void LongRunningApply() { |
- block_.Signal(); |
- int rounds = 0; |
- while (gc_during_apply_ < kRequiredGCs) { |
- int gc_before = gc_count_; |
- { |
- const char* c_source = |
- "function do_very_little(bar) {" |
- " this.foo = bar;" |
- "}" |
- "for (var i = 0; i < 100000; i++) {" |
- " do_very_little.apply(this, ['bar']);" |
- "}"; |
- Local<String> source = String::New(c_source); |
- Local<Script> script = Script::Compile(source); |
- Local<Value> result = script->Run(); |
- // Check that no exception was thrown. |
- CHECK(!result.IsEmpty()); |
- } |
- int gc_after = gc_count_; |
- gc_during_apply_ += gc_after - gc_before; |
- rounds++; |
- } |
- apply_success_ = true; |
- } |
- |
- i::Semaphore block_; |
- int gc_count_; |
- int gc_during_apply_; |
- bool apply_success_; |
- bool gc_success_; |
-}; |
- |
- |
-// Test that nothing bad happens if we get a preemption just when we were |
-// about to do an apply(). |
-TEST(ApplyInterruption) { |
- v8::Locker lock(CcTest::isolate()); |
- v8::V8::Initialize(); |
- v8::HandleScope scope(CcTest::isolate()); |
- Local<Context> local_env; |
- { |
- LocalContext env; |
- local_env = env.local(); |
- } |
- |
- // Local context should still be live. |
- CHECK(!local_env.IsEmpty()); |
- local_env->Enter(); |
- |
- // Should complete without problems. |
- ApplyInterruptTest().RunTest(); |
- |
- local_env->Exit(); |
-} |
- |
- |
// Verify that we can clone an object |
TEST(ObjectClone) { |
LocalContext env; |