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

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

Issue 263933002: Introduce a microtask suppression scope and move microtask methods to isolate (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 7 months 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/v8.cc ('k') | test/cctest/test-microtask-delivery.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 20699 matching lines...) Expand 10 before | Expand all | Expand 10 after
20710 TEST(EnqueueMicrotask) { 20710 TEST(EnqueueMicrotask) {
20711 LocalContext env; 20711 LocalContext env;
20712 v8::HandleScope scope(env->GetIsolate()); 20712 v8::HandleScope scope(env->GetIsolate());
20713 CompileRun( 20713 CompileRun(
20714 "var ext1Calls = 0;" 20714 "var ext1Calls = 0;"
20715 "var ext2Calls = 0;"); 20715 "var ext2Calls = 0;");
20716 CompileRun("1+1;"); 20716 CompileRun("1+1;");
20717 CHECK_EQ(0, CompileRun("ext1Calls")->Int32Value()); 20717 CHECK_EQ(0, CompileRun("ext1Calls")->Int32Value());
20718 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); 20718 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value());
20719 20719
20720 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20720 env->GetIsolate()->EnqueueMicrotask(
20721 Function::New(env->GetIsolate(), MicrotaskOne)); 20721 Function::New(env->GetIsolate(), MicrotaskOne));
20722 CompileRun("1+1;"); 20722 CompileRun("1+1;");
20723 CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value()); 20723 CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value());
20724 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); 20724 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value());
20725 20725
20726 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20726 env->GetIsolate()->EnqueueMicrotask(
20727 Function::New(env->GetIsolate(), MicrotaskOne)); 20727 Function::New(env->GetIsolate(), MicrotaskOne));
20728 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20728 env->GetIsolate()->EnqueueMicrotask(
20729 Function::New(env->GetIsolate(), MicrotaskTwo)); 20729 Function::New(env->GetIsolate(), MicrotaskTwo));
20730 CompileRun("1+1;"); 20730 CompileRun("1+1;");
20731 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); 20731 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20732 CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value()); 20732 CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value());
20733 20733
20734 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20734 env->GetIsolate()->EnqueueMicrotask(
20735 Function::New(env->GetIsolate(), MicrotaskTwo)); 20735 Function::New(env->GetIsolate(), MicrotaskTwo));
20736 CompileRun("1+1;"); 20736 CompileRun("1+1;");
20737 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); 20737 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20738 CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value()); 20738 CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value());
20739 20739
20740 CompileRun("1+1;"); 20740 CompileRun("1+1;");
20741 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); 20741 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20742 CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value()); 20742 CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value());
20743 } 20743 }
20744 20744
20745 20745
20746 TEST(SetAutorunMicrotasks) { 20746 TEST(SetAutorunMicrotasks) {
20747 LocalContext env; 20747 LocalContext env;
20748 v8::HandleScope scope(env->GetIsolate()); 20748 v8::HandleScope scope(env->GetIsolate());
20749 CompileRun( 20749 CompileRun(
20750 "var ext1Calls = 0;" 20750 "var ext1Calls = 0;"
20751 "var ext2Calls = 0;"); 20751 "var ext2Calls = 0;");
20752 CompileRun("1+1;"); 20752 CompileRun("1+1;");
20753 CHECK_EQ(0, CompileRun("ext1Calls")->Int32Value()); 20753 CHECK_EQ(0, CompileRun("ext1Calls")->Int32Value());
20754 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); 20754 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value());
20755 20755
20756 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20756 env->GetIsolate()->EnqueueMicrotask(
20757 Function::New(env->GetIsolate(), MicrotaskOne)); 20757 Function::New(env->GetIsolate(), MicrotaskOne));
20758 CompileRun("1+1;"); 20758 CompileRun("1+1;");
20759 CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value()); 20759 CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value());
20760 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); 20760 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value());
20761 20761
20762 V8::SetAutorunMicrotasks(env->GetIsolate(), false); 20762 env->GetIsolate()->SetAutorunMicrotasks(false);
20763 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20763 env->GetIsolate()->EnqueueMicrotask(
20764 Function::New(env->GetIsolate(), MicrotaskOne)); 20764 Function::New(env->GetIsolate(), MicrotaskOne));
20765 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20765 env->GetIsolate()->EnqueueMicrotask(
20766 Function::New(env->GetIsolate(), MicrotaskTwo)); 20766 Function::New(env->GetIsolate(), MicrotaskTwo));
20767 CompileRun("1+1;"); 20767 CompileRun("1+1;");
20768 CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value()); 20768 CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value());
20769 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); 20769 CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value());
20770 20770
20771 V8::RunMicrotasks(env->GetIsolate()); 20771 env->GetIsolate()->RunMicrotasks();
20772 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); 20772 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20773 CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value()); 20773 CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value());
20774 20774
20775 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20775 env->GetIsolate()->EnqueueMicrotask(
20776 Function::New(env->GetIsolate(), MicrotaskTwo)); 20776 Function::New(env->GetIsolate(), MicrotaskTwo));
20777 CompileRun("1+1;"); 20777 CompileRun("1+1;");
20778 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); 20778 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20779 CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value()); 20779 CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value());
20780 20780
20781 V8::RunMicrotasks(env->GetIsolate()); 20781 env->GetIsolate()->RunMicrotasks();
20782 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); 20782 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20783 CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value()); 20783 CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value());
20784 20784
20785 V8::SetAutorunMicrotasks(env->GetIsolate(), true); 20785 env->GetIsolate()->SetAutorunMicrotasks(true);
20786 v8::V8::EnqueueMicrotask(env->GetIsolate(), 20786 env->GetIsolate()->EnqueueMicrotask(
20787 Function::New(env->GetIsolate(), MicrotaskTwo)); 20787 Function::New(env->GetIsolate(), MicrotaskTwo));
20788 CompileRun("1+1;"); 20788 CompileRun("1+1;");
20789 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); 20789 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20790 CHECK_EQ(3, CompileRun("ext2Calls")->Int32Value()); 20790 CHECK_EQ(3, CompileRun("ext2Calls")->Int32Value());
20791
20792 env->GetIsolate()->EnqueueMicrotask(
20793 Function::New(env->GetIsolate(), MicrotaskTwo));
20794 {
20795 v8::Isolate::SuppressMicrotaskExecutionScope scope(env->GetIsolate());
20796 CompileRun("1+1;");
20797 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20798 CHECK_EQ(3, CompileRun("ext2Calls")->Int32Value());
20799 }
20800
20801 CompileRun("1+1;");
20802 CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value());
20803 CHECK_EQ(4, CompileRun("ext2Calls")->Int32Value());
20791 } 20804 }
20792 20805
20793 20806
20794 static int probes_counter = 0; 20807 static int probes_counter = 0;
20795 static int misses_counter = 0; 20808 static int misses_counter = 0;
20796 static int updates_counter = 0; 20809 static int updates_counter = 0;
20797 20810
20798 20811
20799 static int* LookupCounter(const char* name) { 20812 static int* LookupCounter(const char* name) {
20800 if (strcmp(name, "c:V8.MegamorphicStubCacheProbes") == 0) { 20813 if (strcmp(name, "c:V8.MegamorphicStubCacheProbes") == 0) {
(...skipping 1534 matching lines...) Expand 10 before | Expand all | Expand 10 after
22335 CompileRun( 22348 CompileRun(
22336 "var x1 = 0;\n" 22349 "var x1 = 0;\n"
22337 "var x2 = 0;\n" 22350 "var x2 = 0;\n"
22338 "function f1(x) { x1 = x; return x+1 };\n" 22351 "function f1(x) { x1 = x; return x+1 };\n"
22339 "function f2(x) { x2 = x; return x+1 };\n"); 22352 "function f2(x) { x2 = x; return x+1 };\n");
22340 Handle<Function> f1 = Handle<Function>::Cast(global->Get(v8_str("f1"))); 22353 Handle<Function> f1 = Handle<Function>::Cast(global->Get(v8_str("f1")));
22341 Handle<Function> f2 = Handle<Function>::Cast(global->Get(v8_str("f2"))); 22354 Handle<Function> f2 = Handle<Function>::Cast(global->Get(v8_str("f2")));
22342 22355
22343 p->Chain(f1); 22356 p->Chain(f1);
22344 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value()); 22357 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value());
22345 V8::RunMicrotasks(isolate); 22358 isolate->RunMicrotasks();
22346 CHECK_EQ(1, global->Get(v8_str("x1"))->Int32Value()); 22359 CHECK_EQ(1, global->Get(v8_str("x1"))->Int32Value());
22347 22360
22348 p->Catch(f2); 22361 p->Catch(f2);
22349 V8::RunMicrotasks(isolate); 22362 isolate->RunMicrotasks();
22350 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value()); 22363 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value());
22351 22364
22352 r->Catch(f2); 22365 r->Catch(f2);
22353 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value()); 22366 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value());
22354 V8::RunMicrotasks(isolate); 22367 isolate->RunMicrotasks();
22355 CHECK_EQ(2, global->Get(v8_str("x2"))->Int32Value()); 22368 CHECK_EQ(2, global->Get(v8_str("x2"))->Int32Value());
22356 22369
22357 r->Chain(f1); 22370 r->Chain(f1);
22358 V8::RunMicrotasks(isolate); 22371 isolate->RunMicrotasks();
22359 CHECK_EQ(1, global->Get(v8_str("x1"))->Int32Value()); 22372 CHECK_EQ(1, global->Get(v8_str("x1"))->Int32Value());
22360 22373
22361 // Chaining pending promises. 22374 // Chaining pending promises.
22362 CompileRun("x1 = x2 = 0;"); 22375 CompileRun("x1 = x2 = 0;");
22363 pr = v8::Promise::Resolver::New(isolate); 22376 pr = v8::Promise::Resolver::New(isolate);
22364 rr = v8::Promise::Resolver::New(isolate); 22377 rr = v8::Promise::Resolver::New(isolate);
22365 22378
22366 pr->GetPromise()->Chain(f1); 22379 pr->GetPromise()->Chain(f1);
22367 rr->GetPromise()->Catch(f2); 22380 rr->GetPromise()->Catch(f2);
22368 V8::RunMicrotasks(isolate); 22381 isolate->RunMicrotasks();
22369 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value()); 22382 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value());
22370 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value()); 22383 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value());
22371 22384
22372 pr->Resolve(v8::Integer::New(isolate, 1)); 22385 pr->Resolve(v8::Integer::New(isolate, 1));
22373 rr->Reject(v8::Integer::New(isolate, 2)); 22386 rr->Reject(v8::Integer::New(isolate, 2));
22374 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value()); 22387 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value());
22375 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value()); 22388 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value());
22376 22389
22377 V8::RunMicrotasks(isolate); 22390 isolate->RunMicrotasks();
22378 CHECK_EQ(1, global->Get(v8_str("x1"))->Int32Value()); 22391 CHECK_EQ(1, global->Get(v8_str("x1"))->Int32Value());
22379 CHECK_EQ(2, global->Get(v8_str("x2"))->Int32Value()); 22392 CHECK_EQ(2, global->Get(v8_str("x2"))->Int32Value());
22380 22393
22381 // Multi-chaining. 22394 // Multi-chaining.
22382 CompileRun("x1 = x2 = 0;"); 22395 CompileRun("x1 = x2 = 0;");
22383 pr = v8::Promise::Resolver::New(isolate); 22396 pr = v8::Promise::Resolver::New(isolate);
22384 pr->GetPromise()->Chain(f1)->Chain(f2); 22397 pr->GetPromise()->Chain(f1)->Chain(f2);
22385 pr->Resolve(v8::Integer::New(isolate, 3)); 22398 pr->Resolve(v8::Integer::New(isolate, 3));
22386 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value()); 22399 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value());
22387 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value()); 22400 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value());
22388 V8::RunMicrotasks(isolate); 22401 isolate->RunMicrotasks();
22389 CHECK_EQ(3, global->Get(v8_str("x1"))->Int32Value()); 22402 CHECK_EQ(3, global->Get(v8_str("x1"))->Int32Value());
22390 CHECK_EQ(4, global->Get(v8_str("x2"))->Int32Value()); 22403 CHECK_EQ(4, global->Get(v8_str("x2"))->Int32Value());
22391 22404
22392 CompileRun("x1 = x2 = 0;"); 22405 CompileRun("x1 = x2 = 0;");
22393 rr = v8::Promise::Resolver::New(isolate); 22406 rr = v8::Promise::Resolver::New(isolate);
22394 rr->GetPromise()->Catch(f1)->Chain(f2); 22407 rr->GetPromise()->Catch(f1)->Chain(f2);
22395 rr->Reject(v8::Integer::New(isolate, 3)); 22408 rr->Reject(v8::Integer::New(isolate, 3));
22396 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value()); 22409 CHECK_EQ(0, global->Get(v8_str("x1"))->Int32Value());
22397 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value()); 22410 CHECK_EQ(0, global->Get(v8_str("x2"))->Int32Value());
22398 V8::RunMicrotasks(isolate); 22411 isolate->RunMicrotasks();
22399 CHECK_EQ(3, global->Get(v8_str("x1"))->Int32Value()); 22412 CHECK_EQ(3, global->Get(v8_str("x1"))->Int32Value());
22400 CHECK_EQ(4, global->Get(v8_str("x2"))->Int32Value()); 22413 CHECK_EQ(4, global->Get(v8_str("x2"))->Int32Value());
22401 } 22414 }
22402 22415
22403 22416
22404 TEST(DisallowJavascriptExecutionScope) { 22417 TEST(DisallowJavascriptExecutionScope) {
22405 LocalContext context; 22418 LocalContext context;
22406 v8::Isolate* isolate = context->GetIsolate(); 22419 v8::Isolate* isolate = context->GetIsolate();
22407 v8::HandleScope scope(isolate); 22420 v8::HandleScope scope(isolate);
22408 v8::Isolate::DisallowJavascriptExecutionScope no_js( 22421 v8::Isolate::DisallowJavascriptExecutionScope no_js(
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
22486 v8::internal::FLAG_stack_size = 150; 22499 v8::internal::FLAG_stack_size = 150;
22487 LocalContext current; 22500 LocalContext current;
22488 v8::Isolate* isolate = current->GetIsolate(); 22501 v8::Isolate* isolate = current->GetIsolate();
22489 v8::HandleScope scope(isolate); 22502 v8::HandleScope scope(isolate);
22490 V8::SetCaptureStackTraceForUncaughtExceptions( 22503 V8::SetCaptureStackTraceForUncaughtExceptions(
22491 true, 10, v8::StackTrace::kDetailed); 22504 true, 10, v8::StackTrace::kDetailed);
22492 v8::TryCatch try_catch; 22505 v8::TryCatch try_catch;
22493 CompileRun("(function f(x) { f(x+1); })(0)"); 22506 CompileRun("(function f(x) { f(x+1); })(0)");
22494 CHECK(try_catch.HasCaught()); 22507 CHECK(try_catch.HasCaught());
22495 } 22508 }
OLDNEW
« no previous file with comments | « src/v8.cc ('k') | test/cctest/test-microtask-delivery.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698