Chromium Code Reviews| Index: test/cctest/test-api.cc |
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
| index 22e207785888f2857db01f6e20486a8a64c216d4..4f7e87d39749c14a775ffb6d660f4942c91af8bc 100644 |
| --- a/test/cctest/test-api.cc |
| +++ b/test/cctest/test-api.cc |
| @@ -14323,129 +14323,6 @@ THREADED_TEST(CrossContextNew) { |
| } |
| -class RegExpInterruptTest { |
| - public: |
| - RegExpInterruptTest() : block_(0) {} |
| - ~RegExpInterruptTest() {} |
| - void RunTest() { |
| - gc_count_ = 0; |
| - gc_during_regexp_ = 0; |
| - regexp_success_ = false; |
| - gc_success_ = false; |
| - GCThread gc_thread(this); |
| - gc_thread.Start(); |
| - v8::Isolate* isolate = CcTest::isolate(); |
| - v8::Locker::StartPreemption(isolate, 1); |
| - |
| - LongRunningRegExp(); |
| - { |
| - v8::Unlocker unlock(isolate); |
| - gc_thread.Join(); |
| - } |
| - v8::Locker::StopPreemption(isolate); |
| - CHECK(regexp_success_); |
| - CHECK(gc_success_); |
| - } |
| - |
| - private: |
| - // Number of garbage collections required. |
| - static const int kRequiredGCs = 5; |
| - |
| - class GCThread : public i::Thread { |
| - public: |
| - explicit GCThread(RegExpInterruptTest* test) |
| - : Thread("GCThread"), test_(test) {} |
| - virtual void Run() { |
| - test_->CollectGarbage(); |
| - } |
| - private: |
| - RegExpInterruptTest* test_; |
| - }; |
| - |
| - void CollectGarbage() { |
| - block_.Wait(); |
| - while (gc_during_regexp_ < kRequiredGCs) { |
| - { |
| - v8::Locker lock(CcTest::isolate()); |
| - v8::Isolate::Scope isolate_scope(CcTest::isolate()); |
| - // TODO(lrn): Perhaps create some garbage before collecting. |
| - CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
| - gc_count_++; |
| - } |
| - i::OS::Sleep(1); |
| - } |
| - gc_success_ = true; |
| - } |
| - |
| - void LongRunningRegExp() { |
| - block_.Signal(); // Enable garbage collection thread on next preemption. |
| - int rounds = 0; |
| - while (gc_during_regexp_ < kRequiredGCs) { |
| - int gc_before = gc_count_; |
| - { |
| - // Match 15-30 "a"'s against 14 and a "b". |
| - const char* c_source = |
| - "/a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaa/" |
| - ".exec('aaaaaaaaaaaaaaab') === null"; |
| - Local<String> source = String::New(c_source); |
| - Local<Script> script = Script::Compile(source); |
| - Local<Value> result = script->Run(); |
| - if (!result->BooleanValue()) { |
| - gc_during_regexp_ = kRequiredGCs; // Allow gc thread to exit. |
| - return; |
| - } |
| - } |
| - { |
| - // Match 15-30 "a"'s against 15 and a "b". |
| - const char* c_source = |
| - "/a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaa/" |
| - ".exec('aaaaaaaaaaaaaaaab')[0] === 'aaaaaaaaaaaaaaaa'"; |
| - Local<String> source = String::New(c_source); |
| - Local<Script> script = Script::Compile(source); |
| - Local<Value> result = script->Run(); |
| - if (!result->BooleanValue()) { |
| - gc_during_regexp_ = kRequiredGCs; |
| - return; |
| - } |
| - } |
| - int gc_after = gc_count_; |
| - gc_during_regexp_ += gc_after - gc_before; |
| - rounds++; |
| - i::OS::Sleep(1); |
| - } |
| - regexp_success_ = true; |
| - } |
| - |
| - i::Semaphore block_; |
| - int gc_count_; |
| - int gc_during_regexp_; |
| - bool regexp_success_; |
| - bool gc_success_; |
| -}; |
| - |
| - |
| -// Test that a regular expression execution can be interrupted and |
| -// survive a garbage collection. |
| -TEST(RegExpInterruption) { |
| - v8::Locker lock(CcTest::isolate()); |
| - 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. |
| - RegExpInterruptTest().RunTest(); |
| - |
| - local_env->Exit(); |
| -} |
| - |
| - |
| class ApplyInterruptTest { |
|
jochen (gone - plz use gerrit)
2013/10/11 18:31:06
this and another test in this file also use the pr
|
| public: |
| ApplyInterruptTest() : block_(0) {} |