07011cc4f0
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}
170 lines
3.0 KiB
JavaScript
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();
|
|
}
|