diff options
author | P. J. McDermott <pj@pehjota.net> | 2016-02-23 21:54:42 (EST) |
---|---|---|
committer | P. J. McDermott <pj@pehjota.net> | 2016-02-24 00:39:25 (EST) |
commit | 7add577ea68819fb7f64e16187d2543c1cf5518b (patch) | |
tree | 7033bcbd27d868484e6f9c4378e1de712f378f25 | |
parent | 8c6e5d210adca90450fe82c1fcb30075d555d976 (diff) | |
download | eggshell-7add577ea68819fb7f64e16187d2543c1cf5518b.zip eggshell-7add577ea68819fb7f64e16187d2543c1cf5518b.tar.gz eggshell-7add577ea68819fb7f64e16187d2543c1cf5518b.tar.bz2 |
libeshprof: New profiling library
-rw-r--r-- | libeshprof/hooks.esh | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libeshprof/hooks.esh b/libeshprof/hooks.esh new file mode 100644 index 0000000..a17ec77 --- /dev/null +++ b/libeshprof/hooks.esh @@ -0,0 +1,41 @@ +# Eggshell profiling library +# +# Copyright (C) 2016 Patrick "P. J." McDermott +# +# This file is part of the Eggshell Linker. +# +# The Eggshell Linker is free software: you can redistribute it +# and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# The Eggshell Linker is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with the Eggshell Linker If not, see +# <http://www.gnu.org/licenses/>. + +__prof_stack_sz=0 + +__prof_fn_begin() +{ + if [ ${__prof_stack_sz} -eq 0 ]; then + exec 9>eshmon.out + fi + printf '%s %s %s\n' "$(date '+%s.%N')" 'B' "${1}" >&9 + __prof_stack_sz=$((${__prof_stack_sz} + 1)) +} +__fn_begin_hook __prof_fn_begin + +__prof_fn_end() +{ + printf '%s %s %s\n' "$(date '+%s.%N')" 'E' "${1}" >&9 + __prof_stack_sz=$((${__prof_stack_sz} - 1)) + if [ ${__prof_stack_sz} -eq 0 ]; then + exec 9>&- + fi +} +__fn_end_hook __prof_fn_end |