dotfiles/.emacs.d/modules/sqrt-performance.el

50 lines
1.7 KiB
EmacsLisp

;;; -*- lexical-binding: t -*-
(setq my/emacs-started nil)
(add-hook 'emacs-startup-hook
(lambda ()
(message "*** Emacs loaded in %s with %d garbage collections."
(format "%.2f seconds"
(float-time
(time-subtract after-init-time before-init-time)))
gcs-done)
(setq my/emacs-started t)))
(setq use-package-verbose nil)
(setq use-package-compute-statistics t)
(setq gc-cons-threshold 80000000)
(setq read-process-output-max (* 1024 1024))
(add-hook 'emacs-startup-hook
(lambda ()
(if (boundp 'after-focus-change-function)
(add-function :after after-focus-change-function
(lambda ()
(unless (frame-focus-state)
(garbage-collect))))
(add-hook 'after-focus-change-function 'garbage-collect))))
(defun my/get-ram-usage-async (callback)
(let* ((temp-buffer (generate-new-buffer "*ps*"))
(proc (start-process "ps" temp-buffer "ps"
"-p" (number-to-string (emacs-pid)) "-o" "rss")))
(set-process-sentinel
proc
(lambda (process _msg)
(when (eq (process-status process) 'exit)
(let* ((output (with-current-buffer temp-buffer
(buffer-string)))
(usage (string-to-number (nth 1 (split-string output "\n")))))
(ignore-errors
(funcall callback usage)))
(kill-buffer temp-buffer))))))
(defun my/ram-usage ()
(interactive)
(my/get-ram-usage-async
(lambda (data)
(message "%f Gb" (/ (float data) 1024 1024)))))
(provide 'sqrt-performance)