]> git.eshelyaron.com Git - emacs.git/commitdiff
* Introduce native compilation time reports
authorAndrea Corallo <akrl@sdf.org>
Sun, 10 Jan 2021 14:39:16 +0000 (15:39 +0100)
committerAndrea Corallo <akrl@sdf.org>
Thu, 14 Jan 2021 21:07:12 +0000 (22:07 +0100)
* lisp/emacs-lisp/comp.el (comp-log-time-report): New special
variable.
(comp--native-compile): Rework to log time reports.

lisp/emacs-lisp/comp.el

index d5ca3b00049ec2c527e03d60a2123e2630322e4a..156b00e6273a5e7780ed477a3abfd72914d68767 100644 (file)
@@ -142,6 +142,9 @@ The reproducer is a file ELNFILENAME_libgccjit_repro.c deposed in
 the .eln output directory."
   :type 'boolean)
 
+(defvar comp-log-time-report nil
+  "If non-nil, log a time report for each pass.")
+
 (defvar comp-dry-run nil
   "If non-nil, run everything but the C back-end.")
 
@@ -3869,15 +3872,24 @@ load once finished compiling."
                                     :with-late-load with-late-load)))
     (comp-log "\n\f\n" 1)
     (condition-case err
-        (mapc (lambda (pass)
-                (unless (memq pass comp-disabled-passes)
-                  (comp-log (format "(%s) Running pass %s:\n"
-                                    function-or-file pass)
-                            2)
-                  (setf data (funcall pass data))
-                  (cl-loop for f in (alist-get pass comp-post-pass-hooks)
-                           do (funcall f data))))
-              comp-passes)
+        (cl-loop
+         with report = nil
+         for t0 = (current-time)
+         for pass in comp-passes
+         unless (memq pass comp-disabled-passes)
+         do
+         (comp-log (format "(%s) Running pass %s:\n"
+                           function-or-file pass)
+                   2)
+         (setf data (funcall pass data))
+         (push (cons pass (float-time (time-since t0))) report)
+         (cl-loop for f in (alist-get pass comp-post-pass-hooks)
+                  do (funcall f data))
+         finally
+         (when comp-log-time-report
+           (comp-log (format "Done compiling %s" data) 0)
+           (cl-loop for (pass . time) in (reverse report)
+                    do (comp-log (format "Pass %s took: %fs." pass time) 0))))
       (native-compiler-error
        ;; Add source input.
        (let ((err-val (cdr err)))