@@ -227,6 +227,64 @@ log_tictoc <- function(..., level = INFO, namespace = NA_character_) {
227227}
228228tictocs <- new.env(parent = emptyenv())
229229
230+ # ' Log cumulative running time
231+ # '
232+ # ' This function is working like [log_tictoc()] but differs in that it continues
233+ # ' to count up rather than resetting the timer at every call. You can set the
234+ # ' start time using `log_elapsed_start()`, but if that hasn't been called it
235+ # ' will show the time since the R session started.
236+ # '
237+ # ' @inheritParams log_tictoc
238+ # '
239+ # ' @export
240+ # '
241+ # ' @examples
242+ # ' log_elapsed_start()
243+ # ' Sys.sleep(0.4)
244+ # ' log_elapsed("Tast 1")
245+ # ' Sys.sleep(0.2)
246+ # ' log_elapsed("Task 2")
247+ # '
248+ log_elapsed <- function (... , level = INFO , namespace = NA_character_ ) {
249+ ns <- fallback_namespace(namespace )
250+
251+ start <- get0(ns , envir = elapsed , ifnotfound = 0 )
252+
253+ time_elapsed <- as.difftime(proc.time()[" elapsed" ] - start , units = " secs" )
254+
255+ log_level(
256+ paste(
257+ ns , " timer" ,
258+ round(time_elapsed , 2 ), attr(time_elapsed , " units" ), " elapsed -- "
259+ ),
260+ ... ,
261+ level = level , namespace = namespace ,
262+ .logcall = sys.call(),
263+ .topcall = sys.call(- 1 ),
264+ .topenv = parent.frame()
265+ )
266+ }
267+ # ' @rdname log_elapsed
268+ # ' @param quiet Should starting the time emit a log message
269+ # ' @export
270+ log_elapsed_start <- function (level = INFO , namespace = NA_character_ , quiet = FALSE ) {
271+ ns <- fallback_namespace(namespace )
272+
273+ assign(ns , proc.time()[" elapsed" ], envir = elapsed )
274+
275+ if (! quiet ) {
276+ log_level(
277+ paste(
278+ " starting" , ns , " timer"
279+ ),
280+ level = level , namespace = namespace ,
281+ .logcall = sys.call(),
282+ .topcall = sys.call(- 1 ),
283+ .topenv = parent.frame()
284+ )
285+ }
286+ }
287+ elapsed <- new.env(parent = emptyenv())
230288
231289# ' Logs the error message to console before failing
232290# ' @param expression call
0 commit comments