# 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 # . __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