[Pm-utils] [PATCH] Profile time spent in hooks when PM_PROFILE is true
Dan Nicholson
dbn.lists at gmail.com
Sun Nov 30 22:19:47 PST 2008
Adds a couple functions for calculating time between two points. These
are used to profile the time spent on each hook when the PM_PROFILE
variable is "true".
Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
---
Feel free to adapt this to your preference.
pm/pm-functions.in | 25 ++++++++++++++++++++++++-
src/pm-action.in | 12 ++++++++++++
2 files changed, 36 insertions(+), 1 deletions(-)
diff --git a/pm/pm-functions.in b/pm/pm-functions.in
index f5cc400..142f8b3 100644
--- a/pm/pm-functions.in
+++ b/pm/pm-functions.in
@@ -44,6 +44,7 @@ DROP_PARAMETERS=""
PARAMETERS="${STORAGEDIR}/parameters"
INHIBIT="${STORAGEDIR}/inhibit"
PM_CMDLINE="$*"
+PM_PROFILE=""
BEFORE_HOOKS=""
MODULE_HELP=""
SUSPEND_MODULE=""
@@ -95,6 +96,19 @@ log()
printf "$fmt" "$*"
}
+# Get the current time for profiling.
+get_current_time()
+{
+ date '+%s.%N'
+}
+
+# Get time spent between two points.
+get_time_spent()
+{
+ [ -z "$1" ] || [ -z "$2" ] && return 1
+ perl -e "printf \"%.3f\n\", $2 - $1"
+}
+
add_before_hooks() {
[ -z "$BEFORE_HOOKS" ] && BEFORE_HOOKS="$*" || \
BEFORE_HOOKS="$BEFORE_HOOKS $*"
@@ -184,6 +198,8 @@ run_hooks() {
local sort="sort"
local base
local hook
+ local status
+ local t1 t2 time
local oifs="${IFS}"
# the next two lines are not a typo or a formatting error!
local nifs="
@@ -208,10 +224,17 @@ run_hooks() {
hook="$phooks/$base"
fi
log -n "${hook} $2: "
+ [ "$PM_PROFILE" = true ] && t1=$(get_current_time)
hook_ok "$hook" && "${hook}" $2
+ status=$?
+ [ "$PM_PROFILE" = true ] && {
+ t2=$(get_current_time)
+ time=$(get_time_spent "$t1" "$t2")
+ }
# if the hook exited with an unknown exit code inhibit,
# otherwise record this as the last hook that ran.
- hook_exit_status $? && LAST_HOOK="$base" || inhibit
+ hook_exit_status $status && LAST_HOOK="$base" || inhibit
+ [ "$PM_PROFILE" = true ] && log "$hook $2: $time sec"
IFS="${nifs}"
done
IFS="${oifs}"
diff --git a/src/pm-action.in b/src/pm-action.in
index 88bdb4e..dd71a67 100755
--- a/src/pm-action.in
+++ b/src/pm-action.in
@@ -93,7 +93,13 @@ load_hook_parameters
# run the sleep hooks
log "$(date): Running hooks for $ACTION."
+[ "$PM_PROFILE" = true ] && t1=$(get_current_time)
if run_hooks sleep "$ACTION $METHOD"; then
+ [ "$PM_PROFILE" = true ] && {
+ t2=$(get_current_time)
+ time=$(get_time_spent "$t1" "$t2")
+ log "Time for $ACTION hooks: $time sec"
+ }
# Sleep only if we know how and if a hook did not inhibit us.
log "$(date): performing $METHOD"
sync
@@ -103,8 +109,14 @@ else
log "$(date): Inhibit found, will not perform $METHOD"
fi
log "$(date): Running hooks for $REVERSE"
+[ "$PM_PROFILE" = true ] && t1=$(get_current_time)
# run the sleep hooks in reverse with the wakeup action
if run_hooks sleep "$REVERSE $METHOD" reverse; then
+ [ "$PM_PROFILE" = true ] && {
+ t2=$(get_current_time)
+ time=$(get_time_spent "$t1" "$t2")
+ log "Time for $REVERSE hooks: $time sec"
+ }
log "$(date): Finished."
else
exit 1
--
1.5.6.5
More information about the Pm-utils
mailing list