;; -*- lexical-binding: t; -*- ;;; Benchmark helper functions (defvar my-benchmark-accumulate-time--num-time '(0 0)) ;;;###autoload (defun my-benchmark-accumulate-time-a (func &rest args) (let* ((time0 (current-time))) (unwind-protect (apply func args) (pcase-let* ((delta (float-time (time-since time0))) (`(,num ,total-time) my-benchmark-accumulate-time--num-time)) (setq my-benchmark-accumulate-time--num-time (list (+ (or num 0) 1) (+ (or total-time 0) delta))))))) (defun my-benchmark-accumulate-time-report (&optional reset) (prog1 (pcase-let* ((`(,num ,total-time) my-benchmark-accumulate-time--num-time)) (list :num num :total-time total-time :average (ignore-error arith-error (/ total-time num)))) (when reset (setq my-benchmark-accumulate-time--num-time nil)))) (defun my-to-new-buffer () (interactive) (switch-to-buffer (generate-new-buffer "new"))) ;;; Perform benchmarking (defconst my-typing "Emacs la2 tri2nh soa5n tha3o va8n ba3n d9a chu71c na8ng. D9a6y la2 pha62n me62m tu75 do, cha5y d9u7o75c tre6n nhie62u he65 d9ie62u ha2nh va2 co1 the63 mo73 ro65ng d9e63 the6m va2o chu71c na8ng mo71i." "https://vi.wikipedia.org/wiki/Emacs") (defun my-benchmark-quail (&optional load-compiled-quail-package) (interactive "P") (deactivate-input-method) (advice-add #'quail-input-method :around #'my-benchmark-accumulate-time-a) (my-benchmark-accumulate-time-report 'reset) (benchmark-progn (if load-compiled-quail-package (load "/usr/share/emacs/29.0.60/lisp/leim/quail/vnvni") (load "/usr/share/emacs/29.0.60/lisp/leim/quail/vnvni.el"))) (activate-input-method "vietnamese-vni") (let* ((proc (start-process "" nil "ydotool" "type" my-typing))) (set-process-sentinel proc (lambda (&rest _) (deactivate-input-method) (print (list :compiled load-compiled-quail-package (my-benchmark-accumulate-time-report)))))))