Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(283)

Side by Side Diff: test/cctest/test-api.cc

Issue 62283010: Remove preemption thread and API (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebased Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/v8threads.cc ('k') | test/cctest/test-threads.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 14463 matching lines...) Expand 10 before | Expand all | Expand 10 after
14474 // result has the 'x' property. 14474 // result has the 'x' property.
14475 context1->Enter(); 14475 context1->Enter();
14476 context1->Global()->Set(v8_str("other"), context0->Global()); 14476 context1->Global()->Set(v8_str("other"), context0->Global());
14477 Local<Value> value = CompileRun("var instance = new other.C(); instance.x"); 14477 Local<Value> value = CompileRun("var instance = new other.C(); instance.x");
14478 CHECK(value->IsInt32()); 14478 CHECK(value->IsInt32());
14479 CHECK_EQ(42, value->Int32Value()); 14479 CHECK_EQ(42, value->Int32Value());
14480 context1->Exit(); 14480 context1->Exit();
14481 } 14481 }
14482 14482
14483 14483
14484 class ApplyInterruptTest {
14485 public:
14486 ApplyInterruptTest() : block_(0) {}
14487 ~ApplyInterruptTest() {}
14488 void RunTest() {
14489 gc_count_ = 0;
14490 gc_during_apply_ = 0;
14491 apply_success_ = false;
14492 gc_success_ = false;
14493 GCThread gc_thread(this);
14494 gc_thread.Start();
14495 v8::Isolate* isolate = CcTest::isolate();
14496 v8::Locker::StartPreemption(isolate, 1);
14497
14498 LongRunningApply();
14499 {
14500 v8::Unlocker unlock(isolate);
14501 gc_thread.Join();
14502 }
14503 v8::Locker::StopPreemption(isolate);
14504 CHECK(apply_success_);
14505 CHECK(gc_success_);
14506 }
14507
14508 private:
14509 // Number of garbage collections required.
14510 static const int kRequiredGCs = 2;
14511
14512 class GCThread : public i::Thread {
14513 public:
14514 explicit GCThread(ApplyInterruptTest* test)
14515 : Thread("GCThread"), test_(test) {}
14516 virtual void Run() {
14517 test_->CollectGarbage();
14518 }
14519 private:
14520 ApplyInterruptTest* test_;
14521 };
14522
14523 void CollectGarbage() {
14524 block_.Wait();
14525 while (gc_during_apply_ < kRequiredGCs) {
14526 {
14527 v8::Locker lock(CcTest::isolate());
14528 v8::Isolate::Scope isolate_scope(CcTest::isolate());
14529 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags);
14530 gc_count_++;
14531 }
14532 i::OS::Sleep(1);
14533 }
14534 gc_success_ = true;
14535 }
14536
14537 void LongRunningApply() {
14538 block_.Signal();
14539 int rounds = 0;
14540 while (gc_during_apply_ < kRequiredGCs) {
14541 int gc_before = gc_count_;
14542 {
14543 const char* c_source =
14544 "function do_very_little(bar) {"
14545 " this.foo = bar;"
14546 "}"
14547 "for (var i = 0; i < 100000; i++) {"
14548 " do_very_little.apply(this, ['bar']);"
14549 "}";
14550 Local<String> source = String::New(c_source);
14551 Local<Script> script = Script::Compile(source);
14552 Local<Value> result = script->Run();
14553 // Check that no exception was thrown.
14554 CHECK(!result.IsEmpty());
14555 }
14556 int gc_after = gc_count_;
14557 gc_during_apply_ += gc_after - gc_before;
14558 rounds++;
14559 }
14560 apply_success_ = true;
14561 }
14562
14563 i::Semaphore block_;
14564 int gc_count_;
14565 int gc_during_apply_;
14566 bool apply_success_;
14567 bool gc_success_;
14568 };
14569
14570
14571 // Test that nothing bad happens if we get a preemption just when we were
14572 // about to do an apply().
14573 TEST(ApplyInterruption) {
14574 v8::Locker lock(CcTest::isolate());
14575 v8::V8::Initialize();
14576 v8::HandleScope scope(CcTest::isolate());
14577 Local<Context> local_env;
14578 {
14579 LocalContext env;
14580 local_env = env.local();
14581 }
14582
14583 // Local context should still be live.
14584 CHECK(!local_env.IsEmpty());
14585 local_env->Enter();
14586
14587 // Should complete without problems.
14588 ApplyInterruptTest().RunTest();
14589
14590 local_env->Exit();
14591 }
14592
14593
14594 // Verify that we can clone an object 14484 // Verify that we can clone an object
14595 TEST(ObjectClone) { 14485 TEST(ObjectClone) {
14596 LocalContext env; 14486 LocalContext env;
14597 v8::HandleScope scope(env->GetIsolate()); 14487 v8::HandleScope scope(env->GetIsolate());
14598 14488
14599 const char* sample = 14489 const char* sample =
14600 "var rv = {};" \ 14490 "var rv = {};" \
14601 "rv.alpha = 'hello';" \ 14491 "rv.alpha = 'hello';" \
14602 "rv.beta = 123;" \ 14492 "rv.beta = 123;" \
14603 "rv;"; 14493 "rv;";
(...skipping 6208 matching lines...) Expand 10 before | Expand all | Expand 10 after
20812 } 20702 }
20813 for (int i = 0; i < runs; i++) { 20703 for (int i = 0; i < runs; i++) {
20814 Local<String> expected; 20704 Local<String> expected;
20815 if (i != 0) { 20705 if (i != 0) {
20816 CHECK_EQ(v8_str("escape value"), values[i]); 20706 CHECK_EQ(v8_str("escape value"), values[i]);
20817 } else { 20707 } else {
20818 CHECK(values[i].IsEmpty()); 20708 CHECK(values[i].IsEmpty());
20819 } 20709 }
20820 } 20710 }
20821 } 20711 }
OLDNEW
« no previous file with comments | « src/v8threads.cc ('k') | test/cctest/test-threads.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698