v8/test/js-perf-test/AsyncAwait/baseline-babel-es2017.js
tzik 07011cc4f0 Replace %RunMicrotasks with %PerformMicrotaskCheckpoint
This replaces Runtime_RunMicrotasks with Runtime_PerformMicrotaskCheckpoint.

RunMicrotasks forcibly runs Microtasks even when the microtasks are suppressed,
and may causes nested Microtasks in a problematic way. E.g. that confuses
v8::MicrotasksScope::IsRunningMicrotasks() and GetEnteredOrMicrotaskContext().

OTOH, PerformMicrotaskCheckpoint() doesn't run cause the failure as it
respects the microtask suppressions.

As all existing tests don't call RunMicrotasks() in the suppressed situation
(like Promise.resolve().then(()=>{%RunMicrotasks();})), this change should
not affect to these tests.

Change-Id: Ib043a0cc8e482e022d375084d65ea98a6f54ef3d
Reviewed-on: https://chromium-review.googlesource.com/c/1360095
Reviewed-by: Yang Guo <yangguo@chromium.org>
Commit-Queue: Taiju Tsuiki <tzik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#58068}
2018-12-06 11:10:18 +00:00

170 lines
3.0 KiB
JavaScript

// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
new BenchmarkSuite('BaselineES2017', [1000], [
new Benchmark('Basic', false, false, 0, Basic, Setup),
]);
function _asyncToGenerator(fn) {
return function () {
var gen = fn.apply(this, arguments);
return new Promise(function (resolve, reject) {
function step(key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
return Promise.resolve(value)
.then(function (value) {
step("next", value);
}, function (err) {
step("throw", err);
});
}
}
return step("next");
});
};
}
var a, b, c, d, e, f, g, h, i, j, x;
function Setup() {
x = Promise.resolve();
j = (() => {
var _ref = _asyncToGenerator(function* () {
return x;
});
function j() {
return _ref.apply(this, arguments);
}
return j;
})();
i = (() => {
var _ref2 = _asyncToGenerator(function* () {
yield j();
yield j();
yield j();
yield j();
yield j();
yield j();
yield j();
yield j();
yield j();
return j();
});
function i() {
return _ref2.apply(this, arguments);
}
return i;
})();
h = (() => {
var _ref3 = _asyncToGenerator(function* () {
return i();
});
function h() {
return _ref3.apply(this, arguments);
}
return h;
})();
g = (() => {
var _ref4 = _asyncToGenerator(function* () {
return h();
});
function g() {
return _ref4.apply(this, arguments);
}
return g;
})();
f = (() => {
var _ref5 = _asyncToGenerator(function* () {
return g();
});
function f() {
return _ref5.apply(this, arguments);
}
return f;
})();
e = (() => {
var _ref6 = _asyncToGenerator(function* () {
return f();
});
function e() {
return _ref6.apply(this, arguments);
}
return e;
})();
d = (() => {
var _ref7 = _asyncToGenerator(function* () {
return e();
});
function d() {
return _ref7.apply(this, arguments);
}
return d;
})();
c = (() => {
var _ref8 = _asyncToGenerator(function* () {
return d();
});
function c() {
return _ref8.apply(this, arguments);
}
return c;
})();
b = (() => {
var _ref9 = _asyncToGenerator(function* () {
return c();
});
function b() {
return _ref9.apply(this, arguments);
}
return b;
})();
a = (() => {
var _ref10 = _asyncToGenerator(function* () {
return b();
});
function a() {
return _ref10.apply(this, arguments);
}
return a;
})();
%PerformMicrotaskCheckpoint();
}
function Basic() {
a();
%PerformMicrotaskCheckpoint();
}