Skip to content

Commit d817675

Browse files
committed
add timed functions
1 parent 8e91e44 commit d817675

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

src/debug.js

+31
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,37 @@ function createDebug(namespace) {
160160
return section;
161161
};
162162

163+
debug.time = function () {
164+
var args = [].slice.call(arguments);
165+
if (args.length < 2) {
166+
throw new Error('debug.time() takes at least a debug string and a function');
167+
}
168+
169+
var fn = args.pop();
170+
if (typeof fn !== 'function') {
171+
throw new Error('the last argument to debug.time() must be a function');
172+
}
173+
174+
var isPromise = false;
175+
var section = debug.begin.apply(debug, args);
176+
try {
177+
var result = fn();
178+
179+
if (typeof Promise === 'function' && result instanceof Promise) { // eslint-disable-line no-undef
180+
isPromise = true;
181+
result.then(function () {
182+
section.end();
183+
});
184+
}
185+
186+
return result;
187+
} finally {
188+
if (!isPromise) {
189+
section.end();
190+
}
191+
}
192+
};
193+
163194
// env-specific initialization logic for debug instances
164195
if ('function' === typeof exports.init) {
165196
exports.init(debug);

test/debug_spec.js

+12
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ describe('debug', function () {
8282

8383
expect(log.log).to.have.been.calledThrice;
8484
});
85+
86+
it('times a critical function', function () {
87+
log.log = sinon.spy();
88+
89+
var result = log.time('a critical function', function () {
90+
log('hello from inside');
91+
return 1234;
92+
});
93+
94+
expect(result).to.equal(1234);
95+
expect(log.log).to.have.been.calledThrice;
96+
});
8597
});
8698
});
8799
});

0 commit comments

Comments
 (0)