From 86e03b75018ec6dd9e17b14d680aac2b06b250fe Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Wed, 18 Feb 2015 09:34:10 +0000 Subject: [PATCH] add function to measure event loop run times --- node_modules/c9/blocked.js | 16 ++++++++ node_modules/c9/blocked_test.js | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 node_modules/c9/blocked.js create mode 100644 node_modules/c9/blocked_test.js diff --git a/node_modules/c9/blocked.js b/node_modules/c9/blocked.js new file mode 100644 index 00000000..14e760fb --- /dev/null +++ b/node_modules/c9/blocked.js @@ -0,0 +1,16 @@ +// module.exports = function (callback) { +// var start = Date.now(); +// setImmediate(function () { +// var took = Date.now() - start; +// return callback(null, took); +// }, 0); +// }; +module.exports = function (callback) { + var start = Date.now(); + // setInterval is handled after setImmediate and setTimeout handlers + var interval = setTimeout(function () { + clearInterval(interval); + var took = Date.now() - start; + return callback(null, took); + }, 0); +}; \ No newline at end of file diff --git a/node_modules/c9/blocked_test.js b/node_modules/c9/blocked_test.js new file mode 100644 index 00000000..63896960 --- /dev/null +++ b/node_modules/c9/blocked_test.js @@ -0,0 +1,65 @@ +"use strict"; +"use server"; + +var assert = require("assert"); +var blocked = require("./blocked"); + +module.exports = { + + "test normal run should return low blocked time": function(next) { + blocked(function(err, time) { + assert(!err, err); + assert(time < 10); + next(); + }); + }, + "test busy loop should report high blocked time": function(next) { + blocked(function(err, time) { + assert(!err, err); + assert(time >= 100); + next(); + }); + + var start = Date.now(); + while (Date.now() - start < 100) {} + }, + "test busy loop in setTimeout should report high blocked time": function(next) { + setTimeout(function() { + var start = Date.now(); + while (Date.now() - start < 100) {} + }, 0); + + blocked(function(err, time) { + assert(!err, err); + assert(time >= 100); + next(); + }); + }, + "test busy loop in setInterval should report high blocked time": function(next) { + var interval = setInterval(function() { + clearInterval(interval); + var start = Date.now(); + while (Date.now() - start < 100) {} + }); + + blocked(function(err, time) { + assert(!err, err); + assert(time >= 100); + next(); + }); + }, + "test busy loop in setImmediate should report high blocked time": function(next) { + setImmediate(function() { + var start = Date.now(); + while (Date.now() - start < 100) {} + }); + + blocked(function(err, time) { + assert(!err, err); + assert(time >= 100); + next(); + }); + } +}; + +!module.parent && require("asyncjs").test.testcase(module.exports).exec(); \ No newline at end of file