File tree Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Original file line number Diff line number Diff 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 ) ;
Original file line number Diff line number Diff 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} ) ;
You can’t perform that action at this time.
0 commit comments