Skip to content

Commit

Permalink
Remove conditionals from profiling
Browse files Browse the repository at this point in the history
  • Loading branch information
Izaakwltn committed Oct 11, 2024
1 parent 194c079 commit bc3d762
Showing 1 changed file with 26 additions and 25 deletions.
51 changes: 26 additions & 25 deletions library/system.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
(:export
#:get-real-time
#:get-run-time
#+sbcl #:get-bytes-consed
#:monotonic-bytes-consed
#:Profile
#:capture-profile)
(:export
Expand Down Expand Up @@ -76,55 +76,56 @@ While the result will always contain microseconds, some implementations may retu

(declare get-run-time (Unit -> UFix))
(define (get-run-time)
"Gets the run-time."
"Gets the run-time in microseconds."
(lisp UFix ()
(cl:get-internal-run-time)))

(declare get-real-time (Unit -> UFix))
(define (get-real-time)
"Gets the real-time."
"Gets the real-time in microseconds."
(lisp UFix ()
(cl:get-internal-real-time)))

#+sbcl
(declare get-bytes-consed (Unit -> UFix))
#+sbcl
(define (get-bytes-consed)
"Gets the number of bytes consed (only implemented for SBCL"
(lisp UFix ()
(sb-ext:get-bytes-consed)))
(declare monotonic-bytes-consed (Unit -> (Optional Integer)))
(define (monotonic-bytes-consed)
"Return the number of bytes consed since some unspecified point in time.
The difference between two successive calls to this function represents the number of bytes consed in that period of time."
#+sbcl
(Some (lisp Integer ()
(sb-ext:get-bytes-consed)))
#-sbcl
None)

(define-struct (Profile :a)
"A profile of a run function."
"A profile of a function, containing space and timing information.."
(output
"The output of the function" :a)
"The output of the function." :a)
(run-time
"The run time of the run" UFix)
"The run time of the run in microseconds." UFix)
(real-time
"The real time of the run" UFix)
#+sbcl
"The real time of the run in microseconds" UFix)
(bytes-consed
"The number of bytes consed during the run." UFix))
"The number of bytes consed during the run." (Optional Integer)))

(declare capture-profile ((Unit -> :a) -> (Profile :a)))
(define (capture-profile f)
"Runs a function, recording profile information and returning a Profile object."
(declare spacetime ((Unit -> :a) -> (Profile :a)))
(define (spacetime f)
"Runs a function, recording space and timing information and returning a Profile object."
(gc)
(let (#+sbcl
(start-bytes-consed (get-bytes-consed))
(let ((start-bytes-consed (monotonic-bytes-consed))
(start-run-time (get-run-time))
(start-real-time (get-real-time))
(value (f))
#+sbcl
(end-bytes-consed (get-bytes-consed))
(end-bytes-consed (monotonic-bytes-consed))
(end-run-time (get-run-time))
(end-real-time (get-real-time)))
(Profile
value
(- end-run-time start-run-time)
(- end-real-time start-real-time)
#+sbcl
(- end-bytes-consed start-bytes-consed)))))
(match (Tuple end-bytes-consed start-bytes-consed)
((Tuple (Some a) (Some b))
(Some (- a b)))
(_ None))))))

;;;
;;; Gathering System information
Expand Down

0 comments on commit bc3d762

Please sign in to comment.