Your IP : 216.73.216.48
;ELC
;;; Compiled
;;; in Emacs version 24.5.1
;;; with all optimizations.
;;; This file uses dynamic docstrings, first added in Emacs 19.29.
;;; This file does not contain utf-8 non-ASCII characters,
;;; and so can be loaded in Emacs versions earlier than 23.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(byte-code "\300\301!\210\300\302!\210\303\304\305\306\307\310\311\312\313\314& \207" [require cl-lib pcase custom-declare-group profiler nil "Emacs profiler." :group lisp :version "24.3" :prefix "profiler-"] 10)
(defconst profiler-version "24.3")
(byte-code "\300\301\302\303\304DD\305\306\307\310\311&\207" [custom-declare-variable profiler-sampling-interval funcall function #[0 "\300\207" [1000000] 1 "\n\n(fn)"] "Default sampling interval in nanoseconds." :type integer :group profiler] 8)
(defalias 'profiler-ensure-string #[257 "\211;\203 \207\2119\203 \300!\207\211\247\203 \301!\207\302\303\"\207" [symbol-name number-to-string format "%s"] 4 "\n\n(fn OBJECT)"])
(defalias 'profiler-format-percent #[514 "\300\301_\245!\302P\207" [number-to-string 100 "%"] 5 "\n\n(fn NUMBER DIVISOR)"])
#@54 Format NUMBER in human readable string.
(fn NUMBER)
(defalias 'profiler-format-number #[257 "\211\250\203V \211\300V\203V \301\302\303\"!T\304\246\305\306!\307\"\307\211:\203E @\262\300U\2034 \211\310C\244\262\304\262\211C\244\262S\262A\262\202 \311\312@\310=\203S A\202T \"\207\313!\207" [0 floor log 10 3 append number-to-string nil 44 apply string profiler-ensure-string] 9 (#$ . 1215)])
(defalias 'profiler-format #[385 "\300\211\211\211\300\211\211\211 :\203\315 @\262\211A\262\242\262 \211A\262\242\262@\262:\203\315 @\262:\203B \301\302#\202g ;\203P \303\"\202g 9\203d \304!\203d !\202g \305!\262G\262W\203\213 \211\306\307\310Z]\311\312%\210C\244\262\202\301 \211\313\307Z]\314\"\315\n\316\"\203\243 P\202\273 \315\n\317\"\203\261 \211P\202\273 \320\321\322#\205\273 \300\262C\244\262 A\262\nA\262\202\n \301\323\"\207" [nil apply profiler-format format fboundp profiler-ensure-string put-text-property 0 2 invisible profiler make-string 32 eql left right error "cl-ecase failed: %s, %s" (left right) concat] 19 "\n\n(fn FMT &rest ARGS)"])
#@106 Format ENTRY in human readable string. ENTRY would be a
function name of a function itself.
(fn ENTRY)
(defalias 'profiler-format-entry #[257 "\211\242\300>\203 \301\302\303!\"\207\304!\203 \301\305\303!\"\207\306!\204+ \2119\204+ \211;\2030 \301\307\"\207\301\310\303!\"\207" [(closure lambda) format "#<lambda 0x%x>" sxhash byte-code-function-p "#<compiled 0x%x>" subrp "%s" "#<unknown 0x%x>"] 5 (#$ . 2354)])
(defalias 'profiler-fixup-entry #[257 "\2119\203 \207\300!\207" [profiler-format-entry] 3 "\n\n(fn ENTRY)"])
(defalias 'profiler-fixup-backtrace #[257 "\300\301\302\303\"\"\207" [apply vector mapcar profiler-fixup-entry] 6 "\n\n(fn BACKTRACE)"])
#@57 Compare LOG1 with LOG2 and return diff.
(fn LOG1 LOG2)
(defalias 'profiler-compare-logs #[514 "\300\301\302\"\303\304\305\306\307\310!\311\"\312\313%\"\210\303\304\305\314\307\310\"\315\"\316\313%\"\210\211\207" [make-hash-table :test equal maphash make-byte-code 514 "\301\300#\207" vconcat vector [puthash] 6 "\n\n(fn BACKTRACE COUNT)" "\302\303\300\304#Z\301#\207" [puthash gethash 0] 8] 11 (#$ . 3031)])
(defalias 'profiler-fixup-log #[257 "\300\301\302\"\303\304\305\306\307\310!\311\"\312\313%\"\210\211\207" [make-hash-table :test equal maphash make-byte-code 514 "\301\302!\300#\207" vconcat vector [puthash profiler-fixup-backtrace] 6 "\n\n(fn BACKTRACE COUNT)"] 9 "\n\n(fn LOG)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-profile-tag--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-profile-tag (aref cl-x 0)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-profile-tag compiler-macro #1#] 4] 4)
(defalias 'profiler-profile-tag #[257 "\211\300H\207" [0] 3 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-profile-version--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-profile-version (aref cl-x 1)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-profile-version compiler-macro #1#] 4] 4)
(defalias 'profiler-profile-version #[257 "\211\300H\207" [1] 3 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-profile-type--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-profile-type (aref cl-x 2)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-profile-type compiler-macro #1#] 4] 4)
(defalias 'profiler-profile-type #[257 "\211\300H\207" [2] 3 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-profile-log--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-profile-log (aref cl-x 3)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-profile-log compiler-macro #1#] 4] 4)
(defalias 'profiler-profile-log #[257 "\211\300H\207" [3] 3 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-profile-timestamp--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-profile-timestamp (aref cl-x 4)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-profile-timestamp compiler-macro #1#] 4] 4)
(defalias 'profiler-profile-timestamp #[257 "\211\300H\207" [4] 3 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-profile-diff-p--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-profile-diff-p (aref cl-x 5)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-profile-diff-p compiler-macro #1#] 4] 4)
(defalias 'profiler-profile-diff-p #[257 "\211\300H\207" [5] 3 "\n\n(fn CL-X)"])
(defalias 'copy-profiler-profile #[257 "\300!\207" [copy-sequence] 3 "\n\n(fn X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-make-profile--cmacro #[385 "\300\301\"\206 \302A@\300\303\"\206 \304A@\300\305\"A@\300\306\"A@\300\307\"A@\300\310\"A@\211\203Z \211@\311>\203B \211AA\262\202/ \312>A@\203Q \313\262\202/ \314\315@\"\210\202/ \210\316\317\320\313\313&\207" [plist-member :tag (nil 'profiler-profile) :version (nil profiler-version) :type :log :timestamp :diff-p (:tag :version :type :log :timestamp :diff-p :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:tag :version :type :log :timestamp :diff-p)" cl--defsubst-expand (tag version type log timestamp diff-p) (cl-block profiler-make-profile (vector tag version type log timestamp diff-p))] 20 "\n\n(fn CL-WHOLE &cl-quote &key TAG VERSION TYPE LOG TIMESTAMP DIFF-P)"]] 3 "\300\301\302\303#\207" [put profiler-make-profile compiler-macro #1#] 4] 4)
#@51
(fn &key TAG VERSION TYPE LOG TIMESTAMP DIFF-P)
(defalias 'profiler-make-profile #[128 "\301\302\"\206 \303A@\301\304\"\206 \305DA@\301\306\"A@\301\307\"A@\301\310\"A@\301\311\"A@\211\203\\ \211@\312>\203D \211AA\262\2021 \313>A@\203S \305\262\2021 \314\315@\"\210\2021 \210\316&\207" [profiler-version plist-member :tag (nil profiler-profile) :version nil :type :log :timestamp :diff-p (:tag :version :type :log :timestamp :diff-p :allow-other-keys) :allow-other-keys error "Keyword argument %s not one of (:tag :version :type :log :timestamp :diff-p)" vector] 14 (#$ . 7490)])
(byte-code "\301C\302\303\304\305#\210\302\303\306\307#\210\302\303\310\311#\210\302\303\312\311#\210\302\313\314\315#\210\302\316\314\315#\210\302\317\314\315#\210\302\320\314\315#\210\302\321\314\315#\210\302\322\314\315#\210\302\323\314\315#\210\302\324\314\315#\207" [cl-struct-profiler-profile-tags cl-struct-profiler-profile put profiler-profile cl-struct-slots ((tag 'profiler-profile) (version profiler-version) (type) (log) (timestamp) (diff-p)) cl-struct-type (vector nil) cl-struct-include nil cl-struct-print profiler-make-profile side-effect-free t copy-profiler-profile profiler-profile-diff-p profiler-profile-timestamp profiler-profile-log profiler-profile-type profiler-profile-version profiler-profile-tag] 4)
#@73 Compare PROFILE1 with PROFILE2 and return diff.
(fn PROFILE1 PROFILE2)
(defalias 'profiler-compare-profiles #[514 "\300H\300H=\204 \301\302!\210\303\304\300H\305\306 \307\310\311\312\n\313H\n\313H\"&\207" [2 error "Can't compare different type of profiles" profiler-make-profile :type :timestamp current-time :diff-p t :log profiler-compare-logs 3] 14 (#$ . 8836)])
#@80 Fixup PROFILE so that the profile could be serialized into file.
(fn PROFILE)
(defalias 'profiler-fixup-profile #[257 "\300\301\302H\303\304H\305\306H\307\310 \311H!&\207" [profiler-make-profile :type 2 :timestamp 4 :diff-p 5 :log profiler-fixup-log 3] 12 (#$ . 9216)])
#@76 Write PROFILE into file FILENAME.
(fn PROFILE FILENAME &optional CONFIRM)
(defalias 'profiler-write-profile #[770 "\302\303!r\211q\210\304\305\306\307\310\311!\312\"\313\314%DC\216\315\211\316\317!p\"\210*\320\"*\207" [print-length print-level generate-new-buffer " *temp*" funcall make-byte-code 0 "\301\300!\205 \302\300!\207" vconcat vector [buffer-name kill-buffer] 2 "\n\n(fn)" nil print profiler-fixup-profile write-file] 11 (#$ . 9499)])
#@49 Read profile from file FILENAME.
(fn FILENAME)
(defalias 'profiler-read-profile #[257 "\300\301!r\211q\210\302\303\304\305\306\307!\310\"\311\312%DC\216\313!\210eb\210\314p!*\207" [generate-new-buffer " *temp*" funcall make-byte-code 0 "\301\300!\205 \302\300!\207" vconcat vector [buffer-name kill-buffer] 2 "\n\n(fn)" insert-file-contents read] 9 (#$ . 9959)])
#@142 Return non-nil if the profiler is running.
Optional argument MODE means only check for the specified mode (cpu or mem).
(fn &optional MODE)
(defalias 'profiler-running-p #[256 "\211\300=\203 \301\302!\205! \302 \207\211\303=\203 \304 \207\305\300!\206! \305\303!\207" [cpu fboundp profiler-cpu-running-p mem profiler-memory-running-p profiler-running-p] 3 (#$ . 10334)])
#@27 Return CPU profile.
(fn)
(defalias 'profiler-cpu-profile #[0 "\300\301!\205 \302\303\301\304\305 \306\307 &\207" [profiler-running-p cpu profiler-make-profile :type :timestamp current-time :log profiler-cpu-log] 7 (#$ . 10714)])
#@30 Return memory profile.
(fn)
(defalias 'profiler-memory-profile #[0 "\300 \205 \301\302\303\304\305 \306\307 &\207" [profiler-memory-running-p profiler-make-profile :type memory :timestamp current-time :log profiler-memory-log] 7 (#$ . 10952)])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-calltree-entry--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-calltree-entry (or (and (memq (aref cl-x 0) cl-struct-profiler-calltree-tags)) (error "%s accessing a non-%s" 'profiler-calltree-entry 'profiler-calltree)) (aref cl-x 1)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-calltree-entry compiler-macro #1#] 4] 4)
(defalias 'profiler-calltree-entry #[257 "\211\301H>\204 \302\303\304\305#\210\211\306H\207" [cl-struct-profiler-calltree-tags 0 error "%s accessing a non-%s" profiler-calltree-entry profiler-calltree 1] 5 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-calltree-count--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-calltree-count (or (and (memq (aref cl-x 0) cl-struct-profiler-calltree-tags)) (error "%s accessing a non-%s" 'profiler-calltree-count 'profiler-calltree)) (aref cl-x 2)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-calltree-count compiler-macro #1#] 4] 4)
(defalias 'profiler-calltree-count #[257 "\211\301H>\204 \302\303\304\305#\210\211\306H\207" [cl-struct-profiler-calltree-tags 0 error "%s accessing a non-%s" profiler-calltree-count profiler-calltree 2] 5 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-calltree-count-percent--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-calltree-count-percent (or (and (memq (aref cl-x 0) cl-struct-profiler-calltree-tags)) (error "%s accessing a non-%s" 'profiler-calltree-count-percent 'profiler-calltree)) (aref cl-x 3)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-calltree-count-percent compiler-macro #1#] 4] 4)
(defalias 'profiler-calltree-count-percent #[257 "\211\301H>\204 \302\303\304\305#\210\211\306H\207" [cl-struct-profiler-calltree-tags 0 error "%s accessing a non-%s" profiler-calltree-count-percent profiler-calltree 3] 5 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-calltree-parent--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-calltree-parent (or (and (memq (aref cl-x 0) cl-struct-profiler-calltree-tags)) (error "%s accessing a non-%s" 'profiler-calltree-parent 'profiler-calltree)) (aref cl-x 4)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-calltree-parent compiler-macro #1#] 4] 4)
(defalias 'profiler-calltree-parent #[257 "\211\301H>\204 \302\303\304\305#\210\211\306H\207" [cl-struct-profiler-calltree-tags 0 error "%s accessing a non-%s" profiler-calltree-parent profiler-calltree 4] 5 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-calltree-children--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-calltree-children (or (and (memq (aref cl-x 0) cl-struct-profiler-calltree-tags)) (error "%s accessing a non-%s" 'profiler-calltree-children 'profiler-calltree)) (aref cl-x 5)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-calltree-children compiler-macro #1#] 4] 4)
(defalias 'profiler-calltree-children #[257 "\211\301H>\204 \302\303\304\305#\210\211\306H\207" [cl-struct-profiler-calltree-tags 0 error "%s accessing a non-%s" profiler-calltree-children profiler-calltree 5] 5 "\n\n(fn CL-X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-calltree-p--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block profiler-calltree-p (and (vectorp cl-x) (>= (length cl-x) 6) (memq (aref cl-x 0) cl-struct-profiler-calltree-tags) t)) nil] 9 "\n\n(fn CL-WHOLE-ARG CL-X)"]] 3 "\300\301\302\303#\207" [put profiler-calltree-p compiler-macro #1#] 4] 4)
(defalias 'profiler-calltree-p #[257 "\301!\205 \211G\302Y\205 \211\303H>\205 \304\207" [cl-struct-profiler-calltree-tags vectorp 6 0 t] 3 "\n\n(fn CL-X)"])
(defalias 'copy-profiler-calltree #[257 "\300!\207" [copy-sequence] 3 "\n\n(fn X)"])
(byte-code "\300\301\302\303#\210\300\304\305\306#\207" [byte-code "\300\301\302\"\207" [defalias #1=#:profiler-make-calltree--cmacro #[385 "\300\301\"A@\300\302\"\206 \303A@\300\304\"\206 \305A@\300\306\"A@\300\307\"A@\211\203R \211@\310>\203: \211AA\262\202' \311>A@\203I \312\262\202' \313\314@\"\210\202' \210\315\316\317\312\n\312\n\n\n\n\n&\n\207" [plist-member :entry :count (nil 0) :count-percent (nil "") :parent :children (:entry :count :count-percent :parent :children :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:entry :count :count-percent :parent :children)" cl--defsubst-expand (entry count count-percent parent children) (cl-block profiler-make-calltree (vector 'cl-struct-profiler-calltree entry count count-percent parent children))] 18 "\n\n(fn CL-WHOLE &cl-quote &key ENTRY COUNT COUNT-PERCENT PARENT CHILDREN)"]] 3 "\300\301\302\303#\207" [put profiler-make-calltree compiler-macro #1#] 4] 4)
#@55
(fn &key ENTRY COUNT COUNT-PERCENT PARENT CHILDREN)
(defalias 'profiler-make-calltree #[128 "\300\301\"A@\300\302\"\206 \303A@\300\304\"\206 \305A@\300\306\"A@\300\307\"A@\211\203R \211@\310>\203: \211AA\262\202' \311>A@\203I \312\262\202' \313\314@\"\210\202' \210\315\316&\207" [plist-member :entry :count (nil 0) :count-percent (nil "") :parent :children (:entry :count :count-percent :parent :children :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:entry :count :count-percent :parent :children)" vector cl-struct-profiler-calltree] 13 (#$ . 16633)])
(byte-code "\301C\302\303\304\305#\210\302\303\306\307#\210\302\303\310\311#\210\302\303\312\313#\210\302\314\315\313#\210\302\316\315\313#\210\302\317\315\320#\210\302\321\315\313#\210\302\322\315\313#\210\302\323\315\313#\210\302\324\315\313#\210\302\325\315\313#\207" [cl-struct-profiler-calltree-tags cl-struct-profiler-calltree put profiler-calltree cl-struct-slots ((cl-tag-slot) (entry) (count 0) (count-percent "") (parent) (children)) cl-struct-type (vector nil) cl-struct-include nil cl-struct-print t profiler-make-calltree side-effect-free copy-profiler-calltree profiler-calltree-p error-free profiler-calltree-children profiler-calltree-parent profiler-calltree-count-percent profiler-calltree-count profiler-calltree-entry] 4)
(defalias 'profiler-calltree-leaf-p #[257 "\211\301H>\204 \302\303\304\305#\210\211\306H?\207" [cl-struct-profiler-calltree-tags 0 error "%s accessing a non-%s" profiler-calltree-children profiler-calltree 5] 5 "\n\n(fn TREE)"])
(defalias 'profiler-calltree-count< #[514 "\301H>\204 \302\303\304\305#\210\306H\307=\203 \307\207\211\301H>\204&