mirror of
https://github.com/dimitri/pgloader.git
synced 2025-08-07 23:07:00 +02:00
38 lines
1.1 KiB
Common Lisp
38 lines
1.1 KiB
Common Lisp
;;;
|
|
;;; Some little timing tools
|
|
;;;
|
|
|
|
(in-package :pgloader)
|
|
|
|
;;;
|
|
;;; Timing Macros
|
|
;;;
|
|
(defun elapsed-time-since (start)
|
|
"Return how many seconds ticked between START and now"
|
|
(/ (- (get-internal-real-time) start)
|
|
internal-time-units-per-second))
|
|
|
|
(defmacro timing (&body forms)
|
|
"return both how much real time was spend in body and its result"
|
|
(let ((start (gensym))
|
|
(end (gensym))
|
|
(result (gensym)))
|
|
`(let* ((,start (get-internal-real-time))
|
|
(,result (progn ,@forms))
|
|
(,end (get-internal-real-time)))
|
|
(values ,result (/ (- ,end ,start) internal-time-units-per-second)))))
|
|
|
|
(defun format-interval (seconds &optional (stream t))
|
|
"Output the number of seconds in a human friendly way"
|
|
(multiple-value-bind (years months days hours mins secs millisecs)
|
|
(date:decode-interval (date:encode-interval :second seconds))
|
|
(format
|
|
stream
|
|
"~:[~*~;~d years ~]~:[~*~;~d months ~]~:[~*~;~d days ~]~:[~*~;~dh~]~:[~*~;~dm~]~d.~ds"
|
|
(< 0 years) years
|
|
(< 0 months) months
|
|
(< 0 days) days
|
|
(< 0 hours) hours
|
|
(< 0 mins) mins
|
|
secs (truncate millisecs))))
|