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 19468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19479 " return fib(n-1) + fib(n-2);" | 19479 " return fib(n-1) + fib(n-2);" |
19480 "}" | 19480 "}" |
19481 "fib(%d)", limit); | 19481 "fib(%d)", limit); |
19482 Local<Value> value = CompileRun(code.start()); | 19482 Local<Value> value = CompileRun(code.start()); |
19483 CHECK(value->IsNumber()); | 19483 CHECK(value->IsNumber()); |
19484 return static_cast<int>(value->NumberValue()); | 19484 return static_cast<int>(value->NumberValue()); |
19485 } | 19485 } |
19486 | 19486 |
19487 class IsolateThread : public v8::base::Thread { | 19487 class IsolateThread : public v8::base::Thread { |
19488 public: | 19488 public: |
19489 IsolateThread(v8::Isolate* isolate, int fib_limit) | 19489 explicit IsolateThread(int fib_limit) |
19490 : Thread(Options("IsolateThread")), | 19490 : Thread(Options("IsolateThread")), fib_limit_(fib_limit), result_(0) {} |
19491 isolate_(isolate), | |
19492 fib_limit_(fib_limit), | |
19493 result_(0) {} | |
19494 | 19491 |
19495 void Run() { | 19492 void Run() { |
19496 result_ = CalcFibonacci(isolate_, fib_limit_); | 19493 v8::Isolate* isolate = v8::Isolate::New(); |
| 19494 result_ = CalcFibonacci(isolate, fib_limit_); |
| 19495 isolate->Dispose(); |
19497 } | 19496 } |
19498 | 19497 |
19499 int result() { return result_; } | 19498 int result() { return result_; } |
19500 | 19499 |
19501 private: | 19500 private: |
19502 v8::Isolate* isolate_; | |
19503 int fib_limit_; | 19501 int fib_limit_; |
19504 int result_; | 19502 int result_; |
19505 }; | 19503 }; |
19506 | 19504 |
19507 | 19505 |
19508 TEST(MultipleIsolatesOnIndividualThreads) { | 19506 TEST(MultipleIsolatesOnIndividualThreads) { |
19509 v8::Isolate* isolate1 = v8::Isolate::New(); | 19507 IsolateThread thread1(21); |
19510 v8::Isolate* isolate2 = v8::Isolate::New(); | 19508 IsolateThread thread2(12); |
19511 | |
19512 IsolateThread thread1(isolate1, 21); | |
19513 IsolateThread thread2(isolate2, 12); | |
19514 | 19509 |
19515 // Compute some fibonacci numbers on 3 threads in 3 isolates. | 19510 // Compute some fibonacci numbers on 3 threads in 3 isolates. |
19516 thread1.Start(); | 19511 thread1.Start(); |
19517 thread2.Start(); | 19512 thread2.Start(); |
19518 | 19513 |
19519 int result1 = CalcFibonacci(CcTest::isolate(), 21); | 19514 int result1 = CalcFibonacci(CcTest::isolate(), 21); |
19520 int result2 = CalcFibonacci(CcTest::isolate(), 12); | 19515 int result2 = CalcFibonacci(CcTest::isolate(), 12); |
19521 | 19516 |
19522 thread1.Join(); | 19517 thread1.Join(); |
19523 thread2.Join(); | 19518 thread2.Join(); |
19524 | 19519 |
19525 // Compare results. The actual fibonacci numbers for 12 and 21 are taken | 19520 // Compare results. The actual fibonacci numbers for 12 and 21 are taken |
19526 // (I'm lazy!) from http://en.wikipedia.org/wiki/Fibonacci_number | 19521 // (I'm lazy!) from http://en.wikipedia.org/wiki/Fibonacci_number |
19527 CHECK_EQ(result1, 10946); | 19522 CHECK_EQ(result1, 10946); |
19528 CHECK_EQ(result2, 144); | 19523 CHECK_EQ(result2, 144); |
19529 CHECK_EQ(result1, thread1.result()); | 19524 CHECK_EQ(result1, thread1.result()); |
19530 CHECK_EQ(result2, thread2.result()); | 19525 CHECK_EQ(result2, thread2.result()); |
19531 | |
19532 isolate1->Dispose(); | |
19533 isolate2->Dispose(); | |
19534 } | 19526 } |
19535 | 19527 |
19536 | 19528 |
19537 TEST(IsolateDifferentContexts) { | 19529 TEST(IsolateDifferentContexts) { |
19538 v8::Isolate* isolate = v8::Isolate::New(); | 19530 v8::Isolate* isolate = v8::Isolate::New(); |
19539 Local<v8::Context> context; | 19531 Local<v8::Context> context; |
19540 { | 19532 { |
19541 v8::Isolate::Scope isolate_scope(isolate); | 19533 v8::Isolate::Scope isolate_scope(isolate); |
19542 v8::HandleScope handle_scope(isolate); | 19534 v8::HandleScope handle_scope(isolate); |
19543 context = v8::Context::New(isolate); | 19535 context = v8::Context::New(isolate); |
(...skipping 3775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
23319 // TestSourceStream::GetMoreData won't block, so it's OK to just run the | 23311 // TestSourceStream::GetMoreData won't block, so it's OK to just run the |
23320 // task here in the main thread. | 23312 // task here in the main thread. |
23321 task->Run(); | 23313 task->Run(); |
23322 delete task; | 23314 delete task; |
23323 | 23315 |
23324 const v8::ScriptCompiler::CachedData* cached_data = source.GetCachedData(); | 23316 const v8::ScriptCompiler::CachedData* cached_data = source.GetCachedData(); |
23325 CHECK(cached_data != NULL); | 23317 CHECK(cached_data != NULL); |
23326 CHECK(cached_data->data != NULL); | 23318 CHECK(cached_data->data != NULL); |
23327 CHECK_GT(cached_data->length, 0); | 23319 CHECK_GT(cached_data->length, 0); |
23328 } | 23320 } |
OLD | NEW |