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 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 LocalContext env; | 402 LocalContext env; |
403 v8::HandleScope scope(env->GetIsolate()); | 403 v8::HandleScope scope(env->GetIsolate()); |
404 const char* source = "1 + 2 + 3"; | 404 const char* source = "1 + 2 + 3"; |
405 Local<Script> script = v8_compile(source); | 405 Local<Script> script = v8_compile(source); |
406 CHECK_EQ(6, script->Run()->Int32Value()); | 406 CHECK_EQ(6, script->Run()->Int32Value()); |
407 } | 407 } |
408 | 408 |
409 | 409 |
410 class TestResource: public String::ExternalStringResource { | 410 class TestResource: public String::ExternalStringResource { |
411 public: | 411 public: |
412 TestResource(uint16_t* data, int* counter = NULL, bool owning_data = true) | 412 explicit TestResource(uint16_t* data, int* counter = NULL, |
| 413 bool owning_data = true) |
413 : data_(data), length_(0), counter_(counter), owning_data_(owning_data) { | 414 : data_(data), length_(0), counter_(counter), owning_data_(owning_data) { |
414 while (data[length_]) ++length_; | 415 while (data[length_]) ++length_; |
415 } | 416 } |
416 | 417 |
417 ~TestResource() { | 418 ~TestResource() { |
418 if (owning_data_) i::DeleteArray(data_); | 419 if (owning_data_) i::DeleteArray(data_); |
419 if (counter_ != NULL) ++*counter_; | 420 if (counter_ != NULL) ++*counter_; |
420 } | 421 } |
421 | 422 |
422 const uint16_t* data() const { | 423 const uint16_t* data() const { |
423 return data_; | 424 return data_; |
424 } | 425 } |
425 | 426 |
426 size_t length() const { | 427 size_t length() const { |
427 return length_; | 428 return length_; |
428 } | 429 } |
429 | 430 |
430 private: | 431 private: |
431 uint16_t* data_; | 432 uint16_t* data_; |
432 size_t length_; | 433 size_t length_; |
433 int* counter_; | 434 int* counter_; |
434 bool owning_data_; | 435 bool owning_data_; |
435 }; | 436 }; |
436 | 437 |
437 | 438 |
438 class TestAsciiResource: public String::ExternalAsciiStringResource { | 439 class TestAsciiResource: public String::ExternalAsciiStringResource { |
439 public: | 440 public: |
440 TestAsciiResource(const char* data, int* counter = NULL, size_t offset = 0) | 441 explicit TestAsciiResource(const char* data, int* counter = NULL, |
| 442 size_t offset = 0) |
441 : orig_data_(data), | 443 : orig_data_(data), |
442 data_(data + offset), | 444 data_(data + offset), |
443 length_(strlen(data) - offset), | 445 length_(strlen(data) - offset), |
444 counter_(counter) { } | 446 counter_(counter) {} |
445 | 447 |
446 ~TestAsciiResource() { | 448 ~TestAsciiResource() { |
447 i::DeleteArray(orig_data_); | 449 i::DeleteArray(orig_data_); |
448 if (counter_ != NULL) ++*counter_; | 450 if (counter_ != NULL) ++*counter_; |
449 } | 451 } |
450 | 452 |
451 const char* data() const { | 453 const char* data() const { |
452 return data_; | 454 return data_; |
453 } | 455 } |
454 | 456 |
(...skipping 14696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15151 struct RegExpInterruptionData { | 15153 struct RegExpInterruptionData { |
15152 int loop_count; | 15154 int loop_count; |
15153 UC16VectorResource* string_resource; | 15155 UC16VectorResource* string_resource; |
15154 v8::Persistent<v8::String> string; | 15156 v8::Persistent<v8::String> string; |
15155 } regexp_interruption_data; | 15157 } regexp_interruption_data; |
15156 | 15158 |
15157 | 15159 |
15158 class RegExpInterruptionThread : public v8::base::Thread { | 15160 class RegExpInterruptionThread : public v8::base::Thread { |
15159 public: | 15161 public: |
15160 explicit RegExpInterruptionThread(v8::Isolate* isolate) | 15162 explicit RegExpInterruptionThread(v8::Isolate* isolate) |
15161 : Thread("TimeoutThread"), isolate_(isolate) {} | 15163 : Thread(Options("TimeoutThread")), isolate_(isolate) {} |
15162 | 15164 |
15163 virtual void Run() { | 15165 virtual void Run() { |
15164 for (regexp_interruption_data.loop_count = 0; | 15166 for (regexp_interruption_data.loop_count = 0; |
15165 regexp_interruption_data.loop_count < 7; | 15167 regexp_interruption_data.loop_count < 7; |
15166 regexp_interruption_data.loop_count++) { | 15168 regexp_interruption_data.loop_count++) { |
15167 v8::base::OS::Sleep(50); // Wait a bit before requesting GC. | 15169 v8::base::OS::Sleep(50); // Wait a bit before requesting GC. |
15168 reinterpret_cast<i::Isolate*>(isolate_)->stack_guard()->RequestGC(); | 15170 reinterpret_cast<i::Isolate*>(isolate_)->stack_guard()->RequestGC(); |
15169 } | 15171 } |
15170 v8::base::OS::Sleep(50); // Wait a bit before terminating. | 15172 v8::base::OS::Sleep(50); // Wait a bit before terminating. |
15171 v8::V8::TerminateExecution(isolate_); | 15173 v8::V8::TerminateExecution(isolate_); |
(...skipping 4187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19359 "}" | 19361 "}" |
19360 "fib(%d)", limit); | 19362 "fib(%d)", limit); |
19361 Local<Value> value = CompileRun(code.start()); | 19363 Local<Value> value = CompileRun(code.start()); |
19362 CHECK(value->IsNumber()); | 19364 CHECK(value->IsNumber()); |
19363 return static_cast<int>(value->NumberValue()); | 19365 return static_cast<int>(value->NumberValue()); |
19364 } | 19366 } |
19365 | 19367 |
19366 class IsolateThread : public v8::base::Thread { | 19368 class IsolateThread : public v8::base::Thread { |
19367 public: | 19369 public: |
19368 IsolateThread(v8::Isolate* isolate, int fib_limit) | 19370 IsolateThread(v8::Isolate* isolate, int fib_limit) |
19369 : Thread("IsolateThread"), | 19371 : Thread(Options("IsolateThread")), |
19370 isolate_(isolate), | 19372 isolate_(isolate), |
19371 fib_limit_(fib_limit), | 19373 fib_limit_(fib_limit), |
19372 result_(0) { } | 19374 result_(0) {} |
19373 | 19375 |
19374 void Run() { | 19376 void Run() { |
19375 result_ = CalcFibonacci(isolate_, fib_limit_); | 19377 result_ = CalcFibonacci(isolate_, fib_limit_); |
19376 } | 19378 } |
19377 | 19379 |
19378 int result() { return result_; } | 19380 int result() { return result_; } |
19379 | 19381 |
19380 private: | 19382 private: |
19381 v8::Isolate* isolate_; | 19383 v8::Isolate* isolate_; |
19382 int fib_limit_; | 19384 int fib_limit_; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19441 public: | 19443 public: |
19442 enum TestCase { | 19444 enum TestCase { |
19443 SetResourceConstraints, | 19445 SetResourceConstraints, |
19444 SetFatalHandler, | 19446 SetFatalHandler, |
19445 SetCounterFunction, | 19447 SetCounterFunction, |
19446 SetCreateHistogramFunction, | 19448 SetCreateHistogramFunction, |
19447 SetAddHistogramSampleFunction | 19449 SetAddHistogramSampleFunction |
19448 }; | 19450 }; |
19449 | 19451 |
19450 explicit InitDefaultIsolateThread(TestCase testCase) | 19452 explicit InitDefaultIsolateThread(TestCase testCase) |
19451 : Thread("InitDefaultIsolateThread"), | 19453 : Thread(Options("InitDefaultIsolateThread")), |
19452 testCase_(testCase), | 19454 testCase_(testCase), |
19453 result_(false) { } | 19455 result_(false) {} |
19454 | 19456 |
19455 void Run() { | 19457 void Run() { |
19456 v8::Isolate* isolate = v8::Isolate::New(); | 19458 v8::Isolate* isolate = v8::Isolate::New(); |
19457 isolate->Enter(); | 19459 isolate->Enter(); |
19458 switch (testCase_) { | 19460 switch (testCase_) { |
19459 case SetResourceConstraints: { | 19461 case SetResourceConstraints: { |
19460 v8::ResourceConstraints constraints; | 19462 v8::ResourceConstraints constraints; |
19461 constraints.set_max_semi_space_size(1); | 19463 constraints.set_max_semi_space_size(1); |
19462 constraints.set_max_old_space_size(4); | 19464 constraints.set_max_old_space_size(4); |
19463 v8::SetResourceConstraints(CcTest::isolate(), &constraints); | 19465 v8::SetResourceConstraints(CcTest::isolate(), &constraints); |
(...skipping 2037 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21501 sem_.Wait(); | 21503 sem_.Wait(); |
21502 CHECK_EQ(kExpectedValue, sem_value_); | 21504 CHECK_EQ(kExpectedValue, sem_value_); |
21503 } | 21505 } |
21504 | 21506 |
21505 private: | 21507 private: |
21506 static const int kExpectedValue = 1; | 21508 static const int kExpectedValue = 1; |
21507 | 21509 |
21508 class InterruptThread : public v8::base::Thread { | 21510 class InterruptThread : public v8::base::Thread { |
21509 public: | 21511 public: |
21510 explicit InterruptThread(ThreadInterruptTest* test) | 21512 explicit InterruptThread(ThreadInterruptTest* test) |
21511 : Thread("InterruptThread"), test_(test) {} | 21513 : Thread(Options("InterruptThread")), test_(test) {} |
21512 | 21514 |
21513 virtual void Run() { | 21515 virtual void Run() { |
21514 struct sigaction action; | 21516 struct sigaction action; |
21515 | 21517 |
21516 // Ensure that we'll enter waiting condition | 21518 // Ensure that we'll enter waiting condition |
21517 v8::base::OS::Sleep(100); | 21519 v8::base::OS::Sleep(100); |
21518 | 21520 |
21519 // Setup signal handler | 21521 // Setup signal handler |
21520 memset(&action, 0, sizeof(action)); | 21522 memset(&action, 0, sizeof(action)); |
21521 action.sa_handler = SignalHandler; | 21523 action.sa_handler = SignalHandler; |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21909 RequestInterruptTestBaseWithSimpleInterrupt() : i_thread(this) { } | 21911 RequestInterruptTestBaseWithSimpleInterrupt() : i_thread(this) { } |
21910 | 21912 |
21911 virtual void StartInterruptThread() { | 21913 virtual void StartInterruptThread() { |
21912 i_thread.Start(); | 21914 i_thread.Start(); |
21913 } | 21915 } |
21914 | 21916 |
21915 private: | 21917 private: |
21916 class InterruptThread : public v8::base::Thread { | 21918 class InterruptThread : public v8::base::Thread { |
21917 public: | 21919 public: |
21918 explicit InterruptThread(RequestInterruptTestBase* test) | 21920 explicit InterruptThread(RequestInterruptTestBase* test) |
21919 : Thread("RequestInterruptTest"), test_(test) {} | 21921 : Thread(Options("RequestInterruptTest")), test_(test) {} |
21920 | 21922 |
21921 virtual void Run() { | 21923 virtual void Run() { |
21922 test_->sem_.Wait(); | 21924 test_->sem_.Wait(); |
21923 test_->isolate_->RequestInterrupt(&OnInterrupt, test_); | 21925 test_->isolate_->RequestInterrupt(&OnInterrupt, test_); |
21924 } | 21926 } |
21925 | 21927 |
21926 static void OnInterrupt(v8::Isolate* isolate, void* data) { | 21928 static void OnInterrupt(v8::Isolate* isolate, void* data) { |
21927 reinterpret_cast<RequestInterruptTestBase*>(data)-> | 21929 reinterpret_cast<RequestInterruptTestBase*>(data)-> |
21928 should_continue_ = false; | 21930 should_continue_ = false; |
21929 } | 21931 } |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22129 isolate_, ShouldContinueCallback, v8::External::New(isolate_, this)); | 22131 isolate_, ShouldContinueCallback, v8::External::New(isolate_, this)); |
22130 env_->Global()->Set(v8_str("ShouldContinue"), func); | 22132 env_->Global()->Set(v8_str("ShouldContinue"), func); |
22131 | 22133 |
22132 CompileRun("while (ShouldContinue()) { }"); | 22134 CompileRun("while (ShouldContinue()) { }"); |
22133 } | 22135 } |
22134 | 22136 |
22135 private: | 22137 private: |
22136 class InterruptThread : public v8::base::Thread { | 22138 class InterruptThread : public v8::base::Thread { |
22137 public: | 22139 public: |
22138 explicit InterruptThread(ClearInterruptFromAnotherThread* test) | 22140 explicit InterruptThread(ClearInterruptFromAnotherThread* test) |
22139 : Thread("RequestInterruptTest"), test_(test) {} | 22141 : Thread(Options("RequestInterruptTest")), test_(test) {} |
22140 | 22142 |
22141 virtual void Run() { | 22143 virtual void Run() { |
22142 test_->sem_.Wait(); | 22144 test_->sem_.Wait(); |
22143 test_->isolate_->RequestInterrupt(&OnInterrupt, test_); | 22145 test_->isolate_->RequestInterrupt(&OnInterrupt, test_); |
22144 test_->sem_.Wait(); | 22146 test_->sem_.Wait(); |
22145 test_->isolate_->ClearInterrupt(); | 22147 test_->isolate_->ClearInterrupt(); |
22146 test_->sem2_.Signal(); | 22148 test_->sem2_.Signal(); |
22147 } | 22149 } |
22148 | 22150 |
22149 static void OnInterrupt(v8::Isolate* isolate, void* data) { | 22151 static void OnInterrupt(v8::Isolate* isolate, void* data) { |
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22861 desc = x->GetOwnPropertyDescriptor(v8_str("p1")); | 22863 desc = x->GetOwnPropertyDescriptor(v8_str("p1")); |
22862 Local<Function> set = | 22864 Local<Function> set = |
22863 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("set"))); | 22865 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("set"))); |
22864 Local<Function> get = | 22866 Local<Function> get = |
22865 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("get"))); | 22867 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("get"))); |
22866 CHECK_EQ(v8_num(13), get->Call(x, 0, NULL)); | 22868 CHECK_EQ(v8_num(13), get->Call(x, 0, NULL)); |
22867 Handle<Value> args[] = { v8_num(14) }; | 22869 Handle<Value> args[] = { v8_num(14) }; |
22868 set->Call(x, 1, args); | 22870 set->Call(x, 1, args); |
22869 CHECK_EQ(v8_num(14), get->Call(x, 0, NULL)); | 22871 CHECK_EQ(v8_num(14), get->Call(x, 0, NULL)); |
22870 } | 22872 } |
OLD | NEW |