Skip to content

Instantly share code, notes, and snippets.

@rokujyouhitoma
Created April 3, 2012 09:32
Show Gist options
  • Save rokujyouhitoma/2290661 to your computer and use it in GitHub Desktop.
Save rokujyouhitoma/2290661 to your computer and use it in GitHub Desktop.
/**
* @param {Function} func .
* @param {Function} .
*/
function decorator(func, begin, end) {
return function() {
var time = begin(arguments);
var result = func.apply(this, arguments);
setTimeout(function(){
end(arguments, time);
}, 0);
return result;
};
}
/**
* @param {object} ctor Constructor object.
*/
function addSingleton(ctor) {
ctor.getInstance = function() {
if (ctor.__instance__) {
return ctor.__instance__;
}
return ctor.__instance__ = new ctor();
};
};
**
* @constructor
*/
var Profiler = function() {
this.logs = [];
};
addSingleton(Profiler);
Profiler.prototype.decorator = function(func, message) {
var self = this;
var f = decorator(func, function begin() {
return Date.now();
}, function end (args, old) {
self.logs.push(message);
self.logs.push(old);
self.logs.push(Date.now());
});
return f;
};
Profiler.prototype.report = function() {
var buf = [];
var items = this.logs;
var i = 0;
var len = items.length;
var j = len / 3;
for (; i < j; ++i) {
console.log(items[(i * 3)] + " : " + (items[(i * 3) + 2] - items[(i*3) + 1]));
}
};
exports.Profiler = Profiler;
//usage
//var f = function() {};
//f = Profiler.getInstance().decorator(f, "function f()");
//f();
//Profiler.getInstance().report();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment